【问题标题】:Retrieve a message by knowing its partition and offset in Kafka通过知道消息在 Kafka 中的分区和偏移量来检索消息
【发布时间】:2016-04-05 19:21:27
【问题描述】:

我正在开发 Kafka 0.9。我想知道是否有任何方法可以通过知道分区和偏移量从其主题中检索已处理的消息。例如,消费者当前正在使用分区 1 和偏移量 10 的消息。我想在同一分区和偏移量 5 获取消息。

我能想到的一种方法是将偏移量重置为 5 并使用一条消息。但是 poll() 方法只能返回一批消息。所以我必须接受第一条信息而忽略其他信息。处理完消息后,偏移量被重置回来。

我认为这会奏效。但还是想知道有没有其他优雅的方法。

【问题讨论】:

  • But the poll() method can only return a batch of messages -> 如果将 batch.size 设置为 0,则不会。

标签: apache-kafka kafka-producer-api


【解决方案1】:

Kafka 旨在从磁盘读取长条数据,而无需移动磁盘磁头——换句话说,它已针对使用线性读取进行了优化。忽略必须从磁盘读取的整块数据(并且可能通过网络提供服务)似乎效率低下,但实际上使磁盘磁头跳来跳去的效率要低得多。查看 Kafka 的设计理念,以及它对磁盘的使用,here

换句话说,您的方法可能有效。但是您的思维方式更像是某人使用关系数据库而不是消息传递系统的方式。

【讨论】:

  • 谢谢!我完全同意。 Kafka 是消息系统,在消息检索方面效率不高。由于在这种情况下,我必须在没有外部存储支持的情况下重新使用一些消息,所以我必须找出一种正确的方法。这种情况不会经常发生,所以我不担心效率。
【解决方案2】:

您应该能够使用“seek”方法从您需要的偏移量中读取消息。

看看“控制消费者的立场” https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2017-08-29
    • 2021-02-14
    相关资源
    最近更新 更多