[Kafka] Commit

Commit

각 파티션에 대해 컨슈머가 읽어간 메세지 오프셋을 기록하는것을 커밋이라 한다. 리벨런스가 일어나게 되면 각각의 컨슈머들은 기존에 작업하던 파티션이 아닌 다른 파티션에 할당되게 된다. 이 때 가져가야할 메세지 오프셋 알기위해 파티션에 커밋된 오프셋 번호를 참조한다. 즉 리벨런스 이후에는 파티션에 커밋된 오프셋을 기준으로 메세지가 처리된다

자동커밋

자동 커밋은 enable.auto.commit을 true로 설정했을 때 수행된다. 일정 주기마다 컨슈머는 오프셋을 커밋하게 된다. 메세지 중복의 가능성이 존재한다.

수동 커밋

수동으로 커밋을 수행한다. consumer.commitSync();를 통해 수동으로 커밋하며 메세지를 가져와서 처리를 한 뒤에 커밋이 필요한 경우 등에 사용할 수 있다. 다만 낮은 가능성으로 메세지 중복의 가능성이 있다. DB에 저장할 때 문제가 생겨 마지막에 커밋된 오프셋을 다시 가져오는 경우 같은 케이스가 있다.

특정 파티션 할당

컨슈머가 특정 파티션만을 할당받아 메세지를 처리할 수 있도록 구성할 수 있다. 단 주의할 점은 이렇게 특정 파티션만을 할당하게 할 경우 컨슈머 그룹 아이디는 다르게 설정해야 한다. 동일한 컨슈머 그룹을 구성한 경우 종료된 컨슈머의 파티션을 다른 컨슈머가 할당받아 작업하고 오프셋을 커밋하기 때문에 문제가 생길 수 있다.

특정 오프셋부터 메세지를 가져오기

consumer.seek(partition, offset);을 통해 특정 파티션의 특정 오프셋부터 가져오게 할 수 있다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/18/kafka/commit/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.