이전 포스팅에서 Producer가 Kafka에 데이터를 전송하는 방법을 학습하였습니다.
이번에는 데이터가 올바르게 생성되었는지, offset, partition 정보를 조회해보려합니다. 그러기 위해선 callback 함수를 구현해야 합니다.
출력 결과를 보면, key를 null
임에도 불구하고 동일 파티션에 데이터가 전송된 것을 확인할 수 있습니다.
kafka의 성능개선으로 인해 카프카v.2.4.0 버전 이상에는 DefaultPartitioner에서 Sticky Partitionerr
를 사용하고 있습니다.
그래서 가까운 시간내에 전송된 데이터는 동일 파티션에 전송됩니다.
round-robin
방식을 확인하기 위해 Thread.sleep(1000)
를 설정해보겠습니다.
이제 데이터가 다른 파티션에 전송되는 것을 확인할 수 있습니다.
key는 사용자가 순서를 지정하고 동일한 키를 공유하는 메시지가 동일한 파티션에 있도록 하려는 경우 유용합니다.
ProducerRecord
에 key를 설정합니다.
출력 결과를 확인해보시면, 메시지는 파티션 별로 일괄 전송되는 것을 확인할 수 있습니다.
파티션 0 일괄 전송 > 파티션 1 일괄 전송 > 파티션 2 일괄 전송
Key를 지정했기에 애플리케이션을 다시 실행하여도 동일한 key는 동일한 파티션에 전송되는 것을 확인할 수 있습니다.