1. 程式人生 > >kafka(八):Kafka高可用性

kafka(八):Kafka高可用性

  1. Kafka Partition Replication

    功能:增加Topic分割槽的可用性
    每個Partition分為leader和follower兩部分(前提是replication factor大於1的)

        eg: Topic: beifeng0 Partition: 0    Leader: 3       Replicas: 3,0,1 Isr: 3,0,1 
          ====> leader是brokerid為3的服務,Replicas:複製節點3,0,1; Isr: 3,0,1 指定當前partition活躍的partition(leader + 活躍follower)

     建議:一般情況下,每個分割槽的replication factor為3-5比較合適;通過shell指令碼監控分割槽的變化,當有效分割槽數量過少的時候,通知開發人員手動參與進去修改分割槽節點數


 2. Kafka Leader Election

    方式:通過ISR來實現Leader的選擇。當leader宕機的時候,會從isr列表中選擇一個節點來進行恢復。
    原則:
            (1)當一個partition宕機或者落後資料太多,leader會將該partition的broker識別符號從isr列表中刪除;也就是隻有isr中的節點才有可能成為主節點
            (2) 當leader宕機的時候,其它有效的partition會在zk中建立一個資料夾目錄(只會有一個follower節點建立成功),建立成功的follower節點成為新的leader節點
            (3)當原來的leader節點重新恢復後,會成為一個新的follower節點,新增到ISR列表中(會同步資料)
      實現前提:內部是基於zk的watch機制來實現通知以及資料夾的建立的 

  3. Message Delivery Semantics

     訊息傳輸協議/型別 ===> 是對於訊息系統中訊息傳遞可靠性保障的一個定義
    (1)三種類型的定義:【kafka僅有前兩種】
          -1. At most once: 最多傳送一次,允許資料丟失,但是不允許的資料重複的情況下使用該方式
          -2. At least once: 最少傳送一次,允許資料重複,但是不允許資料丟失的情況下使用該方式
          -3. Exactly once: 僅傳送一次資料,但是不允許儲存資料丟失和重複的情況,有可能儲存資料傳送失敗的情況
          
    (2)Kafka中實現資料傳輸的可靠性方式:
            資料儲存過程中的可靠性保證:
            通過Kafka Partition Replication以及Kafka Leader Election來保證的
    (3)Producer端:
        功能:生產者將資料傳送給kafka
        可靠性實現方式:通過引數request.required.acks來決定的,acks是生產者等待kafka叢集的接收確認返回值,主要有三個引數:

0:這意味著生產者producer不等待來自broker同步完成的確認繼續傳送下一條(批)訊息。此選項提供最低的延 
   遲但最弱的耐久性保證(當伺服器發生故障時某些資料會丟失,如leader已死,但producer並不知情,發出 
   去的資訊broker就收不到)。
1:這意味著producer在leader已成功收到的資料並得到確認後傳送下一條message。此選項提供了更好的耐久性 
    為客戶等待伺服器確認請求成功(被寫入死亡leader但尚未複製將失去了唯一的訊息)。
-1:這意味著producer在follower副本確認接收到資料後才算一次傳送完成。 
	此選項提供最好的耐久性,我們保證沒有資訊將丟失,只要至少一個同步副本保持存活。

三種機制,效能依次遞減 (producer吞吐量降低),資料健壯性則依次遞增。


    (4)Consumer端:
        功能:消費Kafka中對應Topic中的資料
        可靠性保證:
          每個Parition中的資料是有序的,每條資料在每個Partiiton中都存在一個offset偏移量(資料是按照offset遞增的順序排列的)
          Kafka中的資料是否被某個Consumer消費,就根據該Consumer的Offset的值決定資料是否會被消費;
                        offset表示了consumer消費偏移量小於offset的資料,大於等於offset的資料是沒有被消費的