카프카 아는척하기 (2) (프로듀서)

Partitioner 통해 어느 토픽의 어느 파티션으로 보낼지 결정한다.

배치에 메시지를 쌓는 동작과 Sender가 브로커에 전송하는 것은 별도로 진행된다.

전송 결과 확인이 필요한 경우 첫번째 방법

메시지를 보내고 블로킹되고가 반복되기 때문에 사실 배치에 메시지가 쌓이지 않는다. 처리량이 저하됨 -> 처리량이 낮아도 되는 경우만 사

예1이 베스트 일 거 같다.

enable.idempotence로 멱등성 보장하기?

이 방법이 자주 사용되는 거 같은데 카프카가 프로듀서가 보낸 메시지에 주문 번호와 같은 고유 ID를 부여하고 브로커는 해당 ID로 두번 전송이 온다해도 저장을 하지 않는 방식으로 동작시키면 될 것이다.

브로커의 확인: 브로커는 (PID, 파티션, 시퀀스 번호) 조합을 항상 기록하고 있습니다.

  • 브로커가 (PID-A, 파티션-1, 시퀀스-5) 메시지를 받으면, 자신이 기록해 둔 마지막 번호가 4번인지 확인합니다. 맞으면 메시지를 저장하고 마지막 번호를 5로 업데이트합니다.

  • 만약 프로듀서의 재시도로 인해 브로커가 또다시 (PID-A, 파티션-1, 시퀀스-5) 메시지를 받는다면, "어? 5번은 이미 처리했는데?"라고 판단하여 이 메시지를 중복으로 간주하고 무시합니다.

  • 만약 (PID-A, 파티션-1, 시퀀스-6)이 아닌 시퀀스-7이 도착하면, 중간에 메시지가 유실되었다고 판단하여 오류를 발생시킵니다.

Last updated