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

时间:2019-02-06 17:10:27

标签: 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个分区。

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

定义

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

因此,对于有相同问题的任何人,您都可以配置此参数以加快元数据的刷新速度。除了通过以下方式设置该值,无需编码:

rd_kafka_conf_set(conf, "topic.metadata.refresh.interval.ms", "15000",
                          errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK)

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