我正在测试Kafka服务器的故障转移。也就是说,我一次重新启动一个Kafka服务器,并检查客户端在这种情况下是否继续发送和接收消息。
该设置包括两个Kafka服务器broker-0
和broker-1
,一个配置了partitionCount=1
和replicationFactor=2
的测试主题,以及客户端每秒发送消息并收听的客户端
因此,我重新启动test-topic
的领导者,即broker-0
(我使用kafka-topics.sh
来检查哪个实例处于活动状态),并且broker-1
成为新的分区领导者;客户端连接到该实例并继续发送和接收消息。
然后,我重新启动broker-1
,使用kafka-topics.sh
检查此服务器是否位于ISR
集中,然后关闭broker-1
。
至此,我希望客户端重新连接到broker-0
并继续发送/接收消息;相反,发件人找不到活动的代理,在我的日志中,我有:
2019-01-25 17:22:04,062 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 0 disconnected.
2019-01-25 17:22:04,062 [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 0 (mytesthost001/192.168.1.1:19093) could not be established. Broker may not be available.
2019-01-25 17:22:04,062 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Give up sending metadata request since no node is available
2019-01-25 17:22:04,112 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Give up sending metadata request since no node is available
似乎客户端不知道服务器正在备份;如何解决/解决这个问题? (我正在使用Kafka服务器和库2.1版)
答案 0 :(得分:0)
最终,我能够弄清楚这一点-我在经纪人重启之间等待了很少的时间(不到1分钟)。并且客户端没有更新集群组成更改。因此,broker-1
发生故障时,客户不知道broker-0
已备份。
我更改了metadata.max.age.ms=10000
;此设置控制客户端应该多久刷新一次群集信息,如果未设置为默认值,则默认为5分钟-使其更短,以便客户端能够正确地进行故障转移