[Kafka] Java Producer Callback과 Sticky Partitioner

이재민·2024년 2월 18일
0

Kafka

목록 보기
15/17
post-thumbnail

Producer Callback

이전 포스팅에서 Producer가 Kafka에 데이터를 전송하는 방법을 학습하였습니다.
이번에는 데이터가 올바르게 생성되었는지, offset, partition 정보를 조회해보려합니다. 그러기 위해선 callback 함수를 구현해야 합니다.

callback() 함수 구현

callback()

output

10개 데이터 전송(Sticky partitioner)

output

출력 결과를 보면, key를 null임에도 불구하고 동일 파티션에 데이터가 전송된 것을 확인할 수 있습니다.
kafka의 성능개선으로 인해 카프카v.2.4.0 버전 이상에는 DefaultPartitioner에서 Sticky Partitionerr를 사용하고 있습니다.

그래서 가까운 시간내에 전송된 데이터는 동일 파티션에 전송됩니다.
round-robin 방식을 확인하기 위해 Thread.sleep(1000)를 설정해보겠습니다.

10개 데이터 전송(round-robin)

output

이제 데이터가 다른 파티션에 전송되는 것을 확인할 수 있습니다.



Produce With Key

key는 사용자가 순서를 지정하고 동일한 키를 공유하는 메시지가 동일한 파티션에 있도록 하려는 경우 유용합니다.

Key 지정

ProducerRecord 에 key를 설정합니다.

데이터 전송

output

출력 결과를 확인해보시면, 메시지는 파티션 별로 일괄 전송되는 것을 확인할 수 있습니다.
파티션 0 일괄 전송 > 파티션 1 일괄 전송 > 파티션 2 일괄 전송
Key를 지정했기에 애플리케이션을 다시 실행하여도 동일한 key는 동일한 파티션에 전송되는 것을 확인할 수 있습니다.

profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글