파티셔너(Partitioner)란?

프로듀서가 데이터를 보내면 파티셔너를 통해서 카프카 브로커로 데이터가 전송된다.

파티셔너는 데이터를 어떤 파티션에 넣을지를 결정하는 역할을 합니다.

레코드에 포함된 메시지키 값에 따라서 파티션의 위치가 결정됩니다.

프로듀서를 사용할 때 파티셔너를 따로 설정하지 않으면, UniformStickyPartitioner 로 설정됩니다.

 

카프카 프로듀서는 레코드를 전송하기 위해 파티셔너를 제공합니다.



프로듀서 파티셔너 인터페이스에 대한 설명은 아래 링크에서 확인할 수 있습니다.

https://kafka.apache.org/25/javadoc/?org/apache/kafka/clients/producer/Partitioner.html

 

kafka 2.5.0 API

 

kafka.apache.org

 

메시지 키가 있을 때
메시지 키가 있을 경우에는 파티셔너의 종류와 관계없이 동일하게 동작합니다. 메시지 키의 해쉬값을 구해서 해당 해쉬값과 파티션을 매칭하여 적재합니다. 이로 인해 동일한 메시지 키를 가진 레코드는 동일한 파티션에 들어가게 됩니다. 다만 주의할 점은 파티션 개수가 늘어날 때 입니다. 파티션 개수가 늘어나면 메시지 키 해시값과 파티션 매칭이 틀어지게 되어 파티션 증가 전후로 동일한 메시지 키더라도 다른 파티션에 레코드가 들어갈 수 있으므로 주의해야 합니다.

 

UniformStickyPartitioner

메시지 키의 존재 유무에 따라 다르게 동작한다.

메시지 키가 있는 경우

  1. 메시지 키를 가진 레코드는 파티셔너에 의해서 특정한 해시값이 생성된다.
  2. 이 해시값을 기준으로 어느 파티션으로 들어갈지 정해진다.
  3.  
  4.  
  1. 토픽에 파티션이 2개가 있는 경우, 파티셔너의 해시로직에 의해서 키값에 따라 다른 파티션에 들어가게 된다.
    • 동일한 메시지 키값을 가진 레코드는 동일한 해시값을 만들기 때문에 항상 동일한 파티션에 들어가는 것을 보장한다.
    • 이로 인해, “순서를 지켜서 처리할 수 있다”는 장점이 있다.

​ 파티션 한 개의 내부에서는 큐처럼 동작하기 때문에 순서를 지킬 수 있는 것이다.

UniformStickyPartitioner

유니폼 스티키 파티션은 2.4.0 부터 기본 설정으로 사용되는 파티셔너입니다. 이 파티셔너는 스티키 파티셔너라고도 부릅니다. 스티키 파티션은 라운드-로빈 파티셔너와 다르게 프로듀서 내부동작에 특화되어 있습니다. 특히 배치전송에 특화되어 있습니다.

프로듀서는 파티션에 데이터를 전송하기 전에 Accumulator에 데이터를 버퍼로 쌓아 놓고 발송합니다. 스티키 파티셔너를 사용할 경우 Accumulator의 버퍼를 채워서 보내기 때문에 성능향상에서 유리합니다.

https://www.confluent.io/blog/apache-kafka-producer-improvements-sticky-partitioner/

KIP-480 implements a new partitioner, which chooses the sticky partition that changes when the batch is full if no partition or key is present. Using the sticky partitioner helps improve message batching, decrease latency, and reduce the load for the broker. Some of the benchmarks which Justine Olshan discusses on the KIP show up to a 50% reduction in latency and 5–15% reduction in CPU utilization.

RoundRobinPartitioner

메시지 키가 없을 경우, 라운드-로빈 방식으로 데이터가 들어오는대로 파티션을 순회하면서 레코드를 넣습니다. 파티션 개수가 늘어날때도 마찬가지로 순회하면서 지속적으로 데이터를 분배하면서 넣습니다.

https://www.confluent.io/blog/apache-kafka-producer-improvements-sticky-partitioner/

 

 

사용자 정의 파티셔너

커스텀 파티셔너를 사용자가 만들면 메시지키, 메시지값, 토픽이름에 따라 어떤 파티션으로 보낼 지 정할 수 있습니다.

 

원문참조 : https://blog.voidmainvoid.net/360

 

+ Recent posts