본문 바로가기

빅데이터/Kafka

ProducerRecord에 파티션 번호를 지정하면 어떻게 동작할까?

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에 파티션 번호가 있는지 우선 확인하고 처리하는 것이죠.

반응형