분류 전체보기
-
[Kafka] Consumer가 추가되면 Rebalance는 어떻게 동작할까?Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 실행되면서 Consumer Group 을 형성합니다.동일한 group.id 를 가지는 여러 컨슈머들은 하나의 Consumer Group 에 소속되게 됩니다.이 과정에서 JoinGroup 과 SyncGroup API 를 활용하게 되고, Consumer Group 의 형성과 파티션 할당이 이루어집니다.그리고 여러가지 상황에 의해서 컨슈머가 추가되거나 종료될 수 있는데요.이 과정에서 리밸런싱이 발생합니다. 이번 글에서는 컨슈머의 여러가지 동작에 따른 리밸런싱이 어떻게 발생하는지 알아보는 시간을 가지려고 합니다. Rebalance 1) 새로운 컨슈머가 추가되는 상황.기존의 Consumer Group 이 존재하는 상황에서 새로운 컨슈머가 추가됩니다.이때에 새로운 컨슈머는 Joi..
-
[Kafka] Consumer Heartbeat 의 내부 동작 원리Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 실행 후 Consumer Group 을 형성합니다.이 과정에서 컨슈머들은 브로커와 FindCoordinator, JoinGroup, SyncGroup 의 API 통신을 수행합니다. 이렇게 여러 컨슈머들을 하나의 그룹이 됩니다.하나의 Consumer Group 된 컨슈머들은 SyncGroup API 를 마무리로 각자 자신이 소비해야할 파티션 목록을 부여받게 됩니다.그리고 본격적으로 데이터의 소비를 시작합니다. ( Fetch API 를 통해서 ) 카프카 컨슈머는 Fetch API 를 통해서 데이터를 소비하는 작업 뿐만 아니라 Heartbeat 요청을 브로커에게 꾸준히 전달합니다.이때 Heartbeat 를 전달받는 브로커를 Group Coordinator 라고 부릅니다.여러 ..
-
[Kafka] Consumer 의 Fetch Request 와 max_wait_ms 관계 알아보기 ( fetch.wait.max.ms )Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 브로커에게 데이터를 요청할 수 있습니다.일반적인 카프카 클라이언트 모듈에서 Poll 과 같은 함수로 이러한 데이터 요청 기능이 추상화되어 있습니다.Poll 함수 내부적으로는 Fetch API 가 사용되구요.Fetch API 의 요청과 응답의 형식은 아래와 같습니다. Fetch Request (Version: 1) => replica_id max_wait_ms min_bytes [topics] replica_id => INT32 max_wait_ms => INT32 min_bytes => INT32 topics => topic [partitions] topic => STRING partitions => partition fetch_offset part..
-
[Kafka] SyncGroup API 알아보기Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.Kafka Consumer 는 리밸런싱이라는 과정을 통해서 Consumer Group 을 형성합니다.이 과정에서 FindCoordinator, JoinGroup, SyncGroup 등의 API 가 사용됩니다.SyncGroup 은 각 Consumer 와 Topic-Partition 의 할당을 마무리짓고, 본격적인 Record Fetch 를 수행하는 마지막 과정입니다.이번 글에서 SyncGroup API 에 대해서 상세히 알아보도록 하겠습니다. https://westlife0615.tistory.com/944 [Kafka] FindCoordinator API 와 Group Coordinator 알아보기- 목차 들어가며.Kafka Consumer 는 group.id 라는 설정을 통해서 Con..
-
[Kafka] Consumer 는 JoinGroup API 를 어떻게 요청할까 ?Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.Kafka Consumer 는 group.id 라는 속성을 가집니다.group.id 라는 속성은 원격에서 실행되는 여러 개의 Kafka Consumer 들을 하나의 Group 으로 동작하게 만듭니다.오늘의 주제인 "JoinGroup API" 는 여러 개의 Kafka Consumer 들을 하나의 Group 으로 동작하게 만드는 API 중의 하나인데요.카프카 브로커는 JoinGroup API 를 요청한 여러 개의 Kafka Consumer 들을 모아서 하나의 Consumer Group 으로 동작하게 만듭니다.이어지는 내용에서 JoinGroup 과 관련된 상세한 이야기를 설명해보겠습니다. JoinGroup API .아래의 정보는 Kafka Consumer 가 브로커에게 요청하는 JoinGr..
-
[Kafka] FindCoordinator 와 Transaction Coordinator 알아보기Kafka/Kafka Producer 2024. 6. 29. 19:50
- 목차 들어가며.카프카 프로듀서는 트랜잭션을 활성화하면 이 프로듀서를 전담하는 Transaction Coordinator 가 선출됩니다. Transaction Coordinator 는 여러 브로커들 중에서 하나의 브로커가 Transaction Coordinator 로 선택됩니다. 그래서 Transaction 과 관련된 여러가지 요청들, 예를 들어 AddPartitionsToTxn, EndTxn 등이 Transaction Coordinator 에게 전송됩니다.특히 이번 글의 주제인 FindCoordinator 요청은 Producer 가 자신을 전담하는 Transaction Coordinator 를 조회하는 API 요청인데요.이번 글에서 FindCoordinator API 와 Transaction Coor..
-
[Kafka] FindCoordinator API 와 Group Coordinator 알아보기Kafka/Kafka Consumer 2024. 6. 29. 14:46
- 목차 들어가며.Kafka Consumer 는 group.id 라는 설정을 통해서 Consumer Group 을 형성합니다.동일한 group.id 를 가지는 여러 Kafka Consumer 들은 하나의 Consumer Group 의 구성원이 됩니다.이 과정에서 Group Coordinator 라는 브로커가 선출됩니다.Group Coordinator 는 동일한 group.id 를 가지는 여러 Consumer 들이 하나의 Group 으로써 유기적인 동작을 할 수 있도록 도움을 제공합니다.이번 글에서는 Kafka Consumer 가 FindCoordinator API 를 통해서 어떻게 Group Coordinator 와 연결되는지에 대해서 알아보려고 합니다. FindCoordinator API 의 TCP P..
-
[Kafka] Transaction 과 Commit / Abort Maker 알아보기Kafka/Kafka Producer 2024. 6. 29. 14:46
- 목차 들어가며.카프카 프로듀서의 트랜잭션이 활성화되면 프로듀서는 Commit / Abort Marker 에 해당하는 레코드를 생성할 수 있습니다.이는 Kafka Clients 관점에선 CommitTransaction 이나 Abort Transaction 함수로써 제공되는 기능인데요.Kafka Protocol API 관점에서는 EndTxn 와 같은 API 가 제공되고, Commit/Abort Transaction 함수 내부적으로 EndTxn 가 호출됩니다.이번 글에서는 Commit 과 Abort Marker 가 어떻게 생성되고, Log Segment File 에서 어떻게 저장되는지에 대해서 알아보도록 하겠습니다. Transactional Producer 실행하기.프로듀서의 Transaction 을 활성..
-
[Kafka] Correlation ID 알아보기Kafka 2024. 6. 25. 06:29
- 목차 들어가며.카프카는 TCP 통신을 위해서 자체적인 네트워크 프로토콜을 가집니다.카프카 클라이언트는 브로커에게 ApiVersions, Metadata 등을 요청할 수 있고,Producer 는 Produce Request, Consumer 는 Fetch Request 를 요청합니다.그리고 브로커 사이의 Heartbeat 를 주고 받는 등 여러가지 API Request/Response 통신이 존재합니다. 여기서 Correlation ID 라는 개념이 적용되는데요.모든 Request 와 Response Header 에는 아래의 정보처럼 correlation_id 라는 데이터가 추가되게 됩니다.Request Header v1 => request_api_key request_api_version correl..
-
[Kafka] Producer 와 Idempotence 알아보기 ( InitProducerId, Epoch, Sequence Number )Kafka/Kafka Producer 2024. 6. 25. 06:29
- 목차 들어가며.Kafka Producer 는 Acks 모드로 동작을 하게 되면 데이터의 중복 생성의 위험이 존재합니다.카프카에서 중복 데이터 생성이 발생하는 원인은 at least once 방식을 사용하는 카프카의 데이터 생성 방식 때문입니다.프로듀서는 request.timeout.ms 라는 시간 내에 브로커로부터 Ack 응답을 받지 못하면 ProduceRequest 를 재시도하게 됩니다.따라서 네트워크적인 문제로 인해서 혹은 브로커의 결함으로 인해서 리더 브로커로부터 Ack 응답을 받지 못하면 ProduceRequest 가 재시도되어 데이터가 중복 생성될 가능성이 있습니다.이와 관련된 상세한 내용은 아래의 링크로 대체하도록 하겠습니다.이를 참고하면 어떠한 경우에 데이터 중복이 발생하는지 이해하시는데..