Search results for '2016/08/02'

아파치 kafka 0.10.0 offset 초기화 현상

최근 프로젝트를 하나 진행하면서 데이터 파이프라인으로 아파치 카프카 0.10.0을 도입하였다.
기존 프로젝트에서 이미 0.8.1을 도입하여 진행한적이 있어 도입 자체는 부담이 없었고.. 0.9를 거치면서 producer, consumer API가 많이 정비되었고 0.10.0에 와서는 stream process 지원이 강화된 부분이 마음에 들어서이다.

개발 완료 후 QA를 진행하는데 특이한점이 나타났다. 카프카 토픽의 데이터가 일정주기로 다시 읽어지는 현상이 나타난 것이다. 토픽으로 새로운 데이터의 유입이 없는것과 다시 읽어지는 데이터가 과거 데이터인것을 확인하는 순간.. '머지 이건?!!'

0.8.1을 사용하는 이전 프로젝트에서는 consumer로 subscription을 하면 점검, 장애의 이유가 아니라면 브로커와 연결을 지속한 형태로 구현했는데, 이번에는 컨슈머가 짧은주기로 subscription, unsubscription을 반복하는 구성이 다른점이다.

현상만으로 보면 어떤 이유에서 컨슈머그룹의 offset 정보가 초기화 되는것 같았고 이를 토대로 코드와 카프카 설정을 몇 번을 리뷰했지만 특이사항을 찾지못하고 수일이 흘렀다. 한가지 특이사항이라면 offset이 리셋되는 주기가 일정한듯 한 현상이 보였다.

주말에 StackOverflow에서 카프카 관련주제를 검토하다가 드디어 해결의 단초를 찾았다.
결국 작성한 코드의 이슈는 아니고.. 0.9버전부터 변경된 오프셋 관리방식(0.8.x까지는 주키퍼가, 0.9부터는 카프카측에서 관리)과 새 버전 카프카 브로커  설정 기본값으로 인한 현상이었다.
키워드는 브로커 설정의 offsets.retention.minutes. 기본값이 1440분, 즉 24시간 유지라네...  0.10 문서 충분히 읽고 검토했다고 생각했는데... 이런 중요한 설정을 놓쳤을 줄은 상상도 못했다.

이와 관련한 이슈와 메일링 리스트
https://issues.apache.org/jira/browse/KAFKA-3806
https://mail-archives.apache.org/mod_mbox/kafka-dev/201606.mbox/%3CJIRA.12976894.1465398960000.46560.1465511841061@Atlassian.JIRA%3E
2016/08/02 09:18 2016/08/02 09:18
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다