Kafka Topic-per-Consumer 配置
Kafka Topic-per-Consumer Configuration
我了解 Kafka Consumer Group 根据特定主题存在的分区数量进行负载平衡。因此,对于一个主题的分区数和订阅该主题的消费者组中的消费者数,理想的组合是1:1。
我有一个场景,我的每个消费者实际上都是一个消费者组本身(即每组 1 个消费者)。这主要是由于不同数据库之间的同步,使得相同的数据存在。我要做的就是 运行 一旦消费者从生产者那里收到消息(广播),就在不同的环境中执行相同的工作。
对我来说,我不认为 partitions/load 平衡的想法有什么不同。我要处理一个具有 1 个分区和 n
复制因子(n
= 总消费者组,或我的案例的消费者)的主题。有人认为我仍然应该为我的案例实施 1 个以上的分区吗?如果是,能否请您说明原因。
P.S。我正在使用 Producer/Consumer API 只有我的消息传递框架需要对我现有的应用程序设置至少 change/impact。
当您 运行 Kafka 在代理数量大于复制因子的集群中时,多个分区很有用。因此,当您有 5 个代理和 3 个代理的复制时,则不需要另外 2 个代理。当您有两个分区且副本数为 3 时,您可以将 2*3 = 6 个分区划分给 5 个代理。
只是现在有一个代理有两个分区,而其他的有一个。所以它不是均匀分布的。最好有更多的分区以获得更好的传播。
选择多个分区还有其他原因,但是关于这个的文章很多。我所解释的是一个很好的经验法则。
the ideal combination is 1:1 for the number of partitions for a topic and the number of consumers in a consumer group
更准确的说,partition的个数限制了一个consumer group中consumer的个数(如果consumer多于partition,就是idle)。消费者可以少于分区。我不会将 1:1 称为必然理想,这是实际限制。
I am going with a topic that has 1 partitions and n Replication-Factor (n = total consumer groups, or consumer for my case).
我看不到复制因子等于消费者群体数量的价值。复制是为了弹性,即防止在代理出现故障时丢失数据。它与消费者的数量没有任何关系,因为每个消费者只会从领导代理消费给定分区。
Does anyone think that I should still implement more than 1 partition for my case? If so, could you please mention why.
分区数据是为了在代理端和消费者端并行进行负载分配。从一开始就设置更多的分区比稍后重新分区数据更容易,即使您认为不需要它,if/when 您会发现您可以从中受益。另一方面,没有必要将它们设置得太高,因为它们有自己的开销(例如 CPU 代理负载)。
P.S. I am not using the Producer/Consumer API since I am not doing Table/Stream related aggregation
在我看来你是想说你没有使用 Kafka Streams API,因为 Kafka Streams 提供了 KTable、KStream 和聚合。
我了解 Kafka Consumer Group 根据特定主题存在的分区数量进行负载平衡。因此,对于一个主题的分区数和订阅该主题的消费者组中的消费者数,理想的组合是1:1。
我有一个场景,我的每个消费者实际上都是一个消费者组本身(即每组 1 个消费者)。这主要是由于不同数据库之间的同步,使得相同的数据存在。我要做的就是 运行 一旦消费者从生产者那里收到消息(广播),就在不同的环境中执行相同的工作。
对我来说,我不认为 partitions/load 平衡的想法有什么不同。我要处理一个具有 1 个分区和 n
复制因子(n
= 总消费者组,或我的案例的消费者)的主题。有人认为我仍然应该为我的案例实施 1 个以上的分区吗?如果是,能否请您说明原因。
P.S。我正在使用 Producer/Consumer API 只有我的消息传递框架需要对我现有的应用程序设置至少 change/impact。
当您 运行 Kafka 在代理数量大于复制因子的集群中时,多个分区很有用。因此,当您有 5 个代理和 3 个代理的复制时,则不需要另外 2 个代理。当您有两个分区且副本数为 3 时,您可以将 2*3 = 6 个分区划分给 5 个代理。
只是现在有一个代理有两个分区,而其他的有一个。所以它不是均匀分布的。最好有更多的分区以获得更好的传播。
选择多个分区还有其他原因,但是关于这个的文章很多。我所解释的是一个很好的经验法则。
the ideal combination is 1:1 for the number of partitions for a topic and the number of consumers in a consumer group
更准确的说,partition的个数限制了一个consumer group中consumer的个数(如果consumer多于partition,就是idle)。消费者可以少于分区。我不会将 1:1 称为必然理想,这是实际限制。
I am going with a topic that has 1 partitions and n Replication-Factor (n = total consumer groups, or consumer for my case).
我看不到复制因子等于消费者群体数量的价值。复制是为了弹性,即防止在代理出现故障时丢失数据。它与消费者的数量没有任何关系,因为每个消费者只会从领导代理消费给定分区。
Does anyone think that I should still implement more than 1 partition for my case? If so, could you please mention why.
分区数据是为了在代理端和消费者端并行进行负载分配。从一开始就设置更多的分区比稍后重新分区数据更容易,即使您认为不需要它,if/when 您会发现您可以从中受益。另一方面,没有必要将它们设置得太高,因为它们有自己的开销(例如 CPU 代理负载)。
P.S. I am not using the Producer/Consumer API since I am not doing Table/Stream related aggregation
在我看来你是想说你没有使用 Kafka Streams API,因为 Kafka Streams 提供了 KTable、KStream 和聚合。