概述
对于kafka来说,一个单独的broker意味着kafka集群中只有一个节点。要想增加kafka集群中的节点数量,只需要多启动几个broker实例即可。
单个节点的安装: Kafka-初体验Kafka(02)-Centos7下搭建单节点kafka_2.11‐1.1.0
这里我们来搭建个3个节点的kafka集群来体验下吧
部署信息
192.168.18.130 —> kafka 、 zookeeper(单节点的zk)
192.168.18.131 —> kafka
192.168.18.132 —> kafka
单节点的 zk , 部署上 130上,事实上生产环境的话,zk也是要搭建集群的,这里演示用的话,用单个节点的zk先。
3个节点的kafka注册到 单节点的zk上。
配置信息
kafka的配置文件主要是配置文件 server.properties
130
[root@artisan config]# grep -Ev '^$|^[#;]' server.properties broker.id=0 listeners=PLAINTEXT://192.168.18.130:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/tmp/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=192.168.18.130:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0 [root@artisan config]#
131
[root@artisan config]# grep -Ev '^$|^[#;]' server.properties broker.id=1 listeners=PLAINTEXT://192.168.18.131:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/tmp/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=192.168.18.130:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.de
132
[root@artisan config]# grep -Ev '^$|^[#;]' server.properties broker.id=2 listeners=PLAINTEXT://192.168.18.132:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/tmp/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=192.168.18.130:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0 [root@artisan config]#
还有一篇博主写的 zk也是高可用的,可以参考下,写的很不错 ZooKeeper+Kafka 高可用集群搭建
验证
启动zookeeper 和 3个 kafka 后,我们创建一个新的topic,副本数设置为3,分区数设置为2
[root@artisan bin]# ./kafka-topics.sh --create --zookeeper 192.168.18.130:2181 --replication-factor 3 --partitions 2 --topic artisan-replicated-topic Created topic "artisan-replicated-topic". [root@artisan bin]#
查看topic的情况
[root@artisan bin]# ./kafka-topics.sh --describe --zookeeper 192.168.18.130:2181 --topic artisan-replicated-topic Topic:artisan-replicated-topic PartitionCount:2 ReplicationFactor:3 Configs: Topic: artisan-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0 Topic: artisan-replicated-topic Partition: 1 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1 [root@artisan bin]#
我们来解释下上面的输出内容
第一行是所有分区的概要信息,之后的每一行表示每一个partition的信息。
所有分区的概要信息:
Topic:artisan-replicated-topic PartitionCount:2 ReplicationFactor:3 Configs
每一个partition的信息:
Topic: artisan-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0 Topic: artisan-replicated-topic Partition: 1 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
- leader节点负责给定partition的所有读写请求。
- replicas 表示某个partition在哪几个broker上存在备份。不管这个几点是不是”leader“,甚至这个节点挂了,也会列出
- isr 是replicas的一个子集,它只列出当前还存活着的,并且已同步备份了该partition的节点。
我们可以运行相同的命令查看之前创建的名称为”artisan“的topic
[root@artisan bin]# ./kafka-topics.sh --describe --zookeeper 192.168.18.130:2181 --topic artisan Topic:artisan PartitionCount:1 ReplicationFactor:1 Configs: Topic: artisan Partition: 0 Leader: 0 Replicas: 0 Isr: 0 [root@artisan bin]#
之前设置了topic的partition数量为1,备份因子为1,因此显示就如上所示了。当然我们也可以通过如下命令增加topic的分区数量(目前kafka不支持减少分区):
[root@artisan bin]# ./kafka-topics.sh --alter --partitions 3 --zookeeper 192.168.18.130:2181 --topic artisan WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected Adding partitions succeeded!
重新查看
[root@artisan bin]# ./kafka-topics.sh --describe --zookeeper 192.168.18.130:2181 --topic artisan Topic:artisan PartitionCount:3 ReplicationFactor:1 Configs: Topic: artisan Partition: 0 Leader: 0 Replicas: 0 Isr: 0 Topic: artisan Partition: 1 Leader: 1 Replicas: 1 Isr: 1 Topic: artisan Partition: 2 Leader: 2 Replicas: 2 Isr: 2 [root@artisan bin]#
现在我们向新建的 artisan-replicated-topic 中发送一些message,kafka集群可以加上所有kafka节点:
[root@artisan bin]# ./kafka-console-producer.sh --broker-list 192.168.18.130:9092,192.168.18.131:9092,192.168.18.132:9092 --topic artisan-replicated-topic >artisan message test 1 >artisan message test 2 >artisan message test 3 >
现在131broker 开始消费:
[root@artisan bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.18.131:9092 --from-beginning --topic artisan-replicated-topic artisan message test 1 artisan message test 3 artisan message test 2
现在我们来测试我们 容错性 ,因为broker1目前是artisan-replicated-topic的分区0的 leader,所以我们要将其kill , kill 掉 131 节点的 kafka
再执行
[root@artisan bin]# ./kafka-topics.sh --describe --zookeeper 192.168.18.130:2181 --topic artisan-replicated-topic Topic:artisan-replicated-topic PartitionCount:2 ReplicationFactor:3 Configs: Topic: artisan-replicated-topic Partition: 0 Leader: 2 Replicas: 1,2,0 Isr: 0,2 Topic: artisan-replicated-topic Partition: 1 Leader: 2 Replicas: 2,0,1 Isr: 2,0 [root@artisan bin]#
我们可以看到,分区0的leader节点已经变成了broker 2。要注意的是,在Isr中,已经没有了1号节点。leader的选举也是从ISR(in-sync replica)中进行的。
131 重新起来以后,还是可以消费消息
[root@artisan bin]# ./kafka-server-start.sh -daemon ../config/server.properties [root@artisan bin]# jps 24436 Kafka 24455 Jps [root@artisan bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.18.131:9092 --from-beginning --topic artisan-replicated-topic artisan message test 1 artisan message test 3 artisan message test 2
再看下
[root@artisan bin]# ./kafka-topics.sh --describe --zookeeper 192.168.18.130:2181 --topic artisan-replicated-topic Topic:artisan-replicated-topic PartitionCount:2 ReplicationFactor:3 Configs: Topic: artisan-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 0,2,1 Topic: artisan-replicated-topic Partition: 1 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1 [root@artisan bin]# [root@artisan bin]#