Kafka主题 - 每消费者配置

时间:2017-06-07 09:18:57

标签: java apache-kafka partitioning kafka-producer-api

据我所知,Kafka Consumer Group根据特定主题存在多少分区进行负载平衡。因此,对于主题的分区数量和订阅该主题的消费者组中的消费者数量,理想的组合是1:1。

我有一个场景,我的每个消费者实际上都是消费者群体(即每个群体1个消费者)。这主要是由于不同数据库之间的同步,因此存在相同的数据。一旦消费者从制作人那里获得消息(广播),我所要做的就是在不同的环境中运行相同的工作。

对我来说,我不相信分区/负载均衡的想法会有所不同。我将使用一个主题,该主题包含1个分区和n复制因子(n =总消费者组,或者我的情况下的消费者)。有人认为我仍然应该为我的案例实施多个分区吗?如果是的话,请你提一下原因。

P.S。我正在使用Producer / Consumer API,只有我的消息传递框架需要对我现有的应用程序设置进行最小的更改/影响。

2 个答案:

答案 0 :(得分:1)

在集群中运行Kafka时,多个分区很有用,其中集群的数量大于复制因子。因此,当您有5个经纪人并且复制3个时,则不需要另外2个经纪人。如果有两个复制为3的分区,则可以在5个代理上划分2 * 3 = 6个分区。

现在只有一个经纪人有两个分区,而其他经纪人有一个。所以它没有均匀分布。最好有更多的分区来获得更好的传播。

选择一些分区还有其他原因,但有很多关于此的文章。我所解释的是一个很好的经验法则。

答案 1 :(得分:1)

  

主题分区数与消费者群体中消费者数量的理想组合为1:1

更准确地说,分区数量限制了消费者群体中的消费者数量(如果消费者多于分区,则它们将处于空闲状态)。消费者可能比分区少。我不会将1:1称为必然理想,这是实际限制。

  

我将使用一个主题,该主题包含1个分区和n个复制因子(n =总体消费者群体,或者我的情况下的消费者群体)。

我没有看到复制因子等于消费者群体数量的价值。复制是为了恢复,即在代理发生故障时防止数据丢失。它与消费者的数量没有任何关系,因为每个消费者只会从领导经纪人那里消费给定的分区。

  

有人认为我仍然应该为我的案例实施多个分区吗?如果是的话,请你提一下原因。

分区数据用于负载分配,包括代理端和用户端的并行性。如果/当您发现可以从中受益时,即使您认为不需要,也可以从一开始就设置更多数量的分区,而不是稍后重新分区数据。另一方面,没有必要将它们设置得太高,因为它们有自己的开销(例如代理上的CPU负载)。

  

P.S。我没有使用Producer / Consumer API,因为我没有进行表/流相关聚合

听起来我打算说你没有使用Kafka Streams API,因为它的Kafka Streams提供了KTable,KStream和聚合。