본문 바로가기

Kafka

Cloudstream Kafka Found no committed offset for partition 로그 분석. Kafka offset reset 트러블슈팅

Spring Cloudstream Kafka를 사용중, 종종 아래와 같은 INFO 로그를 보게 되었다.

 

Found no committed offset for partition [topic name-partition]

 

처음에는 INFO 로그이기에 대수롭지 않게 넘겼는데, 이후 consumer에서 이해가 가지 않는 상황들이 발생하며 해당 로그를 다시 들여다보게되었다. consumer가 한번씩 이미 consuming한 record를 다시 처음부터 consuming하고있는 상황이었다.

그로 인해 구글링을 해본 결과 아래의 두 article을 발견했고 실마리를 찾았다.

 

Kafka offset은 broker가 관리하게 된다. (0.8.x까지는 Zookeeper가 관리하였으나, 0.9부터 변경되었다), Kafka broker에는 offsets.retention.minutes 이라는 property가 있는데, 이것은 consumer offset을 얼마나 저장할지를 나타낸다. default값은 Kafka 1.x에서는 1440, 즉 24시간이고, Kafka 2.x에서는 7일이다.

이 property로 인해서, 새로운 record가 들어오지 않은 상태에서 offsets.retention.minutes만큼의 시간이 경과하고 나면 consumer offset이 리셋되고, consumer는 auto.offset.reset에 명시된 곳으로 다시 offset을 설정하게 된다. 우리의 경우 해당 값은 earliest였고, 그로 인해 데이터가 자주 들어오지 않는 개발 장비에서 계속해서 offset이 리셋되어 처음부터 다시 consuming하게 된 것이다.

 

해결책으로는, 간단하게 auto.offset.reset값을 earliest -> latest로 변경해주었다.

하지만, producer가 동작하는 도중 consumer가 오랜 시간 내려가있는 일이 잦다면, 이는 consumer가 latest 이전의 unconsumed record를 consuming할 수 없게 되기 때문에(Reference 2번 참고), 서비스 요구사항에 맞는 설정이 필요할듯하다 🙂

 

Kafka의 기본 개념과 consumer의 offmset management에 대한 더 자세한 내용은 아래 링크를 참고 ⬇️

jyeonth.tistory.com/30

 

Apache Kafka 기본 개념 (Partition / Consumer / Consumer Group/ Offset Management)

Kafka는 가장 널리 쓰이는 메세지 큐 솔루션 중 하나이다. 다른 메세지 큐와 마찬가지로, Producer가 메세지를 publish하면 Consumer가 큐를 susbscribe하며 메세지를 가져가게 된다. 다만, 이 사이에 Topic / P

jyeonth.tistory.com

 

References

1. http://www.yunsobi.com/blog/666

 

아파치 kafka 0.10.0 offset 초기화 현상 :: 서비의 다락방

2016/08/02 09:18 서비 Tip&Tech kafka, offset 최근 프로젝트를 하나 진행하면서 데이터 파이프라인으로 아파치 카프카 0.10.0을 도입하였다. 기존 프로젝트에서 이미 0.8.1을 도입하여 진행한적이 있어 도입

www.yunsobi.com

2. https://medium.com/@praveenganesh/apache-kafka-consumer-group-offset-retention-bfe21285033a

 

Apache Kafka Consumer Group offset Retention

We are using Apache Kafka and recently we faced an issue. Thought to share the knowledge, so that it can help someone, either in quick…

praveenganesh.medium.com