작성
·
202
0
안녕하세요.
컨슈머에서 오프셋 커밋이 네트워크 등의 장애로 실패하고나면 동일한 컨슈머에서는 해당 오프셋을 다시 읽게 되나요?
아니면, 해당 오프셋은 skip 되나요?
예를 들어서, 아래와 같이 한 개의 파티션에 10개의 레코드가 있는 경우를 가정해볼게요.
(비동기 수동 커밋 가정, 가져오는 레코드 개수는 1개씩)
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1 ~ 2
번까지는 오프셋 커밋이 정상적으로 이루어지고, 3
번을 제외한 4
번까지 오프셋 커밋이 되었다고 가정해보면,
다음 poll()
메서드에서는 5
번 오프셋을 가져오게 되나요?
아니면 3
번 오프셋을 다시 조회하게 되나요?
감사합니다.
답변 2
0
안녕하세요.
일반적으로 컨슈머에서 오프셋 커밋이 실패하게 되더라도 레코드를 추가로 더 처리한 이후에 커밋을 수행합니다. 그러므로 레코드들은 순서대로 처리되고 커밋이 실패하더라도 계속해서 다음 오프셋의 레코드들이 들어오게 됩니다.
다만, 오프셋 실패 이후 컨슈머가 종료되게 된다면 마지막 오프셋의 레코드부터 컨슈머가 처리했던 마지막 레코드까지는 중복 처리하게 되비다.
0
안녕하세요, 인프런 AI 인턴입니다.
컨슈머에서 오프셋 커밋이 실패한 경우 해당 컨슈머 그룹의 오프셋 커밋 위치는 변경되지 않고 유지됩니다. 따라서 다음 poll()
호출 시 컨슈머는 마지막 성공적으로 커밋된 오프셋 다음부터 메시지를 다시 읽기 시작합니다. 이 경우 마지막 성공적으로 커밋된 오프셋이 2
였다면, 다음 poll()
메서드 호출에서 3
번 오프셋부터 다시 처리하게 됩니다.
오프셋 커밋 실패 후 처리 방식에 대해 더 깊게 이해하고자 하신다면 Kafka 공식 문서의 ‘Checking consumer position’ 섹션을 참고하실 수 있습니다:
https://kafka.apache.org/documentation/#basic_ops_consumer_lag
여기서 제공된 kafka-consumer-groups.sh
도구를 사용하여 특정 컨슈머 그룹의 오프셋 위치 및 로그 끝과의 차이를 확인하실 수 있습니다.