3

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

提前致谢!

4

1 回答 1

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)

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

于 2019-02-06T20:45:28.560 回答