728x90
반응형
1. 멱등성 설정
enable.idempotence = true
max.in.flight.requets.per.connection <= 5 (5 이하면 순서보장)
retries > 0 이여야함 -> '2147483647'로 설정
acks = 'all' 이여야함
만약 enable.idempotence = false이고,
max.in.flight.requests.per.connection > 1이면 메시지 배치 중 일부가 에러가 났을 때
재시도하면서 순서가 바뀔 수 있음
2. Retry, DLT 설정
DefaultErrorHandler() 부분에 컨슈머 에러 발생 시 Retry, DeadLetter 정책 설정
@Bean
public DefaultErrorHandler errorHandler() {
DefaultErrorHandler handler =
new DefaultErrorHandler(
new DeadLetterPublishingRecoverer(kafkaTemplate),
new FixedBackOff(FIXED_BACKOFF_INTERVAL, FIXED_BACKOFF_MAX_ATTEMPTS)) {
@Override
public void handleRemaining(
@Nonnull Exception thrownException,
List<ConsumerRecord<?, ?>> records,
@Nonnull Consumer<?, ?> consumer,
@Nonnull MessageListenerContainer container) {
records.forEach(
r -> {
log.error(
"Error processing message. Topic: {}, Partition: {}, Offset: {}, Key: {}, Value: {}",
r.topic(),
r.partition(),
r.offset(),
r.key(),
r.value(),
thrownException);
});
super.handleRemaining(thrownException, records, consumer, container);
}
};
handler.addNotRetryableExceptions(제외할 Exception들...);
return handler;
}
에러 발생 시 {토픽 이름}.DLT 토픽이 자동으로 생성되면서 데드레터가 쌓이는 구조
:warning: auto.topic.create.enable=false로 되어있으면 자동으로 생성되지 않으므로 주의. 이 설정을 하지 않으려면 Producer에서 AdminClient로 초기 토픽 생성 시 '{토픽이름}.DLT' 토픽들도 생성해야함
728x90
반응형
'Programming-[Backend] > Kafka' 카테고리의 다른 글
[카프카 핵심 가이드] 1. 카프카 시작하기 (1) | 2024.11.07 |
---|---|
[TIL] Kafka Transaction mode, offset lag = 1 유지 현상 (1) | 2024.09.05 |
Consumer Lag 남아있는 것 제거하기(docker kafka container shell tool 활용) (0) | 2024.07.17 |
[TIL] 카프카 로그 압축 정보 local container에서 확인 방법(kafka-run-class, DumpLogSegments) (0) | 2024.06.24 |
[검증 중] Kafka - testcontainer : Transaction 묶기, graceful shutdown, 수동 커밋, await (0) | 2024.06.02 |