原文链接:
Kafka Tutorial: Kafka clusters, Kafka consumer failover, and Kafka broker failover (cloudurable.com)
本文主要介绍Kafka集群的容错机制。
在上文中我们在本地windows系统中配置好了Kafka,这里我们开始起一个Kafka集群,然后往集群里发信息,检查消息是否能正确收到。
好了,废话不多说,我们开始。
首先,要起一个Kafka集群。
我们先在上次建好的data目录下面新建三个目录,分别是kafka-0、kafka-1、kafka-2,作为三个集群的日志目录。
然后创建3个Kafka 的server.properties 配置文件。
我们在kafka根目录下创建一个lab2/config目录,然后把文件从config下的server.properties 拷贝到/lab2/config下,
命名成server-0.properties,server-1.properties,server-2.properties
然后修改对应的properties文件:
主要修改一下broker.id,log.dirs和listeners 端口。这里listeners要把hostname 加上,我这里写了localhost。否则Kafka producer 启动的时候,会报一个NETWORK_EXCEPTION的错误。
接下来就可以启动了Kafka 集群了。
启动命令如下:
首先,我们还是启动Zookeeper
zookeeper-server-start.bat ../../config/zookeeper.properties |
然后启动KafKa 1、2、3.
kafka-server-start.bat ../../lab2/config/server-0.properties |
kafka-server-start.bat ../../lab2/config/server-1.properties |
kafka-server-start.bat ../../lab2/config/server-2.properties |
命令执行成功,说明三个Kafka broker 启动好了。中间如果出现一些错误,那么就可以把zookeeper也一并kill掉,然后再重新启动一下。
然后我们来create 一个my-failsafe-topic的topic:
kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 13 --topic my-failsafe-topic |
这样my-failsafe-topic就创建好了。
接下来我们起两个consumer:
kafka-console-consumer --bootstrap-server localhost:9094,localhost:9093,localhost:9092 --topic my-failsafe-topic --from-beginning kafka-console-consumer --bootstrap-server localhost:9094,localhost:9093,localhost:9092 --topic my-failsafe-topic --from-beginning |
然后起一个producer 往my-failsafe-topic 发送消息。
消息发送成功,接收也没有问题。
2022年8月2号更新,今天有一个大新闻。就是我们有可能收复台湾。
接着我们可以再新启两个consumer,我们可以看到,我们的consumer还是把原来的数据都冲头到尾都消费了一遍。
这个是因为我们没有给这些consumer assign consumer group,他们分属于不同的consumer group,这样导致所有的consumer 都需要重新消费一遍。
接下来,我们来新建新的consumer。并且给它指定到同一个consumer group里去。
脚本稍做改动:
kafka-console-consumer --bootstrap-server localhost:9094,localhost:9093,localhost:9092 --topic my-failsafe-topic --consumer-property group.id=mygroup |
同样的我们新起3 个consumer,然后往my-failsafe-topic 里发送消息m1到m15,这样我们看到,同一个消息,只会被消费一次。
consumer 1:消费了m2,m4,m8,m10,m14
Consumer 2:消费了m1,m5,m6,m7,m9,m11,m12,m13,m15
Consumer 3:消费了m3
接下来我们来看一下kafka consumer的容错机制
首先,我们先把consumer3 关闭。
然后我们再往my-failsafe-topic里发送消息:m16,m17,m18,m19,m20,m21.我们看到两个consumer 消费消息很平均。
consumer1 消费了m16,m18,m19
Consumer2消费了m17,m20,m21
接下来,我们把consumer2给关了。再往topic:my-failsafe-topic里发送消息,我们能看到:kafka consumer 的failover 机制生效了,producer 发送的消息都被consumer1消费到了。
生产者发了m22,m23,m24,m25。Consumer1也就消费了m22,m23,m24,m25.
如果大家还想看kafka的partition和ISR 信息的话,可以使用如下命令:
kafka-topics.bat --describe --topic my-failsafe-topic --bootstrap-server localhost:2181 |
--以上