백앤드(Back-End)/Kafka

[Kafka] - Consumer 스태틱 멤버십

RyanSin 2024. 11. 2. 15:15
반응형

개요

안녕하세요. 이번 시간에는 스태닉 멤버십이라는 개념에 대해 알아보겠습니다.

 

지난 시간 내용을 놓치고 오신 분들은 학습하고 오시는 걸 추천드리겠습니다.

[Kafka] - Consumer 그룹 코디네이터

 

[Kafka] - Consumer 그룹 코디네이터

개요안녕하세요. 이번 시간에 Consumer 그룹 코디네이터에 대해 알아보겠습니다. Kafka Consumer 기본 개념에 대해 학습하고 오지 못하신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습

any-ting.tistory.com

 

스태틱 멤버십

스태틱 멤버십(Static membership)이란 컨슈머 그룹이 불필요한 리밸런싱을 하지 않기 위한 옵션입니다.

 

하나의 컨슈머가 재시작되면 전체 리밸런싱이 일어나며, 리밸런싱 작업이 일어나는 동안 컨슈머들은 일시 중지하므로 이는 매우 성능적으로 이슈가 될 수 있습니다.

 

만약 컨슈머 그룹에 소수의 컨슈머가 있다면 이 부분은 큰 영향을 차지하지 않겠지만, 최소 10개 이상에 컨슈머가 있다면 최소 10번 리밸런싱이 발생하고 10번 이상에 컨슈머 중지가 발생합니다.

 

컨슈머는 각자 식별하기 위한 식별자 ID가 임시로 부여됩니다. 고정된 ID 값이 아닌 임시로 부여되기 때문에 설정 변경이나 소프트웨어 업데이트, 장애 발생 등 여러 가지 이유로 컨슈머가 재시작되면 컨슈머 그룹 내의 동일한 컨슈머임에도 새로운 컨슈머로 인식합니다.

 

기존에는 컨슈머가 그룹에서 떠날 때 그룹 코디네이터에게 알리거나 하트비트 값을 보내지 않으면 컨슈머 그룹에서 제외가 됩니다.

이때 한 번의 리밸런싱이 발생하며, 만약 해당 컨슈머가 다시 합류되면  이때 다시 또 리밸런싱이 발생합니다.

 

리밸런싱 전

 

리밸런싱 후

 

 

만약 스태틱 멤버십을 적용하면 위와 같은 경우 리밸런싱을 피할 수 있습니다.

 

스태틱 멤버십을 설정하는 방법은 다음과 같습니다. group.instance.id 값을 설정하면 됩니다. 

카프카 버전이 2.3 이상이어야 설정이 가능하며, 그룹 코디네이터가 식별하기 위해 고유한 값으로 설정해야 합니다.

 

보통 접수어로 consumer-로 지정하고 점미어는 호스트 네임이나 서버의 IP 등을 조합해서 만듭니다.

 

스태틱 멤버십 기능을 적용한다면, session.timeout.ms를 기본값보다는 큰 값으로 조정해야 합니다. 기본적으로 만약 재시작 시간이 총 2분 정도 소요된다면, 2분 보다 더 큰 값으로 설정해야 합니다.

 

컨슈머 옵션 기본 값 설명
beartbeat.interval.ms 3000 그룹 코디네이터와하트비트 인터벌 시간입니다.
해당 시간은 session.timeout.ms 보다 낮게 설저해야 하며, 3분의 1 수준 적절합니다.
session.timeout.ms 1000 어떤 컨슈머가 특정 시간 안에 하트비트를 받지 못하면 문제가 발생했다고 판단해 컨슈머 그룹에서 해당 컨슈머는 제거 되고 리밸런싱이 동작이 일어납니다.
max.poll.interval.ms 300000 컨슈머는 주기적으로 poll()을 호출해 토픽으로부터 레코드를 가져옵니다.
poll() 호출 후 최대 5분간 poll() 호출이 없다면 컨슈머가 문제가 있는 것으로 판단해 리밸런싱 동작이 일어납니다.

 

 

 

이번 시간에는 스태틱 멤버십에 대해 알아봤습니다. 실습을 꼭 해보시는 걸 추천드리겠습니다.