파티셔너(Partitioner)
프로듀서가 데이터를 보내면 파티셔너를 통해서 브로커로 데이터를 전송
파티셔너는 데이터를 토픽에 어떤 파티션에 넣을지 결정하는 역할
레코드에 포함된 메시지 키 또는 메시지 값에 따라서 파티션의 위치가 결정
프로듀서를 사용할 때 파티셔너를 따로 설정하지 않는다면 UniformStickyPartitioner로 설정이 됨
이 파티셔너는 메시지 키가 있을 때와 없을 때 다르게 동작함
-
메시지 키가 있는 경우, 메시지 키를 가진 레코드는 파티셔너에 의해서 특정한 해쉬값이 생성되는데 이 해쉬값을 기준으로 어느 파티션에 들어갈지 정해짐
동일한 메시지 키를 가진 레코드는 동일한 해쉬값을 만들기 때문에 항상 동일한 파티션에 들어가는 것을 보장 이렇게 동일한 메시지 키를 가진 레코드들은 동일한 파티션에 들어가기 때문에 순서를 지켜서 데이터를 처리할 수 있다는 장점이 있음( A라는 메시지 키를 가진 메시지 값은 동일한 파티션에 들어감)
-
메시지 키가 없는 경우, 라운드 로빈으로 파티션에 들어가게 되는데, 정통적인 RR과는 조금 다르게 동작함. UniformStickyPartitioner는 프로듀서에서 배치로 모을 수 있는 최대한의 레코드들을 모아서 배치단위, 라운드로빈 방식으로 돌아가면서 파티션에 데이터를 보냄
파티셔너는 커스텀 가능. 카프카는 파티셔너를 직접 개발할 수 있도록 파티셔너 인터페이스를 제공하고 있음
파티셔너 인터페이스를 사용해서 커스텀 파티셔너 클래스를 만들면 메시지 키 또는 메시지 값 또는 토픽 이름에 따라서 어느 파티션에 데이터를 보낼 것인지 정할 수 있음
예를들어, 10개의 파티션이 있다고 가정할 때, 커스텀 파티셔너를 만들어 8개 파티션에는 VIP고객의 데이터, 나머지 2개 파티션에는 일반 고객의 데이터를 넣어 데이터 처리량을 VIP고객을 위해 많이 쓰도록 개발
이는 AMQP기반 메시징 시스템의 우선순위 큐를 만드는 것과 유사
참고 강의 : https://www.inflearn.com/course/아파치-카프카-입문/dashboard