Apache kafka 如何让Java中的Kafka通配符使用者更快地了解新主题?

Apache kafka 如何让Java中的Kafka通配符使用者更快地了解新主题?,apache-kafka,kafka-consumer-api,spring-kafka,Apache Kafka,Kafka Consumer Api,Spring Kafka,我的项目通过为每个租户和通配符使用者使用单独的主题来实现Kafka级别的多租户,即发布到主题“message.tenant1”或“message.tenant99”并从主题“message.*”消费 在我们想要动态添加新租户(即添加“message.tenant100”主题)之前,这一切都很正常。通配符使用者在重新启动之前不会看到新主题 有没有一种方法可以让通配符使用者在不重新启动整个应用程序的情况下看到新主题 我们正在使用Spring,但如果Spring无法提供解决方案,那么我们可以使用其他解

我的项目通过为每个租户和通配符使用者使用单独的主题来实现Kafka级别的多租户,即发布到主题“message.tenant1”或“message.tenant99”并从主题“message.*”消费

在我们想要动态添加新租户(即添加“message.tenant100”主题)之前,这一切都很正常。通配符使用者在重新启动之前不会看到新主题

有没有一种方法可以让通配符使用者在不重新启动整个应用程序的情况下看到新主题

我们正在使用Spring,但如果Spring无法提供解决方案,那么我们可以使用其他解决方案

编辑:事实证明这是可行的,但有一个粗略的过程;在重新平衡发生前延迟5分钟。5分钟对于我们的生产来说可能太长了。我尝试将“leader.Distancement.check.interval.seconds”设置为较低的值,但似乎没有任何效果


我如何配置或告诉卡夫卡尽快重新平衡?我认为重新平衡是一项昂贵的操作,您不想经常这样做。

有一个消费者属性,
metadata.max.age.ms
,它可以强制消费者刷新元数据。默认值为300000或5分钟。您可以将其更改为每30秒左右一次,以缩短识别新主题的延迟时间

从卡夫卡官方文档中,在
新消费者配置
下:

metadata.max.age.ms
-之后的时间段(以毫秒为单位) 即使没有看到任何分区,我们也会强制刷新元数据 领导层变更,以主动发现任何新的经纪人或 分区


有一个消费者属性,
metadata.max.age.ms
,它可以强制消费者刷新元数据。默认值为300000或5分钟。您可以将其更改为每30秒左右一次,以缩短识别新主题的延迟时间

从卡夫卡官方文档中,在
新消费者配置
下:

metadata.max.age.ms
-之后的时间段(以毫秒为单位) 即使没有看到任何分区,我们也会强制刷新元数据 领导层变更,以主动发现任何新的经纪人或 分区


它不起作用了…正如我尝试过的那样,
kafka控制台使用者--引导服务器localhost:9092--白名单“mytopics.*”--使用者属性metadata.max.age.ms=5000
kafka控制台生产者--代理列表localhost:9092--主题mytopics.1234
。在获取相关id为3的元数据时,我仍然收到
[2019-12-20 15:00:59080]警告[Producer clientId=console Producer]错误:{mytopics.1234=LEADER\u NOT\u AVAILABLE}(org.apache.kafka.clients.NetworkClient)
我错过了什么?你能解释一下吗?它不起作用了…正如我尝试过的那样,
kafka控制台使用者--引导服务器localhost:9092--白名单“mytopics.*”--使用者属性metadata.max.age.ms=5000
kafka控制台生产者--代理列表localhost:9092--主题mytopics.1234
。在获取相关id为3的元数据时,我仍然收到
[2019-12-20 15:00:59080]警告[Producer clientId=console Producer]错误:{mytopics.1234=LEADER\u NOT\u AVAILABLE}(org.apache.kafka.clients.NetworkClient)
我错过了什么?你能发光吗?