首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kafka延迟消息消耗

Kafka延迟消息消耗
EN

Stack Overflow用户
提问于 2017-12-27 19:51:13
回答 1查看 15.7K关注 0票数 10

如何使用Apache Kafka生成/消费延迟消息?似乎标准的Kafka (和Java kafka客户端)功能没有这个功能。我知道我可以用标准的等待/通知机制自己实现它,但它似乎不是很可靠,所以任何建议和好的实践都是值得感谢的。

找到related question了,但没用。正如我所看到的: Kafka基于从文件系统的顺序读取,并且只能用于读取主题,简单明了地保持消息顺序。我说的对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 21:11:13

实际上,kafka的最低结构是一个分区,它是队列中具有增量偏移量的连续事件-您不能在生成日志的时刻插入日志的末尾以外的任何地方。没有延迟消息的概念。

你到底想要达到什么目的?

在你的案例中有一些可能性:

  • 您希望在特定时间推送消息(例如,启动作业事件)。在这种情况下,使用计划任务(不是来自kafka,在您的os /语言/自定义应用程序/其他地方使用一些标准方式)在给定的时间发送消息-消费者将在适当的时间收到消息。
  • 您想现在发送事件,但消费者现在不应该考虑这一点。在这种情况下,您可以使用在其有效负载中包含"time“的自定义结构。消费者必须了解这个字段,并有自定义处理来处理它。例如:"start job at 2017-12-27T20:00:00Z“。您也可以使用headers,但目前并不是所有客户端都支持headers。
  • 您可以更改发送的消息的时间戳。在内部,它仍然是按顺序读取的,但一些暗示时间的函数将以不同的方式工作,消费者可以使用消息的时间戳进行操作-这有点像前面的命题,除了时间戳是事件的元数据,而不是事件有效负载本身。我不会亲自使用它--我只在代理某些事件时处理时间戳。

对于你的最后一个问题:基本上,是的,但有一些注释:

  • 主题实际上是在分区中拆分的,并且只在分区中保留顺序。具有相同键的所有消息都被发送到相同的时间组,您只能从内存中读取,除非您读取旧事件-在这种情况下,因为这些事件是从磁盘顺序读取的,这是非常快的
  • 您可以选择从何处开始读取-给定的偏移量或给定的时间-甚至可以在运行时更改它
  • 您可以跨进程并行读取-多个使用者可以读取相同的主题,并且永远不会读取相同的消息两次(每个使用者读取不同的分区,请参阅使用者组)
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47991670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档