【问题标题】:Consuming messages with RdKafka::KafkaConsumer c++:使用 RdKafka::KafkaConsumer c++ 消费消息:
【发布时间】:2017-07-17 22:13:53
【问题描述】:

我正在使用 librdkafka 的 c++ 客户端和 Confluent 的 dotnet 客户端来消费消息。 dotnet 版本消耗给定主题和分区的所有记录,但 c++ 客户端最多只消耗同一主题和分区的 10 条记录。我已经玩过https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md 这里给出的属性,所以两个版本都具有相同的配置,但还没有任何工作。有谁知道为什么会这样?

【问题讨论】:

  • 他们在同一个组(group.id)吗?如果是这样;您是否在 C++ 客户端之前运行了 .NET 客户端?这将使随后的 C++ 运行获取 .NET 客户端的已提交偏移量,并且仅使用新消息。您可以通过在 C++ 上使用唯一的 group.id 并设置 auto.offset.reset=earliest 来验证这一点。
  • 感谢您的快速回复。我更改了 group.id 并设置了 auto.offset.reset=earliest 但我仍然得到相同的总记录子集,并且 msg->len() 永远不会返回大于 11331 的任何内容。
  • 如果您提供您的消费者配置会有所帮助。
  • 对于 C# 消费者我有 var config = new Dictionary { { "group.id", "advanced-csharp-consumer" }, { "enable.auto.commit", true }, { "auto.commit.interval.ms", 5000 }, { "bootstrap.servers", brokerList }, { "fetch.message.max.bytes", 50 }, { "default.topic.config",新字典() { { "auto.offset.reset", "smallest" } } } };
  • 对于 C++ 消费者,我有以下 conf->set("auto.offset.reset", "earliest", errstr); conf->set("default_topic_conf", tconf, errstr);

标签: c++ apache-kafka


【解决方案1】:

您没有指定-X topic.auto.offset.reset=earliest(默认为最新偏移量),因此您的消费者将从分区的末尾开始消费,并且没有新消息进入您的消费者将看不到任何消息。 在测试期间,还要确保每次运行都使用唯一的 group.id 以避免从之前提交的偏移量中恢复。

【讨论】:

    猜你喜欢
    • 2018-03-25
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2022-01-09
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多