Apache Kafka与Apache Storm比较

112

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

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

就实时数据管道而言,它们似乎可以完成相同的工作。那么我们如何在数据管道中同时使用这两种技术呢?

7个回答

183
你可以使用Apache Kafka作为分布式和强大的队列,可以处理高容量数据,并使您能够在不同端点之间传递消息。
Storm不是一个队列。它是一个具有分布式实时处理能力的系统,这意味着您可以并行地对实时数据执行各种操作。
这些工具的常见流程(据我所知)如下:
实时系统-->Kafka-->Storm-->NoSql-->BI(可选)
因此,您的实时应用程序处理高容量数据,将其发送到Kafka队列。Storm从kafka中提取数据并应用一些必需的操作。此时,您通常希望从这些数据中获得一些好处,因此您可以将其发送到某些Nosql数据库进行附加的BI计算,或者您可以从任何其他系统查询此NoSql。

谢谢Forhas,这非常有帮助。我想问一下,我们可不可以使用Apache Kafka来聚合Apache日志文件,或者我们仍然需要使用Flume来完成这个任务? - Ananth Duari
我猜你可以,虽然我不太熟悉这样的流程。也许你可以检查一下Splunk是否符合你的需求(只是猜测。。)。 - forhas
我建议使用GrayLog并将其连接到apache kafka。 GrayLog已经有了kakfa输入插件。 - saeid rastak

44
我知道这是一个较早的帖子,当时对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/


1
基本上现在实时系统直接与Kafka通信作为终点,而Kafka将数据存储到数据库中? - problemofficer - n.f. Monica
2
现在Kafka包括Kafka Connect,可以与数据库和其他数据源(syslog、JMS、日志文件等)进行通信,并使用Kafka Streams进行流处理(连接、转换、过滤、聚合),然后再返回到Kafka Connect将其写入另一个数据库或存储库。 - Hans Jespersen
根据这个答案:https://stackoverflow.com/a/53357878/453673,Kafka Streams 显然不如 Storm 好。 - Nav

43

Kafka和Storm有稍微不同的目的:

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

Storm是一个可扩展的、容错的、实时分析系统(类似于实时的Hadoop)。它从数据源(Spouts)中消费数据,并将其传递给管道(Bolts)。你可以将它们组合在拓扑结构中。因此,Storm基本上是一个计算单元(聚合、机器学习)。


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


17

这是它的工作原理

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

2
Abhishek,上面回答中提到的链接已经失效了。你能否更新一下链接? - Abhijit Gaikwad

5

正如其他人所解释的那样,Apache Kafka是一个持续的消息队列。

Apache Storm是一种持续处理工具。

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

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

只要按照它的指示,你就会有一些想法。


3
当我有一个使用案例需要我可视化或警报模式(想想Twitter趋势),同时继续处理事件时,我有几种方案。
NiFi可以让我处理事件并使用非常少的自定义编码低批次聚合更新持久数据存储。
Storm(需要很多自定义编码)允许我几乎实时访问趋势事件。
如果我可以等待几秒钟,那么我可以从kafka批量到hdfs(Parquet)并进行处理。
如果我需要在几秒钟内得知情况,我需要NiFi,甚至可能是Storm。(想象一下监视数千个地球站,我需要看到龙卷风警报的小区域天气状况。)

0

简单来说,Kafka将消息从一个节点发送到另一个节点,而Storm则处理这些消息。查看此示例,了解如何将Apache Kafka与Storm集成


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接