[카프카 핵심 가이드] Ch 03
Ch 03. 카프카 프로듀서: 카프카에 메시지 쓰기
p. 62, 63
buffer.memory
이 매개변수는 프로듀서가 메시지를 전송하기 전에 메시지를 대기시키는 버퍼의 크리(메모리의 양)를 결정한다.
batch.size
같은 파티션에 다수의 레코드가 전송될 경우 프로듀서는 이것들을 배치 단위로 모아서 한꺼번에 전송한다.
이 매개변수는 각각의 배치에 사용될 메모리의 양을 결정한다('개수'가 아니라 '바이트' 단위임에 주의하라)
buffer.memory : 기본 값 32MB
batch.size : 기본 값 16KB
buffer.memory 안에 여러 크기의 batch.size를 가진 batch 들이 생성된다
멱등성 보장 관련 설정
acks = all
모든 팔로워가 패치가 되었는지 기다린 후에 ack 응답을 보낸다.
이 설정만으로는 요청 재시도 시 중복 데이터가 생성된다,
enable.idempotence = true
enable.idempotence = true로 설정하면, 각 프로듀서에는 고유한 프로듀서 ID (PID)가 할당된다.
프로듀서는 메시지를 브로커에 보낼 때마다 이 PID를 포함하며, 각 메시지는 순차적으로 증가하는 시퀀스 번호를 받는다.
프로듀서가 메시지를 보내는 각 토픽 파티션마다 별도의 시퀀스가 유지되고, 브로커는 파티션별로 성공적으로 처리된 PID-SEQ 번호 조합 중 가장 큰 값을 추적한다.
브로커는 프로듀서의 요청이 PID/토픽 파티션 쌍에서 마지막으로 커밋된 메시지보다 시퀀스 번호가 정확히 1만큼 크지 않은 경우, 프로듀서 요청을 거절한다.
따라서 프로듀서는 실패에 따른 요청 재시도를 할 수 있지만 모든 메시지는 로그에 정확히 한 번만 기록된다.
(단, 프로듀서마다 고유 PID가 할당되므로, 단일 프로듀서 세션 내에서만 멱등성을 보장할 수 있다)
max.in.flight.requests.per.connection = 5
한 번의 연결에서 동시에 처리할 수 있는 최대 요청수
1. 메시지 순서 보장
카프카의 멱등 프로듀서는 같은 파티션에 대해 메시지의 순서를 보장해야 한다. 이 값이 5 이하일 때, 프로듀서에서 한 메시지가 실패하면 그 후의 메시지들은 서버에 전송되지 않는다. 이러한 동작은 메시지의 순서가 변경되지 않도록 보장하는 데 중요하다.
2. 중복 메시지 방지
카프카의 멱등 프로듀서는 메시지의 중복 전송을 방지한다. 이 값이 너무 크면 네트워크 지연 등의 문제로 인해 중복 메시지가 발생할 가능성이 증가한다.
멱등성 프로듀서의 한계
멱등성 프로듀서는 동일한 세션 내에서만 정확히 한 번의 전달을 보장한다. 여기서 '동일한 세션'이란, PID의 생명주기를 의미한다. 만약 멱등성 프로듀서로 작동하는 프로듀서 애플리케이션에 문제가 발생해 종료되고 다시 시작하면 PID가 변경된다.
동일한 데이터를 전송하더라도, PID가 바뀌면 브로커는 다른 프로듀서 애플리케이션이 다른 데이터를 보냈다고 판단한다. 따라서 멱등성 프로듀서는 장애가 발생하지 않는 상황에서만 데이터를 정확히 한 번 적재하는 것을 보장한다는 점을 명심해야 한다.