Apache Kafka-服务器重新启动后客户端未重新连接

时间:2019-01-25 17:31:29

标签: apache-kafka kafka-producer-api

我正在测试Kafka服务器的故障转移。也就是说,我一次重新启动一个Kafka服务器,并检查客户端在这种情况下是否继续发送和接收消息。

该设置包括两个Kafka服务器broker-0broker-1,一个配置了partitionCount=1replicationFactor=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版)

1 个答案:

答案 0 :(得分:0)

最终,我能够弄清楚这一点-我在经纪人重启之间等待了很少的时间(不到1分钟)。并且客户端没有更新集群组成更改。因此,broker-1发生故障时,客户不知道broker-0已备份。

我更改了metadata.max.age.ms=10000;此设置控制客户端应该多久刷新一次群集信息,如果未设置为默认值,则默认为5分钟-使其更短,以便客户端能够正确地进行故障转移