5.1 파티셔너
- 카포카 토픽은 병렬 처리를 위해 파티션으로 나뉜다.
- 프로듀서가 메시지를 전송할 때 토픽의 어떤 파티션으로 보내야 할지 결정할 때 사용하는 것이 파티셔너이다.
- 기본적으로는 메시지 키를 해시에 파티션을 구하는 방식을 사용한다.
- 해시 방식으로 파티셔닝할 때 토픽 내 파티션 수가 변경되면 메시지가 기존과 다른 파티션으로 전송될 수 있다.
5.1.1 라운드 로빈 전략
- 메시지의 키값은 필수가 아니므로 키가 없는 경우 라운드 로빈 알고리즘을 통해 파티셔닝된다.
- 파티셔너를 거친 후 메시지들은 배치 처리를 위해 잠시 대기하는데 이 때 라운드 로빈 전략은 비효율을 발생시킨다.
- 라운드 로빈 전략은 각 메시지를 순차적으로 파티션에 분배한다.
- 이때 각 파티션별로 독립적인 배치 버퍼(batch buffer)가 생성되고, 각 파티션의 버퍼가 지정한 배치 크기만큼 채워져야만 카프카 브로커로 전송된다.
- 만약 특정 파티션에 메시지가 적게 분배되면, 해당 파티션의 배치가 꽉 차지 않아 전송이 지연되고, 전체적으로 불필요한 대기 시간이 발생한다.
- 물론 프로듀서 옵션 조정을 통해 특정 시간 이후엔 전송되도록 할 순 있지만 메시지를 적게 발송하면 배치와 압축 효과를 얻지 못해 이 또한 비효율적이다.
5.1.2 스티키 파티셔닝 전략
- 라운드 로빈의 비효율을 개선하기 위해 카프카 2.4부터 스티키 파티셔닝 전략을 사용하게 된다.
- 스티키 파티셔닝이란 하나의 파티션에 레코드 수를 먼저 채워 카프카로 빠르게 배치 전송하는 전략을 말한다.
- 컨플루언트의 블로그에 따르면 스티키 파티셔닝 덕에 약 30% 이상 지연 시간이 감소하고 CPU 사용률도 줄어들었다고 한다.