Kafka 2.3集群中的经纪人的Kafka'replications.number'

时间:2020-01-22 06:16:38

标签: apache-kafka apache-zookeeper

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

考虑我有以下配置:

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

这意味着:

  • 每个主题10个分区。
  • 每个分区都应在所有代理上复制
  • 如果有2个同步副本,则分区运行良好(允许1个失败的代理)

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

值“ 2”还将允许:

  • 1个经纪人失败
  • 可能更快地收敛和恢复
  • 如果有两个失败的代理,群集将始终无法运行。

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

谢谢。

2 个答案:

答案 0 :(得分:0)

我与您拥有相同的集群,但是区别在于:

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

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

仅当您面对

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

否则,复制因子“ 2”几乎适用于所有用例。

答案 1 :(得分:0)

首先要弄清楚:

2个同步副本意味着您必须具有2个同步副本才能生成消息,否则您的生成者会收到NOT_ENOUGH_REPLICAS异常,并且无法生成消息。 (我想您在制作方设置了acks=all

为了使您的方案的主题与replication.factor = 2

假设您的经纪人ID为1,2,3。最初,您有3个健康经纪人,当您描述主题时,您会看到类似以下内容:

enter image description here

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

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

enter image description here

您当然可以在此时重新分配分区,但是您仍然发现这是个问题。

结果;最佳实践是如果您的replication.factor = 3和集群中的代理数量为3,则设置min.insync.replicas = 2