ProducerRecord는 다양한 파라미터를 받고 그 중 파티션번호를 직접 넣어서 사용하는 경우도 있습니다. 이 때 파티션 번호를 넣으면 어떻게 동작할까요? 정답은 KafkaProducer private partition()메서드를 보면 확인할 수 있습니다.
/**
* computes partition for given record.
* if the record has partition returns the value otherwise
* calls configured partitioner class to compute the partition.
*/
private int partition(ProducerRecord<K, V> record, byte[] serializedKey, byte[] serializedValue, Cluster cluster) {
Integer partition = record.partition();
return partition != null ?
partition :
partitioner.partition(
record.topic(), record.key(), serializedKey, record.value(), serializedValue, cluster);
}
만약 레코드에 파티션이 있다면 해당 파티션번호로 무조건 보내게됩니다.
메시지 키가 무엇인지, 커스텀 파티셔너인지 여부를 확인하기 전에 ProducerRecord에 파티션 번호가 있는지 우선 확인하고 처리하는 것이죠.
반응형
'빅데이터 > Kafka' 카테고리의 다른 글
kafka spark structured stream 예제코드 및 실행 (0) | 2021.06.04 |
---|---|
카프카 스트림즈 Exactly-once 설정하는 방법과 내부 동작 (0) | 2021.06.03 |
카프카 스트림즈 All stream threads have died. 오류 해결 방안 (0) | 2021.05.27 |
카프카를 이벤트 소싱, CQRS로 사용할 수 있을까? (2) | 2021.05.03 |
confluent-kafka-go 컨슈머를 구현하는 5가지 방법 (0) | 2021.04.30 |
레디슈 큐(queue), 레디스 스트림(streams), 레디스 펍섭(pub/sub) 그리고 카프카와 비교 (0) | 2021.04.25 |