Apache Kafka与Apache Storm

时间:2014-02-16 07:31:08

标签: apache-storm apache-kafka data-integration

Apache Kafka:分布式消息传递系统
Apache Storm:实时消息处理

我们如何在实时数据管道中使用这两种技术来处理事件数据?

就实时数据管道而言,在我看来,两者都是相同的。我们如何在数据管道上使用这两种技术?

6 个答案:

答案 0 :(得分:148)

您使用Apache Kafka作为分布式且健壮的队列,可以处理大量数据,并使您能够将消息从一个端点传递到另一个端点。

Storm不是队列。它是一个具有分布式实时处理能力的系统,这意味着您可以并行地对实时数据执行各种操作。

这些工具的共同流程(据我所知)如下:

实时系统 - >卡夫卡 - >风暴 - > NoSql - > BI(可选)

因此,您有实时应用处理大量数据,将其发送到Kafka队列。 Storm从kafka中提取数据并应用一些必要的操作。此时,您通常希望从这些数据中获得一些好处,因此您可以将其发送到某些Nosql数据库以进行其他BI计算,或者您只需从任何其他系统查询此NoSql。

答案 1 :(得分:33)

Kafka和Storm的目的略有不同:

Kafka 是一个分布式消息代理,可以每秒处理大量消息。它使用发布 - 订阅范例并依赖于主题和分区。 Kafka使用Zookeeper在经纪人之间共享和保存状态。因此,Kafka基本上负责将消息从一台机器传输到另一台机器。

Storm 是一个可扩展的,容错的实时分析系统(实时像Hadoop一样)。它消耗来自源(Spouts)的数据并将其传递给管道(螺栓)。您可以在拓扑中组合它们。所以Storm基本上是一个计算单元(聚合,机器学习)。


但是你可以一起使用它们:例如你的应用程序使用kafka将数据发送到使用storm来对其进行计算的其他服务器。

答案 2 :(得分:23)

我知道这是一个较老的线程,Apache Kafka和Storm的比较在编写时是有效和正确的,但值得注意的是Apache Kafka多年来已经发展了很多,自版本0.10(2016年4月)以来Kafka包含了一个Kafka Streams API,它提供了流处理功能,无需任何其他软件,如Storm。 Kafka还包括Connect API,用于连接数据的各种源和接收器(目标)。

公告博客 - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

当前的Apache文档 - https://kafka.apache.org/documentation/streams/

在0.11 Kafka中,流处理功能进一步扩展,以提供Exactly Once Semantics和Transactions。

https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/

答案 3 :(得分:15)

这就是它的工作原理

Kafka - 提供实时流

风暴 - 在该流上执行某些操作

您可以查看GitHub项目https://github.com/abhishekgoel137/kafka-nodejs-d3js

(D3js是图表表示库)

理想情况:

Realtime application -> Kafka -> Storm -> NoSQL -> d3js

此存储库基于:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js

答案 4 :(得分:4)

每个人都向你解释 Apache Kafka:是连续消息传递队列

Apache Storm:是连续处理工具

在这方面,Kafka将使用API​​从任何网站(如FB,Twitter)获取数据,并使用Apache Storm处理数据,您可以将处理后的数据存储在任何您喜欢的数据库中。

https://github.com/miguno/kafka-storm-starter

按照它,你会得到一些想法

答案 5 :(得分:2)

当我有一个用例需要我对模式进行可视化或提醒时(想想推特趋势),在继续处理事件的同时,我有几种模式。
NiFi允许我处理事件并使用低(呃)批量聚合更新持久数据存储,并且只需很少的自定义编码。
Storm(许多自定义编码)让我几乎可以实时访问趋势事件 如果我可以等待很多秒钟,那么我可以批出kafka,进入hdfs(Parquet)并处理。
如果我需要在几秒钟内知道,我需要NiFi,甚至可能是Storm。 (想想监控数千个地球站,我需要看到龙卷风警告的小区域天气条件)。