Spring Kafka Listener Container 의 AckMode 가 BATCH 일 때,
어떻게 records 를 consume 하고 commit 하는지 정리한다.
Offset
commit 을 정확히 이해하기 위해, offset 의 개념부터 정리하자.
Kafka 는 partition 의 각각의 record 에 대해 numerical offset 을 가지고 있다.
offset 은 두 가지 역할을 한다.
- partition 의 record 에 대한 unique identifier
- partition 에 대한 consumer 의 위치
그래서, commit 된 position 은 마지막 offset 을 가리킨다.
AckMode
Spring Kafka 에는 ContainerProperties 로 AckMode 일곱 가지가 있다.
offset commit 을 어떻게 할지에 대한 설정이다.
일곱 가지 중에 BATCH AckMode 는 어떻게 동작하는지 알아보자.
우선, BATCH AckMode 는 문서에 따르면 다음과 같이 정의되어 있다.
Commit the offsets of all records returned by the previous poll after they all have been processed by the listener.
번역하면 다음과 같다.
“이전 poll 에 의해 반환된 모든 레코드가” 리스너에 의해 모두 처리가 끝난 뒤에, offset 을 커밋한다.