第一步.部署和启动三个broker:
不了解如何启动的参考链接
第二步.测试
1).通过命令查看节点的详细信息:
kafka-topics.sh --describe --zookeeper hadoop000:2181
显示如下:
Topic:ligh-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: ligh-replicated-topic Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
2).Leader:3 表示三个节点中的主节点是3号节点 下面开始验证:
首先断掉2号节点看看主节点是否更换:
通过jps -m查看相信信息,然后通过kill删除掉2号节点的进程:
1546 Kafka /root/app/kafka_2.10-0.9.0.0/config/server-3.properties
28139 QuorumPeerMain /root/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
1407 Kafka /root/app/kafka_2.10-0.9.0.0/config/server-1.properties
1487 Kafka /root/app/kafka_2.10-0.9.0.0/config/server-2.properties
kill -9 1487 删除2号节点
这时候测试发送消息和消费消息是可以正常操作的。然后查看节点的详细信息是否发生变化:
Topic:ligh-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: ligh-replicated-topic Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1
“isr”是“同步”的副本集。这是副本列表的子集,该列表当前处于活跃状态并且已经被领导者捕获,就是检测活着的节点。
因此可以看到已经挂掉了一个节点,然后删掉主节点3号
kill -9 1546
同样的发送一则消息在消费端口仍然可以消费到,报错了是因为警告错误,没影响,下面就看关键的主节点是够转移了,查看节点描述信息:
Topic:ligh-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: ligh-replicated-topic Partition: 0 Leader: 1 Replicas: 3,1,2 Isr: 1
可以看到Leader节点号已经变了,变成了唯一剩下的1号节点为主节点,后面的Isr也只有1号节点,另外再生产消息和消费消息还是正常的,因此可以看到kafka的容错机制还是不错的。
如果有三个节点,其中一个是主节点,把主节点宕机,会随机从剩余两个主节点中选择一个作为主节点.我已经测试过,想研究的话可以自己测试一下。具体的文档参考官网