如何使Java中的Kafka通配符使用者更快地意识到一个新话题?

时间:2018-10-19 13:46:29

标签: apache-kafka kafka-consumer-api spring-kafka

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

这很好,直到我们要动态添加新的租户,即添加“ message.tenant100”主题。通配符使用者只有在重新启动后才能看到新主题。

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

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

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

如何配置或告诉Kafka尽快重新平衡?我希望重新平衡是一项昂贵的操作,而不是您不想经常执行的操作。

1 个答案:

答案 0 :(得分:4)

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

根据官方的Kafka文档,位于New Consumer Configs下:

  

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

https://kafka.apache.org/documentation/#newconsumerconfigs