4.7. 오프셋 정책 관리

auto.offset.reset 속성을 사용하여 오프셋이 커밋되지 않았거나 커밋된 오프셋이 더 이상 유효하지 않거나 삭제된 경우 소비자 동작 방식을 제어할 수 있습니다.

소비자 애플리케이션을 처음 배포하고 기존 주제에서 메시지를 읽습니다. group.id 가 처음 사용되기 때문에 __consumer_offsets 항목에 이 애플리케이션에 대한 오프셋 정보가 포함되지 않습니다. 새 애플리케이션은 로그 시작부터 기존의 모든 메시지 또는 새 메시지만 처리할 수 있습니다. 기본 재설정 값은 latest 이며, 이는 파티션 끝에 시작되어 결과적으로 일부 메시지가 누락되었음을 의미합니다. 데이터 손실을 피하지만 처리 양을 늘리려면 auto.offset.reset가장 빨리 설정 하여 파티션을 시작할 수 있습니다.

또한 브로커에 대해 구성된 오프셋 보존 기간(offsets.retention.minutes)이 종료될 때 메시지가 손실되는 것을 방지하기 위해 가장 빠른 옵션을 사용하는 것이 좋습니다. 소비자 그룹 또는 독립 실행형 소비자가 보존 기간 동안 오프셋을 사용하지 않는 경우 이전에 커밋한 오프셋은 __consumer_offsets 에서 삭제됩니다.

# ...
heartbeat.interval.ms=3000 1
session.timeout.ms=45000 2
auto.offset.reset=earliest 3
# ...
1
예상 리밸런스에 따라 하트비트 간격을 낮게 조정합니다.
2
시간 초과 기간이 만료되기 전에 Kafka 브로커가 하트비트를 수신하지 않으면 소비자가 소비자 그룹에서 제거되고 재조정이 시작됩니다. 브로커 구성에 group.min.session.timeout.msgroup.max.session.timeout.ms 가 있는 경우 세션 타임아웃 값은 해당 범위 내에 있어야 합니다.
3
파티션 시작으로 돌아가 려면 시작으로 설정하고 오프셋이 커밋되지 않은 경우 데이터 손실이 발생하지 않도록 설정합니다.

단일 가져오기 요청에 반환된 데이터 양이 크면 소비자가 처리되기 전에 시간 초과가 발생할 수 있습니다. 이 경우 max.partition.fetch.bytes 를 낮추거나 session.timeout.ms 를 늘릴 수 있습니다.