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/