我正在运行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参数?
谢谢!
答案 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