测试 Kafka HA 并获取 NetworkException:服务器在收到响应之前已断开连接

use*_*024 5 apache-kafka

运行 Confluence Kafka 4.1.1 社区。

我有...

  • 最小同步副本 = 2
  • 主题:1 个分区,副本数 3
  • 共有 3 名经纪人。
  • 生产者设置为 acks = -1
  • 所有其他生产者设置均为默认设置。

我启动了我的应用程序,当它开始向 Kafka 写入记录时,我故意关闭了其中一个代理,我立即得到:org.apache.kafka.common.errors.NetworkException: The server disconnected before a response was received.

根据上面的设置。生产者 write() 不应该成功并且不抛出错误吗?

澄清

  • 我故意杀死经纪人
  • 这似乎只有在领导经纪人被杀时才会发生?

sen*_*iwu 4

没有看到完整的配置。和日志消息,很难说,仍然..

在 Kafka 中,所有写入都经过领导分区。在您的设置中,在 3 个经纪人中,您杀死了 1 个。因此应该可以成功写入其余 2 个经纪人并获得确认。但如果被杀死的 Broker 是领导节点,则可能会导致异常。

来自文档:

acks=all 这意味着领导者将等待完整的同步副本集确认记录。这保证了只要至少一个同步副本保持活动状态,记录就不会丢失。这是最强有力的保证。

在任何情况下,您都可以将重试设置为大于 0 的值并查看行为 - 应该选出新的领导者,并且您的写入最终应该成功