我正在使用librdkafka
C API使用者(特别是使用rd_kafka_consumer_poll
进行读取,并且在此之前确实调用了rd_kafka_poll_set_consumer
)
我看到的问题是我在Google测试中确实遵循了
向kafka写3条消息
初始化/启动kafka使用者(rd_kafka_consumer_poll
)
在rebalance_cb
中,我将每个分区偏移量设置为RD_KAFKA_OFFSET_STORED
并分配给它们进行处理
在这一点上,我认为它应该读取3条消息,但它只读取最后一条消息,但令人惊讶的是每个分区的偏移量已经更新!
我是否在使用Kafka Consumer错过了一些东西?
另外一个问题是,我最初认为存储的偏移量存在于kafka代理中,并且主题+消费者组ID +分区组合具有唯一的偏移量。
所以我认为阅读同一主题的不同消费者群体应该具有不同的偏移量。
但是,情况并非如此。当使用不同的消费群体时,我总是从相同的偏移量读取数据。
我怀疑这可能与抵消提交有关,但不确定在哪里解决。
有见识吗?
答案 0 :(得分:1)
要查看的配置:auto.offset.reset
来自Kakfa consumer documentation:
当Kafka中没有初始偏移量或当前偏移量时该怎么办 服务器上不再存在偏移量
在偏移量存储中没有初始偏移量或 所需的偏移量超出范围:“最小”,“最早”-自动 将偏移量重置为最小偏移量“最大”,“最新”- 自动将偏移量重置为最大偏移量“错误”- 触发错误,该错误通过使用消息和检查来检索 “邮件->错误”。类型:枚举值
默认值为最新。
此外,
#define RD_KAFKA_OFFSET_STORED -1000
因此,您尝试将分区偏移量设置为-1000,这显然不是有效的偏移量。 显然,在这种情况下librdkafka会读取最后一条消息(我没有检查代码)。