Apache Kafka vs Apache Storm

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

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

就实时数据pipe道而言,我认为这两项工作完全相同。 我们如何在数据pipe道上使用这两种技术?

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

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

这些工具的常见stream程(据我所知)如下:

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

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

卡夫卡和风暴有一个略有不同的目的:

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

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


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

这是如何工作的

卡夫卡 – 提供实时stream

风暴 – 在该stream上执行一些操作

你可以看看GitHub项目https://github.com/d3/d3

(D3js是一个graphics表示库)

理想情况下:

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

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

我知道这是一个较老的线程,Apache Kafka和Storm之间的比较在编写时是有效和正确的,但值得注意的是,Apache Kafka多年来发展很快,自从0.10版本(2016年4月)以来,Kafka已经包含一个Kafka Streams API,它提供stream处理能力,而不需要任何额外的软件,如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中,stream处理function被进一步扩展,以提供一次完成的语义和事务。

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

Interesting Posts