我是Kafka世界的新手,正在阅读有关Consumer和ConsumerGroup的信息。我了解了两者之间的区别,并了解了为什么我们需要在Kafka中使用ConsumerGroup。
但是这里我的问题是,何时应该决定何时在同一组中创建新的使用者。 当我们拥有大量数据时?
有人可以帮助我了解任何实际用例吗?
谢谢
答案 0 :(得分:1)
我认为已经提到了一些非常好的观点,这是我的几分钱。因为您的主要问题似乎是“ 何时 ”,以便在组中添加消费者...
我可以想到两种情况:
如果“消费方”组中的一个或多个“消费方”由于来自多个分区的消费而超负荷,并且您打算分配该负载并提高并行度。在这种情况下,您可以添加消费者并触发重新平衡。
主题中的分区正在增加。这是一个非常棘手的情况,并且可能以某种方式干扰现有的消费者。以下是一些可能发生这种情况的示例:
a ),如果在划分主题时数据的语义发生了变化 基于语义的情况很常见
b )如果数据量在增加并且语义也在改变
c ),如果只是音量增加而导致场景1
但是,正如您在问题中所指出的那样-如果只是数量在增加,并且组中的使用者以1对1的关系很好地映射到分区,那么最好将其保留为他们是。否则,您可能会遇到方案2b。
希望这会有所帮助!
答案 1 :(得分:0)
在Apache Kafka中,并行度由分区数定义。分区数量越多,可以达到的并行度就越高。根据数据量,应将分区数设置为所需的值。请注意,活动使用者的数量不能超过分区数。
例如,假设您有一个主题test
,具有5个分区和一个使用者组test-group
。在任何给定时间,test-group
上只有5个消费者可以处于活动状态。假设我们在主题test
中有1000条消息,那么5个活动的使用者中的每一个将消耗(大约)200条消息。如果您运行的分区超过5个,其余分区将处于非活动状态,这意味着它们根本不会使用任何消息。同样,如果使用者的使用者少于分区,则某些活动使用者将使用多个分区中的消息。
下面是另一个不那么简单的示例(取自from):
在这种情况下,我们确实有两个主题(A
和B
),每个主题都有3个分区。属于同一消费者组的两个消费者正在使用来自两个主题的消息。
答案 2 :(得分:0)
如上所述,Kafka通过在消费者组之间分配分区来扩展主题的消费。消费者组不是什么,而是一组共享公用标识符的消费者。
使用者负责来自一个或多个分区的使用者消息。如果使用者组中有一个使用者运行,它将使用所有分区中的数据。如果有多个使用者在同一个组中运行,则它们将负载分配到来自不同分区的消耗中。
使用者的最大数量等于分区的最大数量。如果使用者数量超过分区数量,则过多的使用者将处于空闲状态。
假设有一个包含4个分区的主题。有两个消费者组A和B。组A有两个消费者C1,C2。两个使用者都将使用大约2和2个分区。
在消费者组B中,有四个消费者,每个消费者将在一个分区中消费。
何时使用单个消费者或多个消费者:取决于使用情况。如果您希望处理中的合并输出基于主题中的全部数据进行计算,则应该使用单个使用者,除非您具有后处理逻辑来合并每个使用者的输出。
如果您只是读取数据,并希望通过分配负载来并行化流程,请使用多个使用者