Kafka在0.8之前的版本,並不提供高可用機制,一旦一個broker宕機,則宕機期間該broke上的全部partition均不可用。從0.8版本開始,kafka開始提供高可用機制。
Kafka的高可用是經過多副本機制保證的。每一個topic下的partition都有主分區以及多個follower(該值可在建立topic時設置,也可後續動態修改),但replica數量不能大於broker數量。好比有3個broker,建立topic的replica必須小於等於3.
kafka的多副本機制是partition級別的,每一個partition及其副本統稱爲replica,replica包括leader和follower,生產者和消費者都只和leader交互,其餘副本只負責從leader處複製消息,leader宕機後由controller選舉一個新的leader。(這一點和elasticsearch很類似)算法
如下詳細闡述某個broker宕機後kafka的處理流程:json
kafka的高伸縮指的是broker的高伸縮,broker的高伸縮由自己的無狀態保證。kafka中的broker集羣可任意添加,並在下一次建立topic時分配partition,也可經過kafka提供的腳本手動調整原有topic的分區狀況,下降原有broker的負載。
新增長broker對生產者和消費者是無感知的,對現有topic的分區和分片也無影響,不會自動作partition的rebalance。只有新的topic加入時纔會用到。若是須要手動rebalance,可使用kafka提供的腳本實現。命令以下:
./kafka-reassign-partitions.sh --zookeeper 192.168.2.231:2181 --topics-to-move-json-file topic.json --broker-list "0,1,2" --generate
./kafka-reassign-partitions.sh --zookeeper 192.168.2.231:2181 --topics-to-move-json-file topic.json --broker-list "0,1,2" --executesegmentfault
建立topic——kafka源碼探究之一
https://segmentfault.com/a/11...緩存
消息生產與消息存儲——kafka源碼探究之三
https://segmentfault.com/a/11...elasticsearch