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