Broker에 장애가 발생하면 어떻게 될까?
- 장애가 발생한 Broker의 Partition들은 모두 사용할 수 없게 되는 문제가 발생한다.
다른 Broker에서 Partition을 새로 만들 수 있으면 장애가 해결될까?
- 물론 서비스는 정상적으로 동작하겠지만 기존 메시지는 버릴 것인가? 하는 문제가 발생한다.
- 왜냐하면 이미 받아놓은 기존의 데이터들은 장애가 발생한 Partition에 남아 있기 때문이다.
Replication of Partition
- Partition을 복제(Replication)하여 다른 Broker상에서 복제물(Replicas)를 만들어서 장애를 미리 대비한다.
- 예를 들어 Producer가 Partition0으로 데이터를 Write하면 다른 Broker의 Partition0으로 복제한다.
- 이 때 원래의 원본 데이터를 가지고 있는 Partition을 Leader Partition이라고 하고 복제해가고 있는 Partition을 Follower Partition이라고 한다.
- Replication Factor = 3 이라고 하면 Leader,Follower를 포함한 총 3개의 Partition이 생기게 된다.
Producer/Consumer는 Leader와만 통신
- Producer는 Leader에만 Write하고 Consumer는 Leader로부터만 Read한다.
- Follower는 Broker 장애시 안정성을 제공하기 위해서만 존재한다.
- Follower는 Leader의 Commit Log에서 데이터를 가져오기 요청(Fetch Request)으로 복제한다.
- Consumer는 Kafka 2.4부터 Follower Fetching(Read)가 가능해졌다.
Leader 장애
- Leader에 장애가 발생하면 Kafka Cluster는 Follower 중에서 새로운 Leader를 선출한다.
- Clients(Producer/Consumer)는 자동으로 새 Leader로 전환된다.
Partition Leader에 대한 자동 분산
하나의 Broker에만 Partition Leader들이 몰려 있다면?
- 특정 Broker에만 Client(Producer/Consumer)로 인해 부하가 집중된다. (Hot Spot)
Hot Spot 방지
auto.leader.rebalance.enable
- default enable (Leader 자동 분산 옵션)
leader.imbalance.check.interval.seconds
- default 300 sec (Leader healthCheck)
leader.imbalance.per.broker.percentage
- default 10 (다른 Broker들 보다 몇% 더 많이 가져는것을 판단)
Rack Awareness
Rack 간 분산하여 Rack 장애를 대비
- 동일한 혹은 Available Zone 상의 Broker들에 동일한 "rack name"을 지정한다.
- 복제본(Replica-Leader/Follower)은 최대한 Rack 간에 균형을 유지하여 Rack 장애를 대비한다.
- Topic 생성 시 또는 Auto Data Balancer/Self Balancing Cluster 동작 때만 실행된다.
요약
- Partition을 복제(Replication)하여 다른 Broker상에 복제물(Replicas)을 만들어서 장애를 미리 대비한다.
- Replicas - Leader Partition / Follower Partition 으로 구성된다.
- Producer는 Leader에만 Write하고 Consumer는 Leader로부터만 Read한다.
- Follower는 Leader의 Commit Log에서 데이터를 가져오기 요청(Fetch Request)으로 복제한다.
- 복제본(Replica-Leader/Follower)은 최대한 Rack 간에 균형을 유지하여 Rack 장애를 대비하는 Rack Awareness 기능이 있다.