4

我正在努力为这项工作找到合适的工具。我已经探索了一些不同的消息队列,例如 Kafka、Kestrel 等……并且我正在寻找具有 PULL 功能的东西。

我有一个将传入消息推入队列的 API(分布式)。然后我会让工作人员(单独的机器)从队列中提取消息。这确保了工作人员不会被淹没并且无法处理队列的负载。

我想知道 Kafka 或 Kestrel 是否支持这种类型的功能

4

2 回答 2

8

Kafka 确实在推拉基础上工作,并且能够处理大规模实时流。正如他们的文档中提到的,Kafka 的性能在数据大小方面实际上是恒定的,因此保留大量数据不会成为问题。

用于处理流 Checkout Storm。它是免费的、容错的、分布式的实时计算系统,而且很容易扩展。它完全符合您所提到的(在不同的机器上运行工人)。它还支持事务拓扑。最重要的是,它与 Apache Kafka 有很好的集成。

有关风暴的更多信息,请点击此处

所以通常你可以做的是使用他们的消费 API 从 Kafka 队列中检索消息,然后将其提供给一个风暴集群,以分布式方式完成其余的工作。Kafka 0.8 提供了 2 种 API,

  • High Level or consumer group
  • Low level or Simple consumer API

前者为消费数据提供了高级抽象,并处理了很多事情,如线程、错误处理,而后者允许对消息处理进行更大的控制,如多次读取消息、消息事务等。

高级消费者 API 示例

简单的消费者示例

于 2013-08-29T14:46:17.197 回答
2

您所要求的正是为 Kafka 做出的设计选择。请参阅有关Push 与 Pull的 Kafka 文档

于 2013-08-29T07:27:15.797 回答