我正在努力为这项工作找到合适的工具。我已经探索了一些不同的消息队列,如Kafka,Kestrel等......我正在寻找具有PULL功能的东西。
我有一个API(分布式)将传入的消息推送到队列中。然后我会有工作人员(单独的机器)从队列中提取消息。这可以确保工作人员不会被洪水淹没,也无法处理队列的负载。
我想知道Kafka或Kestrel是否支持此类功能
答案 0 :(得分:7)
Kafka确实在push-pull基础上工作,能够处理大规模的实时流。另外正如他们的文档中所提到的那样 Kafka的性能在数据大小方面实际上是恒定的,因此保留大量数据不会成为问题。
用于处理流结帐Storm。它是免费的,容错的,分布式的实时计算系统,非常容易扩展。它完成了你所提到的(在不同的机器上运行工作人员)。它还支持transactional拓扑。最重要的是它与Apache Kafka有很好的集成。
有关风暴检查的更多信息here
通常,您可以使用其消费API从Kafka队列中检索消息,然后将其提供给风暴群集,以分布式方式完成其余工作。 Kafka 0.8提供了两种类型的API,
High Level or consumer group
Low level or Simple consumer API
前者为消费数据提供了高级抽象,并负责处理诸如线程,错误处理等许多事情,而后者允许更多地控制消息处理,如多次读取消息,消息事务等。
答案 1 :(得分:2)
您所要求的正是Kafka的设计选择。请参阅Push vs. Pull
上的Kafka文档