Kafka의 유실과 중복 가능성에 대해 알아보자!!
Kafka Conumser Commit
- Commit 이란, 컨슈머가 어느 오프셋까지 읽었는지 기록하는 행위를 뜻함
- 커밋을 하는 이유 : 컨슈머가 중단되거나 재시작 되었을 때, 다음 오프셋부터 처리하기 위함.
kafka 유실, 중복 방지 설정
=> enable.auto.commit설정
True
- 기본적으로 true로 되어있음.
- at most once
- 일정 간격(auto.commit.interval.ms)으로 poll() 메서드 호출시 자동 commit 하는 것
- commit 관련 코드를 작성할 필요 없이 편리.
- 속도가 가장 빠름
- 중복 또는 유실이 발생할 수 있음.
False
commitSync
- 동기 커밋
- exactly once
- ConsumerRecord 처리 순서를 보장함
- 속도가 가장 느리며 커밋이 될때까지 block 됨.
- poll() 메서드로 반환된 ConsumerRecord의 마지막 offset을 커밋함
- Map<TopicPartition, OffsetAndMetadata> 를 통해서 오프셋 지정 커밋 가능함.
commitAsync
- 비동기 커밋
- at least once
- 동기 커밋보다 빠름
- 중복이 발생할 수 있음
- 일시적인 통신 문제로 이전 offset보다 이후 offset이 먼저 커밋될 때
- ConsumerRecord처리 순서를 보장하지 못함.
- 처리 순서가 중요한 서비스에서는 사용이 제한 됨.