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
我 运行 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