Kafka Error: Runner The coordinator is not aware of this member

wononly.dev·2022년 8월 15일
0

TROUBLE-SHOOTING

목록 보기
6/6
post-thumbnail

세부 내용

갑자기 잘 송신되던 실시간 데이터의 송신 이슈 발생

원인 파악

수신 받은 데이터를 다시 송신하는 데이터 에이전트에서 아래와 같은 kafka 에러가 발생한 시점부터 일부 데이터들이 송신되지 않는 문제가 발생했음

error - Connection Response Heartbeat(key: 12, version: 1)
error - Connection Response OffsetCommit(key: 8, version: 3)
error - Runner The coordinator is not aware of this member, re-joining the group
Runner The coordinator is not aware of this member, re-joining the group

실행되고 있는 코디네이터가 해당 멤버를 알지 못해 해당 consumer를 그룹에서 제외하고 다시 추가한다는 에러이다.

해당 에러가 발생하는 이유는 consumer가 오랜시간 heartbeat를 broker에게 보내지 않아 실행중이 아닌 상태라고 인지하기 때문이라고 한다.

해결 방법

일단 위의 문제를 해결하기 위해서 consumer의 sessionTimeout과 heartbeatInterval을 조정해줘야한다. 여기서 중요한 건 heartbeatInterval은 sessionTimeout 값을 초과하면 안된다. 그리고 sessionTimeout 값의 1/3 값이 최소 값이다. (두 값은 모두 밀리초 기준)

sessionTimeout = 100000 (10초)
heartbeatInterval = 30000 (3초)

해결 방법 적용 결과

사실 자사의 데이터 에이전트는 해당 문제가 아니라 외부 API 서버의 딜레이 문제로 인해 발생한 송신 문제로 확인되어 해당 방법으로 해결하지는 않았지만,
외부 API 서버의 문제에 영향 받지 않도록 추후 해당 방법으로 보완할 예정이다.

참고

profile
항상 이유와 과정을 궁금해하는🤔 백엔드 개발자의 기술 블로그 입니다!

1개의 댓글

comment-user-thumbnail
2024년 1월 8일

글에 적힌 100000, 30000은 100초랑 30초인거 같습니다.

heartbeat가 세번정도 없을 때, consumer가 죽었다고 판단하는걸 권장하기 때문에 heartbeatInterval의 값을 sessionTimeout의 1/3로 설정하기를 권장하고 있지만, 그렇다고 heartbeatInterval의 최소 값이 sessionTimeout의 1/3은 아닙니다.

https://kafka.js.org/docs/2.0.0/consuming#a-name-options-a-options
https://stackoverflow.com/questions/43881877/difference-between-heartbeat-interval-ms-and-session-timeout-ms-in-kafka-consume

답글 달기