Kafka 내부 동작 더 자세히 보기 - Producer

문지은·2022년 8월 21일
0
post-thumbnail

파티셔너

토픽은 여러 개의 파티션으로 나뉘고 프로듀서가 전송한 메시지는 토픽 내부의 파티션의 로그 세그먼트에 저장된다. 메시지를 토픽의 어느 파티션으로 전송할 지 결정할 때 사용하는 것이 파티셔너이다. 파티셔너는 보통 키의 값에 따라서 메시지를 전송할 파티션을 선택한다. 하지만 메시지의 키는 필수값이 아니고 키 값이 null일 경우에는 여러 알고리즘을 이용해서 메시지를 분배한다.

  • 라운드 로빈

    메시지를 파티션 여러개들에게 순서대로 하나씩 할당하는 방법. 하지만 배치 사이즈가 채워지기 전까지 메시지들이 브로커의 토픽으로 전송되지 못하고 대기해야 한다는 단점이 있다.
    위 그림에서 배치 사이즈를 3으로 설정했다면 파티션이 한개라면 이미 전송이 됐겠지만 하나씩 분배되어 할당됐기 때문에 전송이 일어나지 못했다. 이건 곧 지연 시간의 증가를 의미한다.

  • 스티키 파티셔닝

    라운드 로빈의 지연 시간 증가 이슈를 해결하기 위해서 등장한 방식으로 하나의 파티션에 레코드 수를 먼저 채워서 카프카 브로커로 빠르게 배치 전송하는 전략이다.
    그림을 라운드 로빈과 비교해서 봤을 때 라운드 로빈에서는 3번 메세지까지 받고도 전송이 일어나지 못했지만 스티키 파티셔닝에서는 배치 사이즈인 3을 채워서 전송이 일어난다.

프로듀서의 배치

프로듀서에서 위에 봤던 예시처럼 배치로 메시지를 처리하면 불필요한 I/O를 줄일 수 있고 카프카의 요청 수를 줄여주어 성능을 높일 수 있다. 하지만 실시간성 처리가 더 중요한 데이터의 경우에는 단건으로 처리하는 것이 더 좋다. 지연 시간, 처리량 중 더 중요한 요소에 맞추어서 결정하자.
추가로 프로듀서에서 메시지 압축 기능을 추가로 사용한다면 성능을 더 높일 수 있다.

중복 없는 전송

카프카 프로듀성에는 멱등 법칙이 적용되어 사용자가 프로듀서를 이용해 메시지를 여러 번 전송해도 카프카에는 중복 없이 한번만 저장된다.

profile
백엔드 개발자입니다.

0개의 댓글