如何将特定的kafka消费者分配给特定的分区
How to assign a specific kafka consumer to a specific partition
我有一个有 2 个分区的 "topic"。
topic-0
topic-1
我有 2 个输入消息通道
input0
input1
同一个目的地"topic"和同一个组。
我的理解是,因为是同一个组,所以每个topic都会自动分配一个partition。
是否可以将特定分区分配给特定消息通道?
您可以将特定分区分配给禁用消费者 auto-rebalance
以及适当的 instanceCount
和 instanceIndex
属性的 Kafka 消费者。
例如,在您的情况下,
--spring.cloud.stream.bindings.input0.consumer.instanceCount=2 --spring.cloud.stream.bindings.input1.consumer.instanceCount=2 --spring.cloud.stream.bindings.input0.consumer.instanceIndex=0 --spring.cloud.stream.bindings.input1.consumer.instanceIndex=1 --spring.cloud.stream.bindings.input0.group=mygroup --spring.cloud.stream.bindings.input1.group=mygroup --spring.cloud.stream.kafka.bindings.input0.consumer.autoRebalanceEnabled=false --spring.cloud.stream.kafka.bindings.input1.consumer.autoRebalanceEnabled=false --spring.cloud.stream.bindings.input0.destination=topic --spring.cloud.stream.bindings.input1.destination=topic
以上配置将使用 partition
、 instanceCount
和 instanceIndex
值基于模数为每个消费者分配主题分区(绑定输入通道时)。
我有一个有 2 个分区的 "topic"。
topic-0
topic-1
我有 2 个输入消息通道
input0
input1
同一个目的地"topic"和同一个组。
我的理解是,因为是同一个组,所以每个topic都会自动分配一个partition。
是否可以将特定分区分配给特定消息通道?
您可以将特定分区分配给禁用消费者 auto-rebalance
以及适当的 instanceCount
和 instanceIndex
属性的 Kafka 消费者。
例如,在您的情况下,
--spring.cloud.stream.bindings.input0.consumer.instanceCount=2 --spring.cloud.stream.bindings.input1.consumer.instanceCount=2 --spring.cloud.stream.bindings.input0.consumer.instanceIndex=0 --spring.cloud.stream.bindings.input1.consumer.instanceIndex=1 --spring.cloud.stream.bindings.input0.group=mygroup --spring.cloud.stream.bindings.input1.group=mygroup --spring.cloud.stream.kafka.bindings.input0.consumer.autoRebalanceEnabled=false --spring.cloud.stream.kafka.bindings.input1.consumer.autoRebalanceEnabled=false --spring.cloud.stream.bindings.input0.destination=topic --spring.cloud.stream.bindings.input1.destination=topic
以上配置将使用 partition
、 instanceCount
和 instanceIndex
值基于模数为每个消费者分配主题分区(绑定输入通道时)。