上一章介绍了Kafka单机的部署和常用命令,这一章我们将在此基础上介绍Kafka的集群应用
集群部署
本文使用单台服务器的不同端口模拟集群,如果多台服务器真实环境可以修改配置IP为对应服务器IP即可
配置准备
# 复制多两个配置文件
cp config/server.properties config/server-cluster-1.properties
cp config/server.properties config/server-cluster-2.properties
编辑三个属性文件中的属性
# config/server.properties
broker.id=0
listeners=PLAINTEXT://127.0.0.1:9092
log.dirs=/data/kafka/logs
zookeeper.connect=127.0.0.1:2181
# config/serverr-cluster-1.properties
broker.id=1
listeners=PLAINTEXT://127.0.0.1:9093
log.dirs=/data/kafka/logs-1
zookeeper.connect=127.0.0.1:2181
# config/serverr-cluster-2.properties
broker.id=2
listeners=PLAINTEXT://127.0.0.1:9094
log.dirs=/data/kafka/logs-2
zookeeper.connect=127.0.0.1:2181
listeners一定要配置成为IP地址
当使用java客户端访问远程的kafka时,一定要把集群中所有的端口打开防火墙
启动集群节点
启动集群中新建的两个节点
nohup ./kafka-server-start.sh ../config/server-cluster-1.properties 1>/dev/null 2>&1 &
nohup ./kafka-server-start.sh ../config/server-cluster-2.properties 1>/dev/null 2>&1 &
创建集群Topic
创建一个新的Topic,把备份设置为3,名字叫centerm-cluster-topic
./kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 3 --partitions 1 --topic centerm-cluster-topic
查看Topic信息
./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic centerm-cluster-topic
# 得到结果如下
Topic: centerm-cluster-topic PartitionCount: 1 ReplicationFactor: 3 Configs:
Topic: centerm-cluster-topic Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
Leader
:该节点负责该分区的所有的读和写,每个节点的leader都是随机选择的
Replicas
:备份的节点列表,无论该节点是否是leader或者当前是否alive,都会显示
Isr
:“同步备份”的节点列表,也就是alive的节点并且正在同步leader
Leader,Replicas,Isr中的0,1,2就是配置文件中的broker.id
顺便查看上一章我们创建的Topic信息
./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic centerm
#得到结果如下
Topic: centerm PartitionCount: 1 ReplicationFactor: 1 Configs: max.message.bytes=12800000,flush.messages=1
Topic: centerm Partition: 0 Leader: 0 Replicas: 0 Isr: 0
测试验证
通过发布消息、消费消息、容错测试来验证我们搭建的集群能力
发布消息
./kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic centerm-cluster-topic
>I`m Kafka cluster leader
消费消息
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9094 --from-beginning --topic centerm-cluster-topic
I`m Kafka cluster leader
容错测试
上面通过
--describe
我们看到Leader
的broker.id
是1,是config/server-cluster-1.properties对应的Kafka服务
[root@localhost bin]# jps -m
28881 QuorumPeerMain ../config/zookeeper.properties
3097 Jps -m
30122 Kafka ../config/server-cluster-2.properties
12923 jar -workDir /data/jenkins -jar-cache /data/jenkins/remoting/jarCache
29324 Kafka ../config/server.properties
29759 Kafka ../config/server-cluster-1.properties
可以看到Leader
的PID(29759 Kafka …/config/server-cluster-1.properties)为29759,干掉Leader
。再次查看Topic信息,可以看到再次查看Topic信息,Leader
变为了0,Isr
也只剩下了0,2
kill -9 29759
# 再查看Topic信息
[root@localhost bin]# ./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic centerm-cluster-topic
Topic: centerm-cluster-topic PartitionCount: 1 ReplicationFactor: 3 Configs:
Topic: centerm-cluster-topic Partition: 0 Leader: 0 Replicas: 1,0,2 Isr: 0,2
再次尝试消费消息,发现消息并没有丢失,容错测试完成
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9094 --from-beginning --topic centerm-cluster-topic
I`m Kafka cluster leader
下一章介绍Spring框架下实现Kafka生产消息