【发布时间】:2014-03-15 12:51:46
【问题描述】:
Apache Kafka:分布式消息传递系统
Apache Storm:实时消息处理
我们如何在实时数据管道中使用这两种技术来处理事件数据?
在实时数据管道方面,在我看来两者的工作相同。我们如何在数据管道上同时使用这两种技术?
【问题讨论】:
标签: apache-storm apache-kafka data-integration
Apache Kafka:分布式消息传递系统
Apache Storm:实时消息处理
我们如何在实时数据管道中使用这两种技术来处理事件数据?
在实时数据管道方面,在我看来两者的工作相同。我们如何在数据管道上同时使用这两种技术?
【问题讨论】:
标签: apache-storm apache-kafka data-integration
您将 Apache Kafka 用作一个分布式且强大的队列,可以处理大量数据,并使您能够将消息从一个端点传递到另一个端点。
Storm 不是队列。它是一个具有分布式实时处理能力的系统,这意味着您可以对实时数据并行执行各种操作。
这些工具的通用流程(据我所知)如下:
实时系统 --> Kafka --> Storm --> NoSql --> BI(可选)
因此,您的实时应用程序可以处理大量数据,并将其发送到 Kafka 队列。 Storm 从 kafka 中提取数据并应用一些必要的操作。此时您通常希望从这些数据中获得一些好处,因此您可以将其发送到某个 Nosql 数据库以进行额外的 BI 计算,或者您可以简单地从任何其他系统查询该 NoSql。
【讨论】:
Kafka 和 Storm 的目的略有不同:
Kafka 是一个分布式消息代理,每秒可以处理大量消息。它使用发布-订阅范式并依赖于主题和分区。 Kafka 使用 Zookeeper 在代理之间共享和保存状态。所以Kafka基本上负责将消息从一台机器传输到另一台机器。
Storm 是一个可扩展、容错的实时分析系统(像 Hadoop 一样实时思考)。它使用来自源(Spouts)的数据并将其传递给管道(Bolts)。您可以在拓扑中组合它们。所以 Storm 基本上是一个计算单元(聚合、机器学习)。
但是您可以一起使用它们:例如,您的应用程序使用 kafka 将数据发送到其他服务器,这些服务器使用 Storm 对其进行一些计算。
【讨论】:
我知道这是一个较旧的线程,并且 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/
【讨论】:
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
【讨论】:
正如每个人都向您解释的那样 Apache Kafka:是连续消息队列
Apache Storm:是连续处理工具
在这方面,Kafka 将使用 API 从任何网站(如 FB、Twitter)获取数据,并使用 Apache Storm 处理该数据,您可以将处理后的数据存储在您喜欢的任何数据库中。
https://github.com/miguno/kafka-storm-starter
只要跟着它,你就会有一些想法
【讨论】:
当我有一个用例需要我对模式进行可视化或提醒时(想想推特趋势),同时继续处理事件,我有几个模式。
NiFi 将允许我使用非常非常少的自定义编码来处理事件并更新具有低(er)批量聚合的持久数据存储。
Storm(大量自定义编码)让我几乎可以实时访问趋势事件。
如果我可以等待几秒钟,那么我可以从 kafka 中批量处理,进入 hdfs (Parquet) 并进行处理。
如果我需要在几秒钟内知道,我需要 NiFi,甚至可能需要 Storm。 (考虑监控数千个地球站,我需要查看小区域的天气状况以发出龙卷风警告)。
【讨论】:
只需 Kafka 将消息从节点发送到另一个节点,然后 Storm 处理这些消息。查看此示例,了解如何Integration Apache Kafka With Storm
【讨论】: