要求是:多个服务使用数据流产生大量请求(每个请求1-10兆字节),并且有几个消费者以原子方式处理这些请求。
因此请求数据无法拆分。关键要求是,如果某个消费者无法处理请求 - 此请求必须重新注入到队列中并发送给不同的消费者。处理单个请求可能需要几十分钟。消费者可能在处理过程中“死亡”,因此需要进行某种任务监控。
到目前为止我考虑过
但它们似乎都不符合我的要求。有什么建议吗?
答案 0 :(得分:2)
我不能说为activemq,但在kafka和风暴之间我会选择风暴。目前尚不清楚无法处理请求是什么意思,但如果风暴工作者完全失败(即不响应心跳),Storm master(nimbus)可能会将任务从死亡工作者重新分配给另一个人(也许,在不同的机器上)。
另见Understanding the parallelism of a Storm topology
Kafka是一个死去的简单消息经纪人,如果没有一些高级别的协调,它就无法做你已经开箱即用的事情。
答案 1 :(得分:2)
关于您的要求(每个请求大约1 MB,处理> 10分钟)......是否还在发送消息?
我只是把它放在一个数据库(RDBMS)中。如果轮询不可接受,我会考虑数据库中的触发器/存储过程。用Scala编写的存储过程在Oracle和PostgreSql中完美运行。