之前完成了单点的kafka,今天我们来完成kafka集群的搭建。
首先设置多个broker
首先为每个broker创建一个配置文件。
cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
然后编辑这些新的配置文件,设置新的属性,不然会引起冲突:
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
broker.id是集群中每个节点的唯一且永久的名称。
修改端口和日志目录是为了防止broker在同一端口上注册和覆盖对方的数据,因为现在我们是运行在同一太机器上。
启动节点
启动zookeeper:
bin/zkServer.sh start
启动zookeeper节点
bin/kafka-server-start.sh config/server-0.properties
bin/kafka-server-start.sh config/server-1.properties
bin/kafka-server-start.sh config/server-2.properties
创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic test1
将备份的设置为3
到现在为止,我们就有一个集群了,我们来看一下各个broker在干什么
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
第一行是所有分区的摘要,每一行提供一个分区信息。
因为我们只设置了一个分区,所以只有一行。
Leader:负责该分区的所有读和写,每个节点的leader都是随机选择的
Replicas:备份的节点列表,无论该节点是否是leader或者目前是否还或者,只是显示。
Isr:同步备份的节点列表,也就是活着的节点并且正在同步leader
创建生产者和消费者
生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning
此时在生产者的窗口写什么东西,消费者的窗口就会显示出什么东西
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
>1
>test1
>love
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning
1
test1
love
测试集群的容错性
接下来,我们将leader给kill,通过之前的describe可知,leader就是broker1
ps | grep server-1.properties
46987 ttys002 0:33.99 /usr/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX.........
kill -9 46987
剩下的两个备份节点的一个会成为新的leader,而broker1已经不再同步备份集了
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1
Topic:test1 PartitionCount:1 ReplicationFactor:3 Configs:
Topic: test1 Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 2,0
接下来重新创建消费者,会发现原来消息队列中的消息并没有丢。
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test1
1
test1
love
至此,简单的kafka集群搭建完毕!!!
提示:大家碰到zookeeper或者kafka错误的时候,可以去.out文件中去看,这个文件里面有报错原因。之前我不知道,真的就碰到错误了在网上一个一个找,碰运气,花费了大把的时间