【问题标题】:Kafka - Broker failures, replicas was not recreatedKafka - 代理失败,未重新创建副本
【发布时间】:2021-02-08 13:31:07
【问题描述】:

听起来如果代理失败,副本不会分配给其他代理。我用 3 个代理创建了简单的测试设置。我创建了一个分区 = 13,副本 = 3 的主题。

我关闭了一个代理(代理 1),我看到“ISR”和“领导者”已更新以反映这一事实(虽然,副本列表仍然显示刚刚关闭的代理的代理 ID)。

我用 id 4 引导了另一个全新的代理。此时,我假设 kafka 可以在上面主题的这个代理上创建副本,但似乎并非如此,为什么?

那么,为什么 Kafka 设计的不是在其他可用机器上创建副本,如果其中一个代理停止,持有副本。它只是切换领导者标志

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

仔细查看文档

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

确认,如果代理关闭,kafka 将不会针对创建额外的副本做任何事情。

  1. 副本背后的原因是什么没有创建 可用机器?

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

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    没错,根据设计,Kafka 不会“自动修复”。

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

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

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

    【讨论】:

    • 也就是说,如果代理关闭并且永远不会回来(除非手动或自动启动它),仅此而已?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多