Kafka Consumer-分区范围的随机访问获取

时间:2019-05-02 10:35:21

标签: apache-kafka kafka-consumer-api

问题: 如何使用给定的[partition,start offset,end offset]范围定义随机提取旧消息块。希望一次范围从多个分区(每个分区一个范围)。在并发环境中也需要对此进行支持。

到目前为止我对解决方案的想法 我想我可以使用一个消费者池来进行并发,并且对于每次获取,都将Consumer.seekConsumer.pollmax.poll.records一起使用。但这似乎是错误的。不能保证我会得到完全相同的块,例如,在删除一条消息的情况下(使用日志压缩)。总体而言,这种寻求+轮询方法似乎不适合一次随机获取。

我的用例: 像典型的消费者一样,我的会读取10MB的消息块并进行处理。 为了处理这一块,我以某种工作流程将3-20个工作推向不同的主题。 现在,我的目标是避免将相同的块一次又一次地推入其他主题。在我看来,最好将引用推送到该块。例如[主题X /分区Y,开始偏移,结束偏移]。然后,在处理作业时,它将再次获取确切的块。

1 个答案:

答案 0 :(得分:1)

您的想法似乎很好,并且实际上是使用Consumer API的唯一解决方案。一旦在偏移之间删除消息,您将无能为力。

如果您确实需要每个偏移量范围之间的每条消息,那么您应该考虑使用该数据,因为它们是主动生成到某个外部可索引目标中的,而偏移量扫描也是一种常见操作。存在大量的Kafka连接器,并且有许多数据库或文件系统。但是这里的要点是,我认为您可能必须重新考虑这些“再处理”工作的选择