109

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

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

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

4

7 回答 7

173

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

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

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

实时系统 --> Kafka --> Storm --> NoSql --> BI(可选)

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

于 2014-02-16T07:53:08.510 回答
42

Kafka 和 Storm 的目的略有不同:

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

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


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

于 2015-01-26T07:48:14.487 回答
40

我知道这是一个较旧的线程,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 语义和事务。

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

于 2017-08-19T19:29:05.693 回答
16

这就是它的工作原理

Kafka - 提供实时流

Storm - 对该流执行一些操作

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

(D3js 是一个图形表示库)

理想情况:

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

该存储库基于:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js
于 2015-01-30T18:24:39.413 回答
4

正如每个人向您解释的那样,Apache Kafka:是连续消息队列

Apache Storm:是持续处理工具

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

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

跟着它,你会有所了解

于 2015-12-31T07:22:58.810 回答
3

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

于 2018-05-07T05:51:54.397 回答
0

只需Kafka将消息从节点发送到另一个节点,然后Storm处理这些消息。查看此示例,了解如何将 Apache Kafka 与 Storm 集成

于 2020-01-20T08:45:54.550 回答