거북이 developer

[Kafka] Static MemberShip 본문

Kafka

[Kafka] Static MemberShip

흥부가귀막혀 2022. 3. 14. 11:08

Kafka 에서 rebalance가 의미하는 것은

  1. Group resource 재할당
  2. Membership 변화

1. Static Membership이란?

  • Dynamic Membership과는 다른, multi group내에서 영속적인 멤버를 이야기한다. 같은 구독을 재사용하도록 하고 구 member들이 코디네이터로 부터 인식할 수 있도록 한다가 목표이다.
  • 새로운 consumer는 "group.instance.id" 설정을 사용하여 consumer instance에서 unique를 보장하도록 설정한다. 다시 시작하는 동안 코디네이터에 assign된 memberID가 손실되지만, 코디네이터는 이 멤버를 join Reqeust에서 제공된 그룹 instance ID를 기반으로 인식하고 있다. 그러므로, 같은 assgin이 보장된다. 

2. How to opt into Static Membership

  1. 카프카 2.3버전이상으로 업그레이드 한다. 특히, inter.broker.protocol.version이 2.3이상이어야 한다.
  2. 적정한 session timeout을 정의한다. 타이트한 session timeout은 그룹에 속한 멤버들을 부정하게 kick out 할수 있다.
  3. group.instance.id를 consumer에 unique하게 설정한다.
  4. 코드를 배포하면 next rolling bounce부터 static membership이 효과를 보게 될 것이다.

3. Error handling

  • 가끔 사용자가 broker의 업그레이들 잊어먹는 경우가 있다. 이 경우에 consumer가 시작하면서 broker에 접속하면서 바로 crash가 발생하게 된다.
  • Group instance Id를 unique하지 않게 설정한다면, fencing logic이 동작하게 되어 있다. 예를 들어 알려진 static 멤버가 멤버ID가 없이 join하게 되면, 코디네이터는 새로운 uuid를 해당 멤버에게 새로운 Id로 응답한다. 같은 시간에 그룹코디네이터는 instance Id에 맵핑된 마지막 assign 멤버의 ID를 수정한다. 만약 알려진 static 멤버가 valid하지 않은 memeberID로 rejoin하게 되면 그 즉시 코디네이터는 fence되었다는 응답을 보내준다. concurrent한 동작중에 중복된 static 멤버를 제거하기 위함이다.
  • 처음 버전에서는 [KAFKA-8715]와 같은 버그들이 존재했었지만 수정되었다.

4. Reference

 

Comments