Kafka/Kafka Producer
-
[Kafka] Producer 의 EndTxn API 알아보기 ( Commit or Abort , Transaction Coordinator )Kafka/Kafka Producer 2024. 7. 4. 07:16
- 목차 EndTxn API 란 ?EndTxn API 는 Transactional Producer 가 트랜잭션을 종료하기 위해서 브로커에게 전달하는 API 입니다.카프카 라이브러리에서는 commit_transaction or abort_transaction 와 같은 추상화된 함수로 표현되곤 합니다.이러한 함수가 실행되면 내부적으로 EndTxn API 의 Request/Response 가 동작하게 됩니다. EndTxn API 의 형식은 아래와 같습니다.EndTxn Request (Version: 1) => transactional_id producer_id producer_epoch committed transactional_id => STRING producer_id => INT64 produce..
-
[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] 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] 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 가 재시도되어 데이터가 중복 생성될 가능성이 있습니다.이와 관련된 상세한 내용은 아래의 링크로 대체하도록 하겠습니다.이를 참고하면 어떠한 경우에 데이터 중복이 발생하는지 이해하시는데..
-
[Kafka] request.timeout.ms 와 데이터 중복 생성 알아보기Kafka/Kafka Producer 2024. 6. 25. 06:28
- 목차 들어가며.카프카 프로듀서는 request.timeout.ms 라는 설정을 가집니다.카프카 프로듀서는 request.timeout.ms 로 지정된 시간 내에 데이터를 생성하지 못하면 Retry 를 시도합니다.여기서 request.timeout.ms 의 기준은 브로커로부터 Ack 응답을 받기까지의 시간을 의미합니다.즉, 메시지의 생성 성공/실패 여부와 상관없이 request.timeout.ms 시간 내에 브로커로부터 Ack 응답을 받지 못하면 Retry 를 시도합니다.따라서 이러한 경우에 데이터의 중복 생성 문제가 발생하게 됩니다. 데이터 중복 생성 상황을 재현하기 위해서 카프카 클러스터를 생성합니다. docker network create kafka-netdocker run -d --name ..
-
[Kafka] Pull 방식의 복제와 Producer 속도 관계 알아보기 ( replica.fetch.wait.max.ms )Kafka/Kafka Producer 2024. 6. 25. 06:28
- 목차 들어가며.카프카는 여러 Broker 들이 서로 서로 데이터 복제를 수행합니다.정확히는 리더 브로커가 소유한 파티션을 여러 팔로워 브로커들이 복제를 하게 됩니다. Replication 과 관련된 첫번째 예시로 아래의 이미지를 살펴보면,1개의 Topic 이 3개의 Partition 으로 구성됩니다.이 Topic 의 Replication Factor 는 2로 설정되어 있습니다.따라서 각 Partiton 은 1개의 Leader Broker 와 1개의 Follower Broker 를 필요로 하게 되며,아래와 같은 구조를 가집니다.Partition 0 의 Leader Broker 는 Broker1 이고, Follower Broker 는 Broker3 입니다.따라서 Broker3 은 Broker1 로부터 R..
-
[Kafka] BufferPool 알아보기 (org.apache.kafka:kafka-clients)Kafka/Kafka Producer 2024. 6. 3. 06:08
- 목차 들어가며.Kafka Producer 는 BufferPool 이라는 구성 요소를 통해 데이터를 효과적으로 관리합니다.BufferPool 은 이름에서 알 수 있듯이, Kafka Producer 가 사용할 버퍼(Buffer) 를 제공하는 핵심적인 역할을 수행합니다.본 글에서는 Java의 org.apache.kafka:kafka-clients 모듈을 기반으로 BufferPool 의 동작 원리를 상세히 설명할 예정입니다.Java 로 구현된 Kafka Producer 는 Java NIO 의 ByteBuffer 를 활용하여 데이터를 처리합니다.이를 통해 Kafka 의 BufferPool 은 ByteBuffer 를 효율적으로 재활용하며 클라이언트(Producer)에게 필요한 버퍼를 제공합니다.즉, Java N..