使用者组可以运行多个使用者实例(具有的多个进程
group-id)。在使用时, 每个分区仅由组中的一个使用方实例使用 。
例如,如果您的主题包含2个分区,并且您
group-A使用2个使用方实例启动一个使用方组,则每个使用方实例将使用该主题的特定分区中的消息。
如果您使用不同的组ID
group-A和启动相同的2个使用者,
group-B则该主题的两个分区中的消息将广播到其中每个。因此,在这种情况下,在其下运行的使用者实例
group-A将具有来自该主题的两个分区的消息,这同样适用
group-B。
在他们的文档中阅读有关此内容的更多信息
编辑 :根据您的评论,
我想知道在相同的流程中拥有2个使用者线程而不是2个使用者进程(两种情况下的组相同)之间的有效区别是什么?
使用者
group-id在整个集群中是相同/全局的。假设您已经开始使用2个线程启动一个进程,然后使用具有2个线程的相同groupId生成另一个进程(可能在另一台机器上),那么kafka将添加这2个新线程以使用该主题中的消息。因此,最终将有4个线程负责同一主题的消费。然后,Kafka将触发重新平衡,以将分区重新分配给线程,因此可能发生的情况是,对于线程正在消耗的特定分区,
T1of process P1可以将其分配给线程使用
T2 of process P2。以下几行摘自Wiki页面
当使用相同的使用者组名称启动新进程时,Kafka将将该进程的线程添加到可用于消耗主题并触发“重新平衡”的线程集中。在重新平衡期间,Kafka将为可用线程分配可用分区,可能会将一个分区移至另一个进程。如果您混合使用新旧业务逻辑,则某些消息可能会传递到旧逻辑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)