Kafka集群宕机恢复问题

淡忘莫相 发表于: 2019-08-28   最后更新时间: 2019-08-28  

我在测试Kafka集群容错性时,发现这样一个问题:

我搭建的kafka集群中包含3个节点,当我先随机杀掉两个节点时,第3个节点成为leader,整个集群仍然可用,当我再杀掉唯一的节点时,kafka集群不可用。

但是我发现应用程序的日志一直在重连最后宕机的leader,并没有重连之前两个宕机的节点。

然后,我恢复了先杀掉的两个kafka节点,此时kafka集群可用,但我发现kafka客户端仍然没有重连恢复的节点,而是一直保持与最后死掉leader的重连。

但是其他节点恢复后成为新的leader了,客户端也没有重连,也就造成了全部节点宕机进行恢复时,必须恢复最后宕机的leader,否则,kafka集群虽然已经可用,但是应用程序仍然无法正常使用。

不知道这个问题怎么解决。



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




淡忘莫相 发表于: 18天前   最后更新时间: 18天前   游览量:177

上一条: kafkaManager不能够正常监控kafka集群的问题
下一条: Zookeeper宕机对Kafka有什么影响?

  • 因为leader的数据是最新的,备节点在没有成为leader前宕了,那如果它成为leader,就会有丢消息的风险。
    参考:https://www.orchome.com/22
    参考:unclean.leader.election.enable

    • 不完全首领选举,kafka默认是激活的,这个我没有动,我想问的是,当kafka集群节点全部宕机后,为什么kafka客户端只会重连宕机前的leader,,而没有与其他节点尝试重连,如果在恢复kafka集群时,刚好之前宕机的leader服务器无法及时恢复,,而此时,kafka集群已经可用,但是,kafka客户端不会重连其他节点,就导致了应用程序仍然不可用,,,kafka客户端在重连时明显进行了区别对待,,,

        • 在我看来,为了kafka集群的容错性和高可用,kafka客户端在全部节点宕机之后都应该进行尝试重连,以最快的速度保证当kafka集群可用时,生产者和消费者也能正常使用,但是,kafka客户端明显没有这样去处理,,,而是一直重连全部宕机前的leader,,而且是强制性的,,也没有给用户选择的余地