kafka/core

Key 값을 가지는 메시지 전송

개복이 2025. 4. 16. 17:54

Key 값을 가지지 않는 메시지 전송

  • 메시지는 Producer를 통해 전송 시 Partitioner를 통해 토픽이 어떤 파티션으로 전송되어야 할 지 미리 결정이 된다.
  • Key 값을 가지지 않는 경우 라운드 로빈(Round Robin), 스티키 파티션(Sticky Partition) 등의 파티션 전략 등이 선택되어 파티션별로 메시지가 전송될 수 있다.
  • Topic이 여러 개의 파티션을 가질 때 메시지의 전송 순서가 보장되지 않은 채로 Consumer에서 읽혀질 수 있다.
    (단일 파티션에서는 순서가 보장되지만, 다중 파티션에서는 각각의 partition에서 offset이 존재)

 

Key 값을 가지지 않는 메시지 전송 메커니즘 #1

 

Key 값을 가지지 않는 메시지 전송 메커니즘 #2

 

Key 값을 가지는 메시지 전송

  • 메시지 Key는 업무 로직이나 메시지 Produce / Consume 시 분산 성능 영향을 고려하여 생성
  • 특정 Key 값을 가지는 메시지는 특정 파티션으로 고정되어 전송된다.
    (Key: 01, 03은 Partition #0으로 Key: 02는 Partition #1로)
  • 특정 Key 값을 가지는 메시지는 단일 파티션 (파티션이 여러 개가 아니라 한개라면 당연히 전송 순서는 보장하겠지?) 내에서 전송 순서가 보장되어 Consumer에서 읽혀진다.

 

Key 값을 가지는 메시지 전송 메커니즘 #1

 

Key 값을 가지는 메시지 전송 메커니즘 #2

 

Key 값을 가지는 메시지 전송 메커니즘 #3

 

토픽 생성

kafka-topics --bootstrap-server localhost:9092 --create --topic test-topic

 

Key 값을 가지는 메시지 발행

kafka-console-producer --bootstrap-server localhost:9092 --topic test-topic --property key.separator=: --property parse.key=true

 

Key 값을 가지는 메시지 소비

kafka-console-consumer --bootstrap-server localhost:9092 --topic test-topic --property print.key=true --property print.value=true --from-beginning