kafka是否有办法从kafka中抽取最后一批发送到某个topic的数据?

I'm CxY 发表于: 2020-12-15   最后更新时间: 2020-12-15  

Kafka版本:0.10.2.1

每天由上游定时发送一批数据到Kafka,并被下游消费者消费入到数据库中。最近遇到了一个情况,Kafka中显示收到消息(总偏移量增加)1000条,但是下游数据库中仅有950条。现在需要排查kafka中的数据是否存在不合法数据导致无法被正确消费,这就要求抽取这1000条数据(上游只存了原始数据,可能存在中途拼接问题,所以无法从上游截取数据)。

问题在于,这个topic有10个分区,但是这1000条数据可能不一定是平均发送到这10个分区内的。现有的模拟消费的命令必须要指定分区、起始消费位置和消费数量,这种方式没有办法精确的抽到这最后发过来的1000条。

所以想请问各位大佬是否有方法或者命令可以解决这个问题?



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: kafka在线更改gzip压缩方式,会有什么影响吗
下一条: kafka升级应该使用哪个版本比较合适?

  • 可以根据时间来重新消费这些数据。
    参考:https://www.orchome.com/1004

    • 感谢回复。我看了下0.10.1版本的javadoc 这个里面的seek方法里有这么一句
      Note that you may lose data if this API is arbitrarily used in the middle of consumption, to reset the fetch offsets
      如何理解这个"arbitrarily"?如果使用您的代码传递的消费者组和正在使用的消费者组是同样的话 offset可能会被重置吗?换句话说,是否意味着我可以借由这个方法修改当前消费者组的偏移量?还是说 这个描述的仅针对正在被消费中的数据?
      我在这个 https://www.orchome.com/35 页面下曾提过类似的问题,0.9.x的版本的javadoc里关于seek也是这么描述的。那实际上当初那个问题或许可以通过这个方式解决?

        • 1、同一个消费者组的话,修改了offset,那么共同生效(会受影响)。
          2、根据时间维度的,0.9版本不行,是1.0之后才有。
          3、seek可以。