프로듀서를 사용하면서 한번 쯤 정리가 필요해보여서 적어본다.
프로듀서의 경우는 레코드를 send를 할 때, 데이터를 바로 브로커로 보내는게
아니라 비동기로 전송된다.
그말은 버퍼에 데이터를 모아뒀다가 설정값에 따라 보내진다는 뜻이다.
2가지 Accumulator / Sender 를 기억할 필요가 있어보인다.
Accumulator는 레코드(데이터)를 저장하는 역할을 한다. 하위옵션을 통해 컨트롤 된다.
프로듀서에 메세지(데이터)를 브로커로 보낼 때 버퍼가 저장할수 있는 메모리 바이트수다.
브로커로 메세지를 전달하는 것보다 빠르게 데이터가 쌓이게 된다면 버퍼가 부족할 수 있게되는데 그 때 사용되는게 max.block.ms이다.
앞에 설명과 이어지는데 버퍼가 풀일경우 데이터를 send하지 못하도록 블럭하는 시간이다.
해당옵션의 경우 버퍼에 담아져있는 데이터를 묶어서 보내는 사이즈이다. 성능향상에 도움을 준다.
레코드(데이터)를 브로커로 보내는 역학을 한다. Accumulator 버퍼에 있는 데이터를 브로커에 비동기로 보낸다.
브로커로 메세지발생 전 딜레이하는 시간이다. 이유는 부하상황에 브로커에 부담을 덜 주기위함이다.
각 파티션별 batch.siz만큼 사이즈가 도달되었다면, linger.ms 무시하고 데이터가 브로커로 전송된다.
레코드(메세지) 발생 실패 시 재시도하는 횟수이다. 기본값이 2147483647이다.
메세지 재발송관련에서는 해당옵션보다는 delivery.timeout.ms로 제어한다.
send 하고 성공/실패에 대해 결정하는 상한시간이다. 브로커로 ack를 기다리는 시간이기도하며, 실패 시 재전송에 허용된 시간이다. 오류나 재시도횟수가 다 소모됬을 경우 해당 옵션에 별개로 먼제 에러를 발생할 수 있다.
linger.ms + request.timeout.ms <=delivery.timeout.ms 공식이 되어야 한다.
요청할 수 있는 최대 사이즈 지정옵션
??
요청한 응답에 대한 클라이언트 최대 대기 시간이다. 타임아웃시간동안 응답받지못한다면 요청을 다시보낸다.