librdkafka生产者如何了解Kafka中的新主题分区

rod*_*olk 3 apache-kafka kafka-producer-api librdkafka

我正在运行 rdkafka_simple_ Producer.c 来向 Kafka 集群生成消息。我有一个主题和 30 个分区。使用默认的循环分区器。当生产者正在工作并向 Kafka 生成消息时,我向 Kafka 添加更多分区

kafka/bin/kafka-topics.sh --alter --zookeeper server2:2181 --topic demotest --partitions 40
Run Code Online (Sandbox Code Playgroud)

我希望制作人能够意识到这一变化并最终开始制作所有 40 个主题。然而,最后我只看到数据被生成到​​原来的30个分区。

在测试中,制作人运行了 2 分钟。

我是否需要在 simple_ Producer 中添加任何函数调用,或者它是我需要考虑的 Kafka 参数吗?

提前致谢!

rod*_*olk 5

对于这个问题我终于有答案了。实际上,生产者会定期刷新元数据。间隔由配置参数 topic.metadata.refresh.interval.ms 定义

topic.metadata.refresh.interval.ms 的值默认为 300000(以毫秒为单位)。这是5分钟,而测试只持续了2分钟。元数据刷新后,生产者将自动识别新添加的分区。

因此,对于遇到相同问题的任何人,您可以配置此参数以获得更快的元数据刷新。只需使用以下命令设置此值即可:

rd_kafka_conf_set(conf, "topic.metadata.refresh.interval.ms", "15000",
                          errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK)
Run Code Online (Sandbox Code Playgroud)

当然,您需要考虑这意味着经纪人和生产者之间有更多的消息传递。有关 librdkafka 配置的更多信息: librdkafka 配置