librdkafka C API Kafka Consumer无法正确读取所有消息

时间:2019-01-31 00:24:12

标签: c apache-kafka kafka-consumer-api confluent-kafka

我正在使用librdkafka C API使用者(特别是使用rd_kafka_consumer_poll进行读取,并且在此之前确实调用了rd_kafka_poll_set_consumer

我看到的问题是我在Google测试中确实遵循了

  1. 向kafka写3条消息

  2. 初始化/启动kafka使用者(rd_kafka_consumer_poll

  3. rebalance_cb中,我将每个分区偏移量设置为RD_KAFKA_OFFSET_STORED并分配给它们进行处理

  4. 在这一点上,我认为它应该读取3条消息,但它只读取最后一条消息,但令人惊讶的是每个分区的偏移量已经更新!

我是否在使用Kafka Consumer错过了一些东西?

另外一个问题是,我最初认为存储的偏移量存在于kafka代理中,并且主题+消费者组ID +分区组合具有唯一的偏移量。

所以我认为阅读同一主题的不同消费者群体应该具有不同的偏移量。

但是,情况并非如此。当使用不同的消费群体时,我总是从相同的偏移量读取数据。

我怀疑这可能与抵消提交有关,但不确定在哪里解决。

有见识吗?

1 个答案:

答案 0 :(得分:1)

要查看的配置:auto.offset.reset

来自Kakfa consumer documentation

  

当Kafka中没有初始偏移量或当前偏移量时该怎么办   服务器上不再存在偏移量

来自librdkafka documentation

  

在偏移量存储中没有初始偏移量或   所需的偏移量超出范围:“最小”,“最早”-自动   将偏移量重置为最小偏移量“最大”,“最新”-   自动将偏移量重置为最大偏移量“错误”-   触发错误,该错误通过使用消息和检查来检索   “邮件->错误”。类型:枚举值

默认值为最新

此外,

#define RD_KAFKA_OFFSET_STORED -1000

因此,您尝试将分区偏移量设置为-1000,这显然不是有效的偏移量。 显然,在这种情况下librdkafka会读取最后一条消息(我没有检查代码)。