ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka] - 9.Replica failure&recovery
    개발/Kafka 2022. 8. 8. 18:47

    1. Replica Failure


    ISR List 관리

    Message(data)가 ISR의 모든 Replicas(복제본)에 수신되면 Commit으로 간주

    Leader가 Zookeeper의 ISR-list의 변경 사항을 유지한다.

    Monitoring은 Kafka의 Cluster 내에 Controller가 담당.

    N개의 Replica가 있는 경우 N-1개의 장애를 허용한다.

     

    Follower가 실패하는 경우

    • Leader에 의해 ISR list에서 삭제
    • Leader는 새로운 ISR을 사용하여 Commit

     

    Leader가 실패하는 경우

    • Controller가 ISR Follower 중 하나를 새로운 Leader로 선출한다.
    • Controller는 새 Leader, ISR정보를 Zookeeper에게 Push 후 Local Caching을 위해 Broker에게 Push

     

    4개의 Broker와 4Partition, Replication Factor = 3 인 경우

    • Broker 104에서 장애가 발생하게 되면, Parition3에 대해서는 위 Leader가 실패하여 재선출 되는 과정을 진행

     

    Partition Leader가 없는 경우 동작 원리

    • Leader가 선출될 때 까지는 해당되는 Partition은 사용이 불가하다.
    • Producer가 Record를 send() 후 Retries param이 설정되었다면 재시도 한다.
    • retries=0 이면 NetworkException 발생

     

     

    2. Replica Recovery

    ACKS=all 

    • Replica Factor=3, Producer가 4개의 Message 이라고 가정
    • Follower는 M2까지 Message를 Commit하여 High water mark = 2이다.

     

    이 때, Broker X가 장애가 났다고 가정하여 보자.

    • 새로운 Leader를 뽑아야 함으로, Broker Y를 Leader로 선출한다.
    • Leader Epoch = 0 -> 1 로 증가
    • Z는 지속적인 Fetch를 통하여 M3를 replica
    • Y는 High water mark 진행
    • Z High water mark 수신 진행

     

    • M3는 Commit이 된적이 없는데 Y는 M3를 가지고 있다.
    • Broker X는 Broker Z가 M3를 받지 않았기 때문에 M3,M4에 대해 Ack를 날리지 않았다.
    • Producer는 재시도하여 M3,M4를 재전송한다.
    • Idempotence=False 임으로 중복이 발생한다.
    • Broker Z는Y를 Fetch 진행한다.

    장애가 난 Follower X가 복구 된다면?

    • X는 Zookeeper에게 연결
    • X는 Controller부터 Metadata를 받는다.
    • Leader Y로부터 Leader Epoch을 Fetch
    • Leadership이 변경된 시점부터 Parition을 Truncate한다.
    • Leader Y로부터 복제
    • 복제가 완료되면 ISR에 복귀한다.

     

    만약에 Acks=1이었다면, 어떻게 되었을까?

    • Broker X는 M3,M4에 대한 Ack를 응답하여 Producer는 재전송하여 주지 않는다.
    • 그나마, Broker Y에는 M3에 대한 Message를 가지고 있어 복원이 되었으나, M4는 손실

     

    3. Availability(가용성) vs Durablility(내구성)

    가용성

    # Topic Param
    Unclean.leader.election.enable

    ISR List에 없는 Replica가 Leader로 선출 할 것인지에 대한 Option ( Default =False )

    ISR List에 Replica가 하나도 없으면, Leader 선출 X -> 서비스 중단

    ISR List에 없는 Replica를 Leader로 선출하게 되면 Data는 손실된다.

     

    내구성

    # Topic Param
    min.insync.replicas

    최소 요구되는 ISR 갯수에 대한 Option( default=1 )

    ISR이 min.insync.replicas보다 작다면, Producer는 NotenoughReplicas Exception 수신한다.

    Producer에서 ACKS=all 과 함께 사용할 때 강력하게 보장되며, min.insync.replicas=2 이상 하는 것을 권장

    N개에 Replica가 있고 min.insync.replicas=2 라면, N-2개의 장애 허용

     

    Data의 유실을 방지

    Topic : Replication.factor최소 3이상 / Min.insync.replicas2 이상

    Producer : Acks = ALL

     

    Data의 유실이 있어도 가용성 중시

    Unclean.leader.election.enable = True

    '개발 > Kafka' 카테고리의 다른 글

    [Kafka] 11. Parition Assignment Strategy  (0) 2022.08.09
    [Kafka] - 10. Consumer_Rebalance  (0) 2022.08.09
    [Kafka] - 7. In sync Replicas  (0) 2022.08.05
    [Kafka] - 6. Replication  (0) 2022.08.04
    [Kafka] - 5. Consumer  (0) 2022.08.04

    댓글

Designed by Tistory.