在Kafka,是否可以阅读1分钟的消息?

时间:2018-01-23 21:30:40

标签: apache-kafka kafka-consumer-api

我正在尝试使用一个用例,该用例需要从1分钟的kafka主题处理消息。 在kafka中有没有办法只读取1分钟的消息?

提前致谢。

3 个答案:

答案 0 :(得分:3)

简短的回答是否定的。 Kafka消费者的消费基于获取队列中的最新消息或最早的消息。 See the docs (搜索auto.offset.reset)

我认为你应该做的是在你的消费应用程序中保留一个消息缓冲区。使您的缓冲区仅保留1分钟的消息并丢弃超过1分钟的消息。这样,缓冲区中最旧的消息总是1分钟。

我是怎么做的。

答案 1 :(得分:2)

您可以利用0.11.0.0中引入的reset offset tooling。一个问题是它是一个命令行工具,它还没有编程API(还)。但您可以将应用程序与工具同步(或使用应用程序中的工具)将分区的偏移量重置为1分钟前从那里消耗:

$ bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --reset-offsets --group test.group --topic foo:0,1 --by-duration P1M

这会将主题foo的分区0和1的偏移量重置为1分钟前的时间戳记中每个分区中的第一条消息。您可以检查邮件的时间戳,以确定它是否符合处理条件(根据您的使用案例)。

答案 2 :(得分:1)

您将能够使用Kafka Streams,状态存储和处理器执行此操作。以下解决方案可帮助您在1分钟后处理消息,但您仍将立即使用消息。

创建状态存储并将其添加到流构建器。使用该构建器创建流,并使用上面创建的状态存储添加处理器。使用处理器供应商处理您的每条消息。您可以使用process()将所有消息保存在状态存储中。将punctuate()安排到60000毫安并使punctuate()获得通过1分钟延迟的消息并处理它们。

希望这有帮助。