当前位置: 首页 > 知识库问答 >
问题:

Kafka中的延迟消息消费

高嘉树
2023-03-14

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

找到相关问题,但没有帮助。正如我所看到的:Kafka基于从文件系统的顺序读取,并且只能用于直接读取主题,保持消息的顺序。我说的对吗?

共有1个答案

昌招
2023-03-14

的确,kafka最低结构是一个分区,它们是队列中具有增量偏移量的顺序事件--在生成日志的时刻,除了末尾之外,您不能在任何其他地方插入日志。没有延迟消息的概念。

你到底想实现什么?

您的情况下的一些可能性:

关于你的最后一个问题:基本上是的,但有一些注意事项:

  • 主题实际上是在分区中拆分的,顺序只保留在分区中。所有具有相同密钥消息将发送到相同分区。
  • 大多数时候,您只从内存中读取,除非您读取旧事件-在本例中,由于这些事件是从磁盘中顺序读取的,所以这是非常快的
  • 您可以选择从何处开始读取--给定的偏移量或给定的时间--甚至可以在运行时更改
  • 您可以跨进程并行读取-多个使用者可以读取相同的主题,而不会两次读取相同的消息(每次读取不同的分区,请参阅使用者组)
 类似资料:
  • 我正在使用Spring Kafka1.0.3来消费kafka消息。Kafka的2个主题,每个主题有1个分区。在java代码中,有2@KafKalistener来消费每个主题消息。ConcurrentKafkaListenerContainerFactory的并发设置为1。但消息有时会延迟20秒以上。 有人知道为什么吗? 添加调试日志,并且延迟不是每次都可以,有时也可以:

  • 我正在使用Kafka0.8.0并尝试实现下面提到的场景。 JCA API(充当生产者并将数据发送到)------>消费者------>HBase 当我使用JCA客户端获取数据时,我会立即将每个消息发送给消费者。例如,一旦生产者发送第1号消息,我就想从消费者那里获取相同的消息并将其“放入”HBase。但是我的消费者在一些随机的n条消息之后开始获取消息。我想让生产者和消费者同步,这样他们两个开始一起工

  • 主要内容:1 load加载延迟消息数据,1.1 parseDelayLevel解析延迟等级,2 start启动调度消息服务,3 DeliverDelayedMessageTimerTask投递延迟消息任务,3.1 executeOnTimeup执行延迟消息投递,3.2 scheduleNextTimerTask下一个调度任务,3.3 correctDeliverTimestamp校验投递时间,3.4 messageTimeup恢复正常消息,,基于RocketMQ release-4.9.3,深入

  • 在测试应用程序中,我使用以下命令实现了用于发送通知消息的FCM https://github.com/firebase/quickstart-android/tree/master/messaging 为了进行测试,我使用通知下的“新消息”从Firebase控制台发送了消息(晚上8:42)。 但在我的模拟器中,我在晚上9:06收到了消息 请让我知道是否有什么可以减少延误。 谢谢你。

  • 我们在RHEL 7.0 VM上部署了一个Java/spring/Tomcat应用程序,它使用AlejandRorivera/Embedded-RabbitMQ,一旦部署了war,它就启动Rabbitmq服务器,并连接到它。我们有多个队列用来处理和过滤事件。 流程如下所示: 我们接收到的事件->发布事件队列->侦听器类筛选事件->发布到另一个队列进行处理->我们发布到另一个队列进行日志记录。 问题是

  • CP正在使用我们的REST API从他们在新加坡的服务器发送推送。