인생을 코딩하다.

[Kafka] 컨슈머 장애로 인한 토픽<->컨슈머 자동 리밸런싱전, 컨슈머에 장애가 생긴걸 어떻게 판단하여 자동 리밸런싱이 되게 할 수 있을까 본문

Kafka

[Kafka] 컨슈머 장애로 인한 토픽<->컨슈머 자동 리밸런싱전, 컨슈머에 장애가 생긴걸 어떻게 판단하여 자동 리밸런싱이 되게 할 수 있을까

Hyung1 2023. 2. 26. 04:13
728x90
반응형

카프카 리밸런싱이란 무엇일까요?

컨슈머 그룹으로 이루어진 컨슈머 들 중 일부 컨슈머에 장애가 발생하면, 장애가 발생한 컨슈머에 할당된 파티션은 장애가 발생하지 않은 컨슈머에 소유권이 넘어갑니다. 이러한 과정을 리밸런싱이라고 부릅니다. 리밸런싱이 일어날 수 있는 상황 두 가지는 크게 컨슈머가 추가되는 상황과 컨슈머가 제외되는 상황으로 나뉩니다. 이슈가 발생한 리밸런싱 즉, 컨슈머를 컨슈머 그룹에서 제외하여 모든 파티션이 지속적으로 데이터를 처리할 수 있도록 가용성을 높여 주어야 합니다.

그럼 컨슈머에  문제가 발생했을 때 리밸런싱이 일어난다는 건데, 문제가 발생한걸 어떻게 실시간으로 판단하고 자동으로 리밸런싱이 되게 할 수 있을까요?

저는 리밸런싱에 관해 이러한 생각이 들었습니다. "그럼 컨슈머에 장애가 난 걸 어떻게 실시간으로 판단 할 수 있을까? 판단이 안되면, 자동으로 리밸런싱도 안될텐데..." 하는 생각이 들었습니다. 그래서 어떻게 해결할 수 있을지 찾아보았고, 이에 관한 해답을 기록해둡니다.

카프카 컨슈머 옵션 중, session.time.ms와 hearbeat.inteval.ms를 통해 컨슈머에 장애가 난 것을 판단

  • session.time.ms : 컨슈머가 브로커와 연결이 끊기는 최대 시간. 기본값은 10초
  • heartbeat.inteval.ms : 하트비트를 전송하는 시산 간격. 기본값은 3초

하트비트를 일정 시간(heartbeat.inteval.ms )마다 전송할 때, 더 이상 컨슈머에게 전송되지 않으면 이 컨슈머는 문제가 있는 걸로 판단할 수 있습니다. 즉 기본값 설정일때 가장 최신의 하트비트가 3초마다 전송되다가 가장 최근 하트비트가 오고 난뒤 10초(session.time.ms)가 지난후에도 오지 않는다면 리밸런싱이 진행됩니다. 따라서 위 두 개의 옵션을 통해 컨슈머에 장애가 난 걸 판단할 수 있습니다.

session.time.ms와 hearbeat.inteval.ms 값은 어떻게 설정하는 것이 좋을까?

session.time.ms 너무 길면 데이터 처리가 지연될 수 있습니다. 컨슈머가 제대로 동작하고 있는지 판단하기에는 너무 긴 시간입니다. 그렇다고 너무 짧게 해버리면 실제로 문제가 없는데도 불구하고 리밸런싱이 자주 일어날 수도 있습니다.
 
운영되고 있는 네트워크 환경이 자주 끊기는 환경이라면 session.time.ms를 좀 크게 설정하거나, 그게 아니라면 기본 값이나 좀 더 낮게 설정하거나 하는 방식으로 운영하면 어떨까 싶네요.

 
 

728x90
반응형
Comments