[KAFKA] 컨슈머 애플리케이션 개발 - 수동 커밋

.·2024년 8월 18일

KAFKA

목록 보기
20/21

앞선 포스팅에서는 자동 커밋을 수행하는 컨슈머 애플리케이션을 개발해보았다.
이번에는 수동 커밋을 수행하는 컨슈머 애플리케이션을 개발해볼 것 이다.

수동 커밋의 종류는 동기 커밋, 비동기 커밋으로 두가지가 있다.

1. 동기 오프셋 커밋

1) 동기 오프셋 커밋

poll() 메소드 호출 이후 commitSync() 메소드를 호출하여 오프셋 커밋을 명시적으로 수행할 수 있다.
commitSync()는 poll()로 받은 가장 마지막 레코드의 오프셋을 기준으로 커밋한다.
동기 오프셋 커밋을 사용할 경우 poll()로 받은 모든 레코드의 처리가 끝난 후에 commitSync() 메소드를 호출해야 한다.

2) 레코드 단위 동기 오프셋 커밋

레코드 단위로도 오프셋 커밋을 수행할 수 있다.
레코드 단위로 오프셋 커밋을 하기 위해서는 TopicPartition과 OffsetAndMetaData를 가진 Map을 정의해야 한다.
그 후 commitSync의 파라미터로 넣어주게 되면, 레코드별로 오프셋 커밋이 가능해진다.
이렇게 레코드 단위로도 커밋을 수행할 수 있지만 일반적인 환경에서는 잘 사용하지 않는다.
커밋을 수행한다는 것은 컨슈머와 브로커가 통신하는 과정이므로, 불필요한 잦은 커밋은 브로커에 부담을 줄 수 있기 때문이다.

2. 비동기 오프셋 커밋

1) 비동기 오프셋 커밋

동기 오프셋 커밋을 사용할 경우 커밋 응답을 기다리는 동안 데이터 처리가 일시적으로 중단되기 때문에 더 많은 데이터 처리를 위해서는 비동기 오프셋 커밋을 수행할 수 있다.
비동기 오프셋 커밋은 commitAsync() 메소드를 호출하여 사용할 수 있다.

2) 비동기 오프셋 커밋 콜백

우리가 커밋을 수행한다고 해도 컨슈머와 브로커가 통신하는 과정에서 정상 커밋되지 않을 수도 있다.
그러므로 커밋이 잘 완료되는지 또한 콜백 함수를 통해 받을 수 있다.

0개의 댓글