-
[Quarkus] SmallRye Kafka ConnectorWork 2025. 3. 5. 21:56
개요
- Quarkus Kafka Connector > Incoming Channel의 failure, commit 전략 이해하기
내용
주의) 아래는 Kafka Consumer의 동작이 아닌 Quakurs Kafka Connector의 동작이다.
커밋 방식
- default : 수동 커밋
- enable.auto.commit=false
Q. 메시지 처리 중 예외가 발생했을 때 어떻게 동작할까?
- 메시지가 정상적으로 처리되었는지는 메시지의 ack/nack으로 구분함 (acknowledgement/not acknowledgement)
- 예외가 발생했을 때 메시지는 nack됨
- failure-strategy 설정에 따라 동작함
- fail
- 어플리케이션 중단시켜 메시지가 더이상 처리되지 못함 (컨슈머 종료)
- 예외가 발생한 메시지의 오프셋을 커밋하지 않음
- ignore
- 실패가 로깅되고, 처리는 계속 진행함
- 예외가 발생한 메시지의 오프셋은 커밋됨
- dead-letter-queue
- 예외가 발생한 메시지의 오프셋은 커밋됨
- 해당 메시지는 dead letter topic에 발행됨
- delayed-retry-topic
- dead-letter-queue와 동일하게 동작
- 대신 메시지가 설정한 재시도 횟수에 따라 재시도 토픽에 발행되어 재처리됨
- fail
Q. 메시지가 ack 되었을 때 어떻게 커밋할까?
- 자동 커밋일 때 ignore 전략 사용, 수동 커밋일 때 default로 throttled 전략 사용
- commit-strategy 설정에 따라 동작함
- throttled (수동 커밋 방식)
- 수신된 메시지를 추적하고, 순차적으로 ack된 메시지의 최신 오프셋을 커밋하는 방식
- 특정 메시지가 커밋될 때, 그 이전의 모든 메시지가 이미 ack 되었다는 것을 의미함 (즉, 이전 메시지가 모두 정상 처리되었다는 것)
- 특징
- 메시지를 비동기 처리하는 경우에도 ‘최소 1회 전달(at-least-once delivery)’ 보장함
- 최소 1회 전달? 메시지가 최소 1번 처리되는 것 (메시지 수신을 의미하는게 아니라 메시지 수신 후 처리까지를 의미함)
- 메시지를 비동기 처리하는 경우에도 ‘최소 1회 전달(at-least-once delivery)’ 보장함
- 방식
- 수신된 레코드를 추적하고, auto.commit.interval.ms(기본: 5000ms) 간격으로 가장 높은 연속된(offset이 끊기지 않은) 오프셋을 커밋함
- 만약 특정 메시지가 ack되지 않은 상태로 남아 있으면, 그 메시지 이후의 레코드는 커밋되지 않음
- 즉, 비동기로 메시지가 처리되어 높은 오프셋에 해당하는 메시지가 ack되었어도 이전 오프셋에 해당하는 메시지가 ack되지 못했다면 오프셋은 커밋되지 않음. 따라서 비동기 처리되어도 at-least-once delivery를 보장하는 것
- 비정상 상태 감지
- throttled.unprocessed-record-max-age.ms(기본값: 60000ms ) 내에 메시지가 ack되지 않으면, 해당 커넥터는 비정상 상태(unhealthy)로 표시됨
- 수신된 메시지를 추적하고, 순차적으로 ack된 메시지의 최신 오프셋을 커밋하는 방식
- latest (수동 커밋 방식)
- 메시지가 ack될 때마다 오프셋을 커밋함 (빈번한 오프셋 커밋이 발생하므로 처리량이 많은 경우 사용 불가)
- 이전에 커밋된 오프셋보다 높은 오프셋일 때
- 메시지가 ack될 때마다 오프셋을 커밋함 (빈번한 오프셋 커밋이 발생하므로 처리량이 많은 경우 사용 불가)
- ignore (자동 커밋 방식, Kafka Consumer에게 커밋 위임)
- quarkus kafka connector가 오프셋을 커밋하지 않음
- throttled (수동 커밋 방식)
참고)
https://quarkus.io/guides/kafka#receiving-messages-from-kafka
https://quarkus.io/guides/kafka#incoming-channel-configuration-polling-from-kafka
'Work' 카테고리의 다른 글
[Kafka Connect] 참고 - Telegraf로 커넥트 메트릭 수집하기 (0) 2025.02.03 [Kafka Connect] 카프카 커넥트 모니터링 (0) 2025.02.03 [Kafka Connect] 카프카 커넥트 클러스터 구성 (0) 2025.02.03 [번역 서비스] 로직 구현 시 고민한 부분 (0) 2025.01.30 [번역 서비스] 적용 - Delayed Retry Topic (0) 2025.01.28