我一直在阅读很多文章,其中解释了从Apache Flume或Apache Kafka摄取数据的Apache Storm实现。在阅读了几篇文章之后,我的主要问题仍然没有答案。使用Apache Kafka或Apache Flume的主要好处是什么?为什么不直接从源收集数据到Apache Storm?
为了理解这一点,我研究了这些框架。如果我错了,请纠正我。
Apache Flume是关于从源收集数据并将数据推送到接收器。接收器就是Apache Storm。
Apache Kafka是关于从源收集数据并将它们存储在消息队列中,直到Apache Storm处理它。
答案 0 :(得分:4)
我假设您正在处理连续计算算法或实时分析的用例。
如果您不使用Kafka或任何消息队列,请参阅以下内容:
(1) You will have to implement functionality like consistency of data.
(2) You are ready to implement replication on your own
(3) You are ready to tackle a variety of failures and ready to build a fault tolerant system.
(4) You will need to create a good design so that your producer and consumer are completely decoupled.
(5) You will have to implement persistence. What happens if your consumer fails?
(6) What happens to fault resilience? Do you want to take the entire system down when your consumer fails?
(7) You will have to implement delivery guarantees as well as ordering guarantees.
以上所有都是消息队列(Kafka等)的固有特征,你当然不想在这里重新发明轮子。
答案 1 :(得分:1)
我认为具有不同配置的原因可能是如何获得源数据。 Storm spouts(Storm拓扑中的第一个元素)意味着同步轮询数据,而Flume代理(agent = source + channel + sink)意味着异步从源头接收数据。因此,如果您有一个通知某些事件的系统,则需要Flume代理;那么这个代理将负责接收数据并放入任何队列管理系统(ActiveMQ,RabbitMQ ......)以便由Storm承担。这同样适用于卡夫卡。