Kafka
-
레플리카의 상태와 세가지 궁금증개발자 라이프/카프카 2022. 10. 29. 13:44
들어가며 파티션의 레플리카는 그 상황에 따라 특정한 상태가 됩니다. 이번 글은 레플리카의 상태들에 대해 살펴봅니다. 나아가 3가지 궁금증에 대해 살펴보겠습니다. 레플리카의 상태 레플리카는 그 생애 주기에 따라 아래와 같이 7가지 상태를 가집니다. NewReplica : 컨트롤러가 파티션 재할당 과정에서 레플리카를 생성했을 때, 이 상태가 됩니다. 이 상태에선 팔로워 레플리카가 되라는 요청만 받을 수 있습니다. OnlineReplica : 할당된 레플리카(assign replicas)에 속하게 되면 이 상태가 됩니다. 이 상태에선 리더, 팔로워 레플리카가 되라는 요청을 받을 수 있습니다. OfflineReplica : 레플리카가 불능이면 이 상태가 됩니다. 일반적으로 레플리카가 속해있는 브로커가 종료되었을..
-
파티션 재할당(Reassignment) 로직 찍먹하기개발자 라이프/카프카 2022. 10. 24. 23:38
들어가며 이번엔 KafkaController 클래스에서 onPartitionReassignment 메서드 주석을 통해 파티션 재할당하는 로직을 알아봅니다. 대상 버전은 현재 가장 최신 버전인 3.3.0 버전입니다. 본문 중 Reassignment은 파티션 재할당 작업과 동일한 의미입니다. 파티션 재할당 로직 찍먹하기 onPartitionReassignment 메서드가 실행되는 시점 AlterPartitionReassignments API 가 호출되었을 때, Reassignment 정보를 저장하는 주키퍼 znode 경로에 znode가 생성되었을 때, 진행 중이던 reassignment 작업이 종료되었을 때, (파티션의 ISR znode 변경으로 감지됨) 진행 중이던 reassignment 작업의 대상 브로..
-
[카프카 프로토콜 이해하기] 1. 네트워크개발자 라이프/카프카 2021. 9. 12. 23:13
들어가며 카프카의 브로커는 중앙에서 수많은 클라이언트와 네트워크 요청/응답을 주고받습니다. 예를 들어, 프로듀싱/컨슈밍 할 파티션 찾기, 메시지 프로듀싱과 컨슈밍, 컨슈머 그룹 Join과 Sync 등이 있습니다. 그럼에도 불구하고 카프카는 매우 빠른 처리량으로 유명합니다. 이렇게 카프카의 브로커와 클라이언트가 빠른 네트워크 요청/응답을 주고받을 수 있는 것은 카프카의 요청/응답에 대한 네트워크 구성 방식 때문일 텐데요. 이번 글은 이러한 카프카의 네트워크 특징을 살펴봅니다. 참고로 이번 글은 카프카 프로토콜 공식문서의 Network 단락을 기반으로 합니다. 틀린 부분이 있다면 댓글 부탁드립니다. 네트워크 카프카의 네트워크는 아래와 같은 특징을 가집니다. Binary Protocol (바이너리 프로토콜) ..
-
[Spring Kafka] 컨슈밍과 관련된 구성 요소 살펴보기개발자 라이프/카프카 2021. 8. 1. 23:49
들어가며 스프링 카프카 프로젝트는 스프링 프레임워크 내에서 카프카를 더욱 손쉽게 사용할 수 있도록 지원하는 프로젝트입니다. 그래서 기존 카프카의 프로듀서, 컨슈머, 스트림 어플리케이션 구성을 스프링 프레임워크 내에서 간단하게 정의하고, 구현할 수 있도록 합니다. 이번 글은 스프링 카프카에서 컨슈밍과 관련된 구성 요소들을 간단히 살펴봅니다. 컨슈밍과 관련된 구성 요소 살펴보기 MessageListenerContainer Spring Kafka에선 MessageListenerContainer를 설정하여 컨슈머를 구성합니다. 그리고 실제 동작은 MessageListener 구현체를 MessageListenerContainer 설정에 제공하거나, 처리와 관련된 함수에 @KafkaListener 어노테이션을 붙여..
-
[Kafka] kafka api - LeaderAndIsr 에 관하여개발자 라이프/카프카 2021. 4. 23. 17:22
들어가며 카프카 클러스터의 브로커들 중에는 파티션 레플리카들의 리더와 팔로워 상태를 관리하는 컨트롤러 브로커가 있습니다. 컨트롤러 브로커는 브로커들의 partition reassign 등으로 리더-팔로워 상태가 변경된 경우, 변경된 상태를 클러스터의 브로커들에게 전달하여 적용할 수 있도록 합니다. 이번 글은 컨트롤러 브로커가 다른 브로커에 레플리카 정보를 전달하는 과정에 대해 알아봅니다. LeaderAndIsr 카프카는 브로커 간 통신에 관한 protocol과 api 스펙을 정의해서 사용합니다. 그중 파티션의 리더-팔로워 역할 정보와 ISR(In Sync Replicas) 정보를 통신하기 위해 LeaderAndIsr 스펙(api key)를 사용합니다. LeaderAndIsr Request LeaderAn..
-
[Kafka 운영] 컨슈머 그룹 정보는 언제 사라질까?개발자 라이프/카프카 2021. 3. 29. 01:21
들어가며 카프카를 운영하다 보면 다양한 컨슈머가 붙었다(active) 떨어지곤(inactive) 합니다. 특히, 운영 과정에서 자주 사용하는 콘솔 컨슈머의 경우, 사용할 때마다 새로운 컨슈머 그룹 정보를 생성하게 됩니다. 그런데 운영하다 보면 어느샌가 이전에 사용했던 컨슈머 그룹 정보가 남아있지 않다는 것을 볼 수 있습니다. 그렇다면 카프카는 컨슈머 그룹 정보를 언제 청소(clean up)하게 될까요? 이번 글은 로그 정보를 이용하여 컨슈머 그룹 정보가 언제 어떤 설정과 연관되어 사라지는지 알아봅니다. __consumer_offsets를 찍어보자 각 컨슈머 그룹은 컨슈밍 하는 토픽 파티션에 대하여 어디까지 컨슈밍 했는지를 __consumer_offsets 토픽에 저장합니다. 그렇다면 컨슈머 그룹은 이 토..
-
[Kafka 개발] kafka-connect-datagen 커넥터로 테스트 데이터 생성하기개발자 라이프/카프카 2021. 1. 24. 23:09
0. 들어가며 우리는 카프카 토픽을 컨슘(구독)하여 다양한 처리를 할 수 있습니다. 하지만 초기 개발 과정에는 토픽에 메시지가 적재되어 있지 않을 수도 있고, 또한 일시적으로 적재되어있다고 하더라도 메시지가 retention 기간에 따라 삭제/압축되기 때문에 지속적인 개발/테스트가 어려울 수 있습니다. 이번 글은 이러한 케이스에서 유용하게 사용할 수 있는 kafka-connect-dategen 커넥터에 대해 소개합니다. 1. kafka-connect-datagen 커넥터 kafka-connect-datagen(이하 datagen) 커넥터는 사용자가 설정한 명세에 따라 데이터를 생성하여 타겟 토픽에 데이터를 밀어 넣어 주는 커넥터입니다. 그렇기 때문에 토픽을 구독하여 처리하는 컨슈머, 스트림즈, 싱크 커넥..
-
[Kafka 운영] Request log 살펴보기개발자 라이프/카프카 2020. 11. 29. 23:11
들어가며 카프카는 아키텍처 중앙에 위치하여 다양한 클라이언트들의 요청을 받습니다. 그렇기 때문에 간혹 클라이언트에서 잘못된 요청을 보내는 경우가 발생할 수 있습니다. 예를 들면, 스키마가 정의되지 않은 토픽에 대해 프로듀서가 기존과 다른 임의의 메시지 포맷으로 보내게 된다면 컨슈머는 이 메시지를 처리하지 못하게 됩니다. 이와 같이 잘못된 요청이 발생하게 되면 어떤 클라이언트에서 보낸 요청인지 확인할 필요가 있습니다. 그리고 다행히도 카프카는 브로커가 받는 요청에 대해 별도의 로그 파일로 저장할 수 있습니다. 이번 글은 카프카 브로커가 받은 요청에 대해 저장하는 로그인 request log에 대해 살펴봅니다. 이 글 내용은 카프카 한국 사용자 모임에서 진행한 제4회 버츄얼 밋업 내용에서 영감을 받아 작성했..