인프런 커뮤니티 질문&답변

hello님의 프로필 이미지
hello

작성한 질문수

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

수동 커밋 컨슈머 애플리케이션

auto_commit_interval_ms_config 질문

작성

·

139

0

- 카프카를 공부하시면서 생긴 질문들을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요~

auto_commit_interval_ms_config 에 대해 궁금한 점이 있는데요 찾아봐도 모호해서 질문드립니다.

auto_commit_interval_ms_config = 60

이라고 가정했을때

위 옵션은 poll() 호출 여부와 관계없이 60초 마다 자동으로 커밋을 해주는건가요?

아니면 마지막 자동커밋 발생하고 60초 이후에 poll() 이 호출될때 커밋을 해준다는건가요?

답변 2

1

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

안녕하세요~

카프카 컨슈머가 오토 커밋으로 설정되어 있을 경우 커밋이 수행되는 시점은 해당 시간이 지난 뒤 poll()이 호출될 때 입니다. 즉, 커밋을 한 뒤 일정 시간이 지나고 time이 expire되면 내부적으로 커밋을 수행하고 그런 뒤에 ConsumerRecords를 반환합니다.

/**
 * If auto-commit is enabled, and the auto-commit interval has expired, this will generate and
 * enqueue a request to commit all consumed offsets, and will reset the auto-commit timer to the
 * interval. The request will be sent on the next call to {@link #poll(long)}.
 * <p/>
 * If the request completes with a retriable error, this will reset the auto-commit timer with
 * the exponential backoff. If it fails with a non-retriable error, no action is taken, so
 * the next commit will be generated when the interval expires.
 * <p/>
 * This will not generate a new commit request if a previous one hasn't received a response.
 * In that case, the next auto-commit request will be sent on the next call to poll, after a
 * response for the in-flight is received.
 */
public void maybeAutoCommitAsync() {
    if (autoCommitEnabled() && autoCommitState.get().shouldAutoCommit()) {
        OffsetCommitRequestState requestState = createOffsetCommitRequest(
...생략

관련 코드와 주석은 아래 링크에서 확인하실 수 있습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

제공된 정보 중에서 auto_commit_interval_ms_config에 대한 구체적인 언급은 없었습니다. 따라서 Apache Kafka 공식 문서나 기술 문서 등에서 해당 옵션에 대해 추가적으로 조사해 보시는 것이 좋을 것 같습니다.

그러나 일반적인 Kafka 사용자 경험에 비추어 볼 때, auto_commit_interval_ms 옵션은 Kafka 컨슈머의 자동 커밋 간격을 설정하는 것으로, 이는 컨슈머가 poll() 메서드를 호출하여 메시지를 가져온 후, 설정된 시간 간격마다 자동으로 offset을 커밋해주는 방식으로 동작합니다. 즉, 마지막 자동 커밋 이후 설정된 시간(여기서는 60초)이 경과하고 나서 다음 poll() 호출시에 커밋이 실행됩니다. poll() 호출의 주기나 처리 시간에 따라 실제 커밋이 발생하는 시점은 설정 시간보다 늦어질 수 있습니다.

카프카를 공부하시는 동안 나오는 다양한 설정값들의 작동 원리를 파악하는 것은 매우 중요합니다. Kafka 공식 문서에서는 다양한 설정 옵션들과 그 사용법에 대해 자세히 설명하고 있으니 참고하시면 도움이 될 것입니다.

hello님의 프로필 이미지
hello

작성한 질문수

질문하기