Kafka 2.3 集群中的 Kafka 'replications.number' 个代理

Kafka 'replications.number' of brokers in a Kafka 2.3 cluster

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

假设我有这样的配置:

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

这意味着:

  • 10 partition per topic.
  • Each partition should be replicated on all brokers
  • Partition is healthy if 2 in-sync-replicas (allows 1 failing broker)

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

值“2”还允许:

  • 1 broker to fail
  • probably faster convergence and recovery
  • In the case of 2 failing brokers, the cluster will not function anyway.

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

谢谢。

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

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

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

只有面对

时,复制因子“3”才是合理的
  • 1节点故障频繁
  • 代理节点上的高 CPU 和 RAM 消耗
  • 您正在保存非常重要的交易数据

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

首先要说清楚:

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.