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