Apache kafka librdkafka制作人如何了解Kafka中的新主题分区

Apache kafka librdkafka制作人如何了解Kafka中的新主题分区,apache-kafka,kafka-producer-api,librdkafka,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 我希望制作人意识到这一变化,并最终开始制作所有40个主题。 然而,最后我只看到数据被生成到原来的30个分区

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

kafka/bin/kafka-topics.sh --alter --zookeeper server2:2181 --topic demotest --partitions 40
我希望制作人意识到这一变化,并最终开始制作所有40个主题。 然而,最后我只看到数据被生成到原来的30个分区

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

我需要在SimuleIX制作者中添加任何函数调用,还是需要考虑的卡夫卡参数?


提前谢谢

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