【问题标题】:Kafka 'replications.number' of brokers in a Kafka 2.3 clusterKafka 2.3 集群中的代理的 Kafka 'replications.number'
【发布时间】:2020-05-08 06:07:59
【问题描述】:

我正在尝试优化 3-brokers Kafka 集群,但遇到了一个非常基本但不清楚的问题。

考虑我有这个配置:

kafka.topic.partitions.number=10
kafka.partition.replications.number=3
min.insync.replicas=2

这意味着:

  • 每个主题 10 个分区。
  • 应在所有代理上复制每个分区
  • 如果 2 个同步副本(允许 1 个故障代理),则分区是健康的

问题是关于replication=3的必要性,真的有必要吗?

值 '2' 也将允许:

  • 1 个代理失败
  • 可能更快的收敛和恢复
  • 如果有 2 个代理失败,集群将无法正常运行。

顺便说一句 - 我的 zookeeper 安装在同一台 kafka 机器上。

谢谢。

【问题讨论】:

    标签: apache-kafka apache-zookeeper


    【解决方案1】:

    首先要明确一点:

    2 in-sync-replicas 意味着您必须有 2 个 in-sync-replicas 才能生成消息,否则您的生产者会收到 NOT_ENOUGH_REPLICAS 异常并且无法生成消息。 (我想你在生产者端设置了acks=all

    让您的场景与replication.factor = 2 有主题:

    假设您的代理 ID 是 1、2、3。一开始您有 3 个健康的经纪人,当您描述主题时,您会看到如下内容:

    如果 id 为 2 的代理崩溃了怎么办?然后,您将只有一个用于分区 1 和 2 的同步副本,如下所示:

    并且您的生产者无法生成消息,因为min.insync.replicas = 2

    当然,您可以在那时重新分配分区,但正如您所见,这仍然是一个问题。

    因此;最佳做法是设置 replication.factor = 3,如果您的 min.insync.replicas = 2 并且集群中的代理数量为 3。

    【讨论】:

    • replication.factor=3 的问题是我在创建主题时必须有 3 个正在运行的代理。
    • @chenchuk 绝对是的。
    【解决方案2】:

    我拥有与您相同的集群,但不同之处在于:

    • Zookeeper 安装在 Kafka 以外的其他节点上
    • 我有 3 个 Kafka 代理节点,但复制因子为 2
    • 我每个主题的分区是 5 以上是我在您的配置中注意到的差异。

    我的集群在过去几个月运行良好,我什至没有在任何 Kafka Brokers 集群中看到节点故障。

    复制因子“3”只有在面对时才合理

    • 1 个节点频繁故障
    • 代理节点上的 CPU 和 RAM 消耗高
    • 您正在保存非常重要的交易数据

    否则,复制因子“2”对于几乎所有用例来说都足够了。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2021-01-01
      • 2018-11-21
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多