Kafka
版本:2.4.0
现在来搭建有3
个节点实例的Kafka
集群。
首先复制2
份conf/server.properties
文件:
> cd /opt/kafka_2.12-2.4.0/
> cp config/server.properties config/server1.properties
> cp config/server.properties config/server2.properties
因为server.properties
文件中的broker.id=0
,所以我们可以分别修改server1.properties
和server2.properties
文件如下:
(1)config/server1.properties
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
(2)config/server2.properties
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
zookeeper
执行下面命令启动zookeeper
:
> cd /opt/kafka_2.12-2.4.0/
> bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
执行下面三个命令,启动三个Kafka
的实例:
> cd /opt/kafka_2.12-2.4.0/
> bin/kafka-server-start.sh -daemon config/server.properties
> bin/kafka-server-start.sh -daemon config/server1.properties
> bin/kafka-server-start.sh -daemon config/server2.properties
然后执行jps
命令查看java
进程:
> jps
5346 Kafka
6162 Kafka
5771 Kafka
4973 QuorumPeerMain
6255 Jps
可以看到,有一个QuorumPeerMain
,这代表zookeeper
实例;有三个Kafka
,分别代表启动的三个Kafka
实例。
topic
现在,创建一个topic
,叫做3-replic-topic
,这个topic
有1
个分区,3
个副本:
> bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --partitions 1 --replication-factor 3 --topic 3-replic-topic
可以通过下变得命令查看这个topic
的信息:
> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic 3-replic-topic
返回信息如下:
Topic: 3-replic-topic PartitionCount: 1 ReplicationFactor: 3 Configs: segment.bytes=1073741824
Topic: 3-replic-topic Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
其中:
Topic
:指出这个topic
的名称。PartitionCount
:代表分区个数。ReplicationFactor
:代表分区下副本个数。Leader
:代表选举出来的这个分区下的领导节点,负责该分区的读写工作。每个分区下的leader
都是随机选举出来的。这里的Leader:1
代表选出来的领导节点是broker.id=1
的节点。Replicas
:代表该分区下复制日志的节点列表,这里的1,0,2
就是我们指定的每个Kafka
节点的broker.id
的值。Isr
:代表一组存活着的同步节点的列表。执行下面的命令,创建一个消费者订阅这个3-replic-topic
主题:
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9094 --from-beginning --topic 3-replic-topic
创建一个消费者,订阅broker.id=2
的Kafka
节点的名为3-replic-topic
的主题,该Kafka
节点监听的端口号为9094
。
执行下面的命令,创建一个生产者,向这个3-replic-topic
主题发布消息:
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic 3-replic-topic
创建一个生产者,向broker.id=0
的Kafka
节点的名为3-replic-topic
的主题发布消息,该Kafka
节点监听的端口号为9092
。
Kafka
集群的容错能力现在来测试一下这个Kafka
集群的容错能力。因为broker.id=1
的节点是领导节点,现在杀掉他:
> ps aux | grep server1.properties
查看加载了server1.properties
文件的进程是多少,得到的是5771
。
然后通过jps
指令查看:
> jps
5346 Kafka
6162 Kafka
5771 Kafka
4973 QuorumPeerMain
8463 Jps
确实有一个进程号为5771
的Kafka
进程。
然后,可以通过kill指令杀掉他:
> kill -9 5771
再次通过jps
指令查看:
> jps
5346 Kafka
6162 Kafka
4973 QuorumPeerMain
8510 Jps
发现,5771
的Kafka
进程消失了,因为它被杀掉了。
接下来,我们再次查看3-replic-topic
主题信息:
> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic 3-replic-topic
得到下面的信息:
Topic: 3-replic-topic PartitionCount: 1 ReplicationFactor: 3 Configs: segment.bytes=1073741824
Topic: 3-replic-topic Partition: 0 Leader: 0 Replicas: 1,0,2 Isr: 0,2
可以看出,现在领导节点变成了broker.id=0
的Kafka
节点,Isr:0,2
指出存活的Kafka
节点为broker.id=0
和broker.id=2
的节点,因为broker.id=1
的节点被杀掉了。
一旦领导节点宕机,
Kafka
集群便会从存活的节点中重新选举出一个新的领导节点。