一個Topic中的所有數據分布式的存儲在kafka集群的所有機器(broker)上,以分區(partition)的的形式進行數據存儲;每個分區允許存在備份數據/備份分區(存儲在同一kafka集群的其它broker上的分區)
每個數據分區在Kafka集群中存在一個broker節點上的分區叫做leader,存儲在其它broker上的備份分區叫做followers;只有leader節點負責該分區的數據讀寫操作,followers節點作為leader節點的熱備節點,從leader節點備份數據;當leader節點掛掉的時候,followers節點中會有一個節點變成leader節點,重新提供服務
Kafka集群的Partition的leader和followers切換依賴Zookeeper
Kafka分布式保證的第一個特性就是:Kafka的Replication
Kafka的Replication指的是Partition的復制,一個Partition的所有分區中只有一個分區是leader節點,其它分區是follower節點。
Replication對Kafka的吞吐率有一定的影響,但是極大的增強了可用性
Follower節點會定時的從leader節點上獲取增量數據,一個活躍的follower節點必須滿足一下兩個條件:
1. 所有的節點必須維護和zookeeper的連接(通過zk的heartbeat實現)
2. follower必須能夠及時的將leader上的writing復制過來,不能“落后太多”; “落后太多”由參數{replica.lag.time.max.ms}和{replica.lag.max.messages}決定
Kafka分布式保證的第二個特性就是:Kafka Leader Election
Kafka提供了一個in-sync replicas(ISR)來確保Kafka的Leader選舉,ISR是一個保存分區node的集合,如果一個node宕機了或數據“落后太多”,leader會將該node節點從ISR中移除,只有ISR中的follower節點才有可能成為leader節點
Leader節點的切換基於Zookeeper的Watcher機制,當leader節點宕機的時候,其他ISR中的follower節點會競爭的在zk中創建一個文件目錄(只會有一個follower節點創建成功),創建成功的follower節點成為leader節點