apache-kafka - Kafka - 代理失败,副本未重新创建

标签 apache-kafka

听起来,如果代理发生故障,副本将不会分配给其他代理。我与 3 个经纪人创建了简单的测试设置。我创建了一个分区 = 13、副本 = 3 的主题。

我关闭了一个经纪人(经纪人1),我看到“ISR”和“Leader”已更新以反射(reflect)这一事实(尽管副本列表仍然显示刚刚关闭的经纪人的经纪人ID)。

我用 id 4 启动了另一个全新的代理。此时,我假设 kafka 可以在上述主题的该代理上创建副本,但似乎并非如此,有什么原因吗?

那么,为什么 Kafka 设计不在其他可用机器上创建副本(如果保存副本的代理之一已关闭)。它只是切换领导者标志

PS:我从文档中了解到 - 副本不会自行自动修复。但是,分布式系统中隐式假设的背后原因是在可用计算机上创建副本,以避免某些副本不可用的事实。

仔细查看文档

Kafka 集群将自动检测任何代理关闭或故障,并为该机器上的分区选举新的领导者。

确认,如果代理宕机,kafka 将不会执行任何关于创建额外副本的操作。

  1. 在任何情况下都未创建副本背后的原因是什么 可用机器?

  2. 它根本不会被创建吗?如果是,副本计数可能与原始计数不同?

enter image description here

最佳答案

没错,按照设计,Kafka 不会“自动修复”。

将副本移动到新代理上可能是一项昂贵的操作。一个分区可以包含数 TB 的数据,因此代理之间的复制可能会给集群增加巨大的负载。用户将无法使用所使用的带宽。

如果您使用足够的副本,则代理关闭时不会对用户产生影响。此外,卡夫卡期望经纪人在失败后返回。因此,与其从零开始引导新的代理,不如在原始代理返回时使其同步是一种更便宜的操作。

有些工具(如 Cruise Control )可以在某些情况下自动“自动修复”Kafka。此外,如果您预计某些代理会长时间关闭,您可以将分区移动到其他代理以避免丢失副本。 decomissioning brokers section在文档中涵盖了它。

关于apache-kafka - Kafka - 代理失败,副本未重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64534639/

相关文章:

java - Kafka字符串序列化效率

apache-kafka - 如何正确重启kafka服务器?

java - 卡夫卡1.0 : Alter number of partitions for a specific topic using java

apache-kafka - 如何用camel-kafka手动控制offset commit?

java - 重新平衡后如何处理僵尸 Kafka 消费者?

apache-kafka - MQTT Kafka 源连接器 : funny byte characters

apache-kafka - kafka __consumer_offsets 主题日志大小快速增长,减少磁盘空间

nginx - 允许通过nginx访问kafka

java - 实现 kafka 连接自定义分区器

scala - 创建 SparkContext 失败