【问题标题】:java kafka get message offset in partition by unique keyjava kafka通过唯一键获取分区中的消息偏移量
【发布时间】:2019-06-03 13:33:11
【问题描述】:

如果我所有的 kafka 消息都包含唯一键,那么在代理的分区中使用唯一键查询消息偏移量的最快方法是什么?假设我已经知道这个消息必须存在于这个代理和这个分区中。

例如,我可以考虑的一种方法是重新处理分区内的所有消息,然后停止直到找到特定的键。但是,如果您有超过一百万条消息,处理每条消息确实是在浪费时间。

换句话说,是否有任何 kafka API 可以直接在 Kafka 服务器上进行此检查?

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api


    【解决方案1】:

    Kafka 的工作方式如您所料,它按顺序读取消息。您不能直接访问某些记录。但是您可以做的节省时间的方法是为该主题创建多个分区,然后通过让您知道分区是什么的键(您必须谷歌它如何获取分区号)然后您只从该分区消费。所以说如果你在一个主题中有1 000 000 记录,那么如果你创建100 分区,你只需要扫描10 000 记录并找到你的。

    【讨论】:

      【解决方案2】:

      我建议使用Kafka Streams:

      使用 KStream.transform() 并通过ProcessorContext 获得对消息偏移量的访问。然后在结果之上构建 KTable 或使用Interactive Queries

      【讨论】:

      • 对不起,我不太明白你的想法。那么你想如何在它已经被消费之后获得“某个消息偏移量”而不从头开始读取数据呢?通过 ProcessorContext.offset() 似乎只给你当前消息的偏移量
      • 我说得对吗:您想通过唯一的密钥获取存储在 Kafka 中的消息吗?
      • 是的,但我认为他们应该是一种比简单地“从头开始重新处理所有现有消息直到找到特定偏移量”更快的方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2021-02-22
      相关资源
      最近更新 更多