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 |