为什么我需要轮询消息中心?

why do I need to poll message hub?

我正在查看 blue mix 上消息中心的 node-js express 示例,我很困惑为什么我需要从我的服务器轮询消息中心。我认为 pub-sub 模型背后的整个想法是我不必(过度)加载我的服务器轮询消息服务来查明是否存在新消息供我使用。在提供的示例中,app.js 文件中的第 211-213 行包含以下内容:

  // Set up an interval which will poll Message Hub for
  // new messages on the 'livechat' topic.
  produceInterval = setInterval(function() { ...},250);

这现在让我的服务器每 250 毫秒轮询一次消息中心,而我想要的是完全避免轮询模型,并在存在消息供我使用时收到消息中心的通知。

简而言之: Kafka 通过使用消费者拉动模型而不是服务器推送来实现其可伸缩性。

详细: 值得先阅读 Kafka 文档。 特别是,您的问题在这里得到回答 http://kafka.apache.org/documentation/#design_pull

HTH, 江户

对于 KafkaConsumer,poll() 函数意味着您的应用正在轮询客户端缓冲区,而不一定是通过网络轮询到 Kafka 代理。 Kafka 客户端通常会在此客户端缓冲区中预取和缓存数据,以获得更好的性能、更低的延迟和更高的网络效率。

如果你想要一个异步回调风格的接口,"pushes" 数据到你的应用程序,那么很容易包装轮询接口并使其看起来像一个推送。最终,每一次推送 API 都隐藏着一些在 tcp 套接字上调用 poll 的东西。