【问题标题】:How to make a Kafka wildcard consumer in Java aware of a new topic sooner?如何让 Java 中的 Kafka 通配符使用者更快地了解新主题?
【发布时间】:2018-10-19 22:39:03
【问题描述】:

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

在我们想要动态添加新租户之前,这可以正常工作,即添加“message.tenant100”主题。通配符使用者在重新启动之前不会看到新主题。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    来自官方 Kafka 文档,New Consumer Configs

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

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

    【讨论】:

    • 它不起作用...正如我尝试过的kafka-console-consumer --bootstrap-server localhost:9092 --whitelist "mytopics.*" --consumer-property metadata.max.age.ms=5000kafka-console-producer --broker-list localhost:9092 --topic mytopics.1234。我仍然收到[2019-12-20 15:00:59,080] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {mytopics.1234=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
    • 我想念什么?你能照亮一些灯吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2021-10-22
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多