是否有基于拉的标准消息传递协议?

时间:2018-08-16 05:57:28

标签: messaging kafka-consumer-api architectural-patterns

有几种基于推送的消息传递标准(例如MQTT,STORM)。是否有任何基于请求的消息传递协议?

用例:

公司A当前提供了一个支持多个主题的MQTT端点。当事件发布到主题时,MQTT服务器将事件推送给所有订阅者。

但是,A公司希望解决一些缺点:

  • 当新订户注册以接收发布到该主题的事件时,她希望接收曾经发布到该主题的所有消息。
  • 只要有一个“热门”主题,即在很短的时间内针对该主题发布了许多事件,将这些事件分发给已注册的订户可能会使这些订户不知所措。因此,订阅者希望按照自己的节奏从主题中提取事件。

当前解决方案:

公司A公开了一个HTTP端点,该端点具有get-event操作,该操作检索事件(例如,编号为10345671034578的事件已发布到名为some-hot-topic的主题中下面的curl调用):

curl http://pull.company-a.com/get-events?topic=some-hot-topic&start-at=1034567&stop-at=1034578

问题:

代替构建这种一次性解决方案,公司A可以定义URL格式和响应有效载荷的格式,公司A可以使用已经定义了这些标准的任何标准来解决问题(该标准可以不必基于HTTP。

人们想到的事情(例如Kafka Consumer REST APIRSS)在不同的上下文中解决了类似的问题,但是似乎并没有为满足以下目的而定义任何标准:基于拉的事件通知协议。

1 个答案:

答案 0 :(得分:0)

我有一些想法可以使用Kafka实现。我没有MQTT的任何经验,所以也许在那里可以实现相同的经验。

  1. Kafka使用者有一个偏移量-它控制使用者从队列中接收新消息的当前位置。当组中的使用者从协调器分配的分区中读取消息时,它必须提交与其已读取的消息相对应的偏移量。因此,根据我的理解,您的新消费者可以从头开始阅读,因此可以接收所有消息。您需要阅读有关Kafka分区,使用者组和偏移量的更多信息,以便更好地了解它。
  2. 我想如果您假设在短时间内消耗了100个事件,那么您就可以停止消耗新事件。因此,您将有一些时间来处理它。然后您可以恢复您的消费者。

有关Kafka消费者https://docs.confluent.io/current/clients/consumer.html

的更多信息

关于SO https://stackoverflow.com/a/32392174/574475

中的Kafka偏移也有一些好的讨论