1

我有三个主题,每个主题在 kafka 集群上都有三个分区。

现在,共有 9 个分区。当我创建 9 个消费者时... 6 个处于空闲状态。只使用了三个消费者。

期望是:每个消费者应该拾取一个分区,因此,9 个消费者应该从 9 个分区中拾取文档

但发生的情况是:一个消费者从三个不同主题之一的分区中获取消息。

例如,我有三个主题 Topic_A、Topic_B 和 Topic_C 以及每个三个分区。因此分区如下:

Topic_A_0、Topic_A_1、Topic_A_2、Topic_B_0、Topic_B_1、Topic_B_2、Topic_C_0、Topic_C_1、Topic_C_2

当我创建 9 个消费者时,分配工作如下:

Consumer1: Topic_A_0,Topic_B_0,Topic_C_0 
Consumer2: Topic_A_1,Topic_B_1,Topic_C_1 
Consumer3: Topic_A_2,Topic_B_2,Topic_C_2
Consumer4,Consumer5,Consumer6,Consumer7,Consumer8,Consumer9 are idle

它应该是

Consumer1: Topic_A_0
Consumer2: Topic_A_1
Consumer3: Topic_A_2

Consumer4: Topic_B_0
Consumer5: Topic_B_1
Consumer6: Topic_B_2

Consumer7: Topic_C_0 
Consumer8: Topic_C_1 
Consumer9: Topic_C_2

是否有任何配置我需要让所有 9 个消费者从 9 个独特的分区中获取消息?

4

2 回答 2

0

确保您的所有消费者都订阅了同一消费者组 ID 下的同一组主题。对于主题列表,您可以传递预定义的列表或正则表达式供消费者订阅。可以使用消费者中的group.id属性设置消费者 ID。

于 2018-07-11T09:57:22.590 回答
0

默认分区分配策略不适用于跨主题,因此这是预期的行为。这里有一个类似的问题:卡夫卡消费者在主题之间保持平衡

于 2018-07-13T10:32:16.073 回答