librdkafka producer如何了解Kafka中的新topic分区

How does librdkafka producer learn about new topic partitions in Kafka

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

kafka/bin/kafka-topics.sh --alter --zookeeper server2:2181 --topic demotest --partitions 40

我希望制作人意识到这一变化并最终开始制作所有 40 个主题。 但是,最后我只看到原来的30个分区产生了数据。

在测试生产者运行 2 分钟。

我需要在 simple_producer 中添加任何函数调用还是我需要考虑的 Kafka 参数?

提前致谢!

这个问题终于有了答案。实际上,生产者会定期更新有关元数据的信息。间隔由配置参数 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)

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