본문 바로가기
Kafka

7. Kafka Producer 메시지 전송과 재전송 옵션

by #Glacier 2024. 4. 4.
반응형

max.block.ms 

send() 호출 시 Record Accumulator가 꽉 차서 입력되지 못하여 block 되는 최대 시간. 초과되면 Timeout Exception이 발생.

 

linger.ms

Record Accumulator에서 Sender Thread로 보내는 대기 시간. 즉 Producer가 메시지를 보낸 후 지정된 시간 동안 대기하여 모아서 처리하게 됨. 

 

request.timeout.ms

Sender Thread에서 Broker로 메시지를 송신한 후 응답을 기다리는 시간.응답이 오지 않는 경우 재전송을 하거나 Timeout Exception 발생.

 

retry.backoff.ms

재전송 시도를 하기 위한 대기 시간

 

delivery.timeout.ms

전송과 재전송을 하는 과정에서 허용된 최대 시간. 초과 시 Timeout Exception 발생

delivery.timeout.ms >= linger.ms + request.timeout.ms

 

retries = 2147483647 (MAX_INT) -> 재시도 횟수이지만 delivery.timeout.ms로 재시도 횟수 조절

 

즉 retries = 10, retry.backoff.ms = 30, request.timeout.ms = 10000ms인 경우

응답 혹은 에러시 30ms 기다렸다가 재전송 시도 하며, 반복 되다가 10회가 채워지지 않더라도, delivery.timeout.ms의 한계치에 걸리면 재시도가 멈춘다.

 

max.inflight.requests.per.connection

브로커 서버의 응답 없이, Sender Thread가 한 번에 보낼 수 있는 메시지 배치의 개수. Default = 5

Kafka Producer의 메시지 전송 단위는 Batch이며 비동기 전송 시에도 응답은 받는다!

 

만약, 5개라고 했을 때, 1, 2, 3, 4, 5번 중 3, 4, 5 가 저장되고, 1, 2는 에러, 실패 시

1, 2를 다시 재전송 할 것이다. 다만, 3, 4, 5가 저장된 후, 1, 2가 재전송 한 후 다시 저장될 시 저장되는 순서가 달라질 수 있음을 인지하자.

이를 꼭 보장해야되는 것이 카프카의 영역은 아니지만, 카프카에서도 이를 고쳤다.

 

enable.idempotence=true 인 경우, max.in.flight.requests.per.connection이 1보다 큰 경우 발생하는 문제를 해결한다.

 

반응형

'Kafka' 카테고리의 다른 글

9. Kafka - Producer 메커니즘 1  (0) 2024.04.04
8. Kafka - Idempotence, 멱등성  (0) 2024.04.04
6. Kafka - Java Kafka Clients의 Send 메소드  (1) 2024.04.04
5. Kafka - Kafka-Configs  (0) 2024.04.04
4. Kafka - 컨슈머 그룹 (Consumer Group)  (0) 2024.04.04