卡夫卡延迟消息消耗

如何使用Apache Kafka产生/消费延迟消息?看起来像标准的Kafka(和Java kafka-client)功能没有这个功能。我知道我可以用标准的等待/通知机制自己实现它,但它看起来不太可靠,所以我们赞赏任何建议和良好做法。卡夫卡延迟消息消耗

找到related question,但它没有帮助。 正如我所看到的:Kafka基于文件系统的连续读取,并且只能用于直接读取保留消息排序的主题。我对吗?

回答:

事实上,kafka最低结构是一个分区,它是具有增量偏移量的队列中的顺序事件 - 您在生成时不能在其他地方插入日志。没有延迟信息的概念。

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

在你的情况下,一些可能性:

  • 你想在一个特定的时间来推动信息(例如,事件“开始工作”)。在这种情况下,使用计划任务(不是来自kafka,在您的操作系统/语言/自定义应用程序中使用某种标准方式)在给定时间发送消息 - 消费者将在适当的时间收到消息。

  • 您想现在发送一个活动,但现在消费者不应该考虑这个活动。在这种情况下,您可以使用自定义结构,在其有效载荷中包含“时间”。消费者必须了解这个领域,并有定制的处理来处理它。例如:“2017-12-27T20:00:00Z开始工作”。您也可以为此使用标题,但现在所有客户端不支持标题。

  • 您可以更改发送的消息的时间戳。在内部,它仍然是按顺序读取的,但是一些暗示时间的函数会以不同的方式工作,并且消费者可以使用消息的时间戳来进行动作 - 这与之前的命题有些类似,除了时间戳是事件的一个元数据,而不是事件有效载荷本身。我个人不会使用它 - 我只在处理某些事件时处理时间戳。

为了您的最后一个问题:基本上,是的,但也有一些注意事项:

  • 主题实际上是一分为分区,以便只保存在分区。所有具有相同密钥的消息都发送到同一个分区。
  • 大多数的时候,你只能从内存中读取,但如果你读旧的事件 - 在这种情况下,那些被依次从磁盘读取,这是非常快
  • 您可以选择从哪里开始看 - 一个给定的偏移或给定的时间 - 甚至在运行时改变它
  • 可以并行读取整个过程 - 多个消费者可以读取相同的主题,从不阅读相同的消息两次(每次读取不同的分区,请参见消费群体)

回答:

配置消费者本身可能是解决方案。

使用波纹管的配置属性值#

max.poll.interval.ms 

max.poll.records

fetch.max.wait.ms

或基于需求。

consumer configuration

以上是 卡夫卡延迟消息消耗 的全部内容, 来源链接: utcz.com/qa/264840.html

回到顶部