카프카 사용중에 컨슈머가 컨슈머 그룹을 떠난 뒤 rejoin하지 않아 장애가 발생하여 기록한다.

 

"message": "[Consumer clientId=consumer-catchtable-biz-eventWorker-daysDailySumUpdater-3, groupId=catchtable-biz-eventWorker-daysDailySumUpdater] Request joining group due to: consumer pro-actively leaving the group",

 

카프카 컨슈머가 leave group 요청을 하며 컨슈머 그룹을 자발적으로 나간 로그에서 부터 이슈 파악을 시작했다.

 

사실, 컨슈머는 다양한 원인으로 컨슈머 그룹을 떠날 수 있어서, 위 로그 자체가 문제가 된 것은 아니다. 문제는 leave group 을 하게 되면 spring kafka가 poll() 호출 시에 다시 group을 rejoin 시키도록 구현되어 있는데 어째서 rejoin이 되지 않았냐는 것이었다.

 

좀 찾아보니, spring-kafka에 비슷한 이슈가 제보된 것이 있었다.

https://github.com/spring-projects/spring-kafka/issues/2337

 

여기서 큰 힌트를 얻었는데, 위 이슈는  poll() 을 요청하는 쓰레드에 행이 걸려 rejoin()을 요청하는 코드까지 오지 못하는 것이 문제였다.

the poll thread actually stuck in user code when make http connection without timeout. Thanks for your support.

 

애플리케이션 코드를 좀 더 확인해보니, 컨슈밍 시에 카프카 레지스트리를 조회하도록 되어 있었는데, 기존에도 카프카 레지스트리 조회 시에 행이 걸리는 케이스가 있어서 레지스트리 캐시를 적용하던 참이었다. 아마 여기서 행이 걸려 rejoin이 되지 않고 있었던 것으로 보인다.

 

정리하면,

 

이벤트 처리 중 블락이 5분 (heart beat interval default setting) 발생할 경우 join 에서 탈락 및 Rejoining 필요한 상태로 변경되었고,
이 상태에서 다음 이벤트 처리 시 자동으로 rejoin 하게 되는데 (spring kafka container) 이전 동작이 block 된 상태로 끝나지 않고 있는 이슈였다.

'Kafka' 카테고리의 다른 글

Kafka - Avro 스키마 하위호환  (0) 2024.10.20

+ Recent posts