Apache kafka 使用Apache Kafka中添加的分区

Apache kafka 使用Apache Kafka中添加的分区,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我有一个KafkaConsumer并使用手动分区分配。为了分发分区,我定期使用consumer.partitions for(topicId)来检测添加的分区,因为作业将永远运行,我希望支持这种情况。但是,除非我重新启动使用者,否则它总是返回分区的初始列表 是否有一种方法可以检测消费者添加的分区?轮询或侦听什么?当您通过assignment()方法进行查询时,这可能是在重新分配分区的过程中。你可以睡5秒钟,然后检查这个来测试它 获取当前分配给此使用者的分区集。如果订阅是通过使用assign(Co

我有一个
KafkaConsumer
并使用手动分区分配。为了分发分区,我定期使用consumer.partitions for(topicId)来检测添加的分区,因为作业将永远运行,我希望支持这种情况。但是,除非我重新启动使用者,否则它总是返回分区的初始列表


是否有一种方法可以检测消费者添加的分区?轮询或侦听什么?

当您通过
assignment()
方法进行查询时,这可能是在重新分配分区的过程中。你可以睡5秒钟,然后检查这个来测试它

获取当前分配给此使用者的分区集。如果订阅是通过使用assign(Collection)直接分配分区进行的,那么这将只返回分配的相同分区如果使用了主题订阅,则这将提供当前分配给使用者的主题分区集(如果尚未进行分配,或者分区正在重新分配,则可能没有主题分区)


KafkaConsumer
有一个“metadata.max.age.ms”,默认为5分钟。这意味着,每次调用
consumer.partitions for
都将返回当时的缓存副本,然后才获取新的元数据


将属性设置为
0
每次都会获取新的元数据。

我还测试了自动分配,似乎也没有检测到添加的分区。请显示有关自动分配的代码,是的,手动无法检测到此更改,但我相信
订阅
可以处理。这只是
消费者订阅(singletonList(“my_topic”)
。然后我检查
consumer.assignment()
的输出,在添加分区后它没有改变。我至少等了30秒,它是这个组中唯一的消费者吗?两个JVM中的两个消费者,但我在两个JVM上都打印
assignment()
的输出