Kafka auto.offset.reset 동작 조건
조회 0 · 댓글 0
새 컨슈머 그룹으로 토픽을 붙였는데 과거 메시지가 안 읽히거나, 반대로 처음부터 다 읽힐 때가 있습니다. auto.offset.reset 때문인데 이 옵션이 헷갈리는 건 항상 적용되는 게 아니기 때문입니다. 공식 문서상 이 설정은 Kafka에 그 그룹의 초기 오프셋이 없거나, 커밋해 둔 오프셋이 브로커에 더 이상 남아있지 않을 때(리텐션으로 삭제된 경우 등)만 동작합니다. 즉 한 번 커밋된 그룹은 재시작해도 이 값과 무관하게 마지막 커밋 지점부터 이어 읽습니다.
값은 earliest(가장 오래된 오프셋), latest(가장 최신), none(이전 오프셋 없으면 예외)이 있고 기본값은 latest입니다. 그래서 새 그룹을 만들면 기본적으로 과거 메시지를 건너뛰고 새로 들어오는 것부터 읽습니다. 과거분을 다 처리하려면 그룹이 커밋을 남기기 전에 아래처럼 지정해야 합니다.
auto.offset.reset=earliest주의할 점 하나. 문서에서는 이 값이 latest일 때 파티션 수를 늘리면 메시지 유실이 생길 수 있다고 경고합니다. 컨슈머가 새 파티션 오프셋을 리셋하기 전에 프로듀서가 먼저 그쪽으로 보낼 수 있기 때문입니다. 참고로 Java 클라이언트 4.0부터는 by_duration:<ISO8601>(예: PT1H) 값도 지원해 현재 시각에서 특정 기간 전 지점으로 리셋할 수 있습니다.
🔗 https://kafka.apache.org/41/configuration/consumer-configs/
로그인 후 답글을 남길 수 있습니다.