kafka/core

Producer의 메시지 배치 전송 내부 메커니즘 - Record Batch와 Record Accumulator 이해

개복이 2025. 4. 29. 22:30

Producer의 메시지 배치 전송 내부 메커니즘 - Record Batch와 Record Accumulator 이해

  • Serializer -> Partitioner -> Compression(선택) -> Record Accumulator 저장 -> Sender에서 별도의 Thread로 전송
  • send() 메서드는 Record Accumulator Batch에 쌓이게 하고, 쌓은 Batch를 Sender를 통해 Kafka Broker Partition으로 전송한다.

 

Producer Record와 Record Batch

  • KafkaProducer 객체의 send() 메서드는 호출 시마다 ProducerRecord를 입력하지만 바로 전송되지 않고 내부 메모리(Record Accumulator)에서 단일 메시지를 토픽 파티션에 따라 Record Batch 단위로 묶인 뒤 전송된다. 메시지들은 Producer Client의 내부 메모리에 여러 개의 Batch들로 buffer.memory 설정 사이즈 만큼 보관될 수 있으며 여러 개의 Batch들로 한꺼번에 전송될 수 있다.

 

Kafka Producer Record Accumulator

  • Record Accumulator는 Partitioner에 의해서 메시지 배치가 전송이 될 토픽과 Partition에 따라 저장되는 KafkaProducer 메모리 영역
  • Sender Thread는 Record Accumulator에 누적된 메시지 배치를 꺼내서 브로커로 전송한다.
  • KafkaProducer의 Main Thread는 send() 메서드를 호출하고 Record Accumulator에 데이터를 저장하고 Sender Thread는 별개로 데이터를 브로커로 전송한다.