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.
我正在尝试优化 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.