Apache Kafka対Apache Storm


102

Apache Kafka:分散メッセージングシステム
Apache Storm:リアルタイムメッセージ処理

イベントデータを処理するために、リアルタイムデータパイプラインで両方のテクノロジーをどのように使用できますか?

リアルタイムデータパイプラインに関しては、どちらも同じように機能しているようです。データパイプラインで両方のテクノロジをどのように使用できますか?

回答:


158

Apache Kafkaを、大量のデータを処理できる分散型の堅牢なキューとして使用し、メッセージをあるエンドポイントから別のエンドポイントに渡すことができます。

ストームはキューではありません。リアルタイム処理機能が分散されたシステムであり、リアルタイムデータに対してあらゆる種類の操作を並列で実行できます。

これらのツールの一般的なフロー(私の知っているとおり)は次のとおりです。

リアルタイムシステム->カフカ->ストーム-> NoSql-> BI(オプション)

したがって、大量のデータを処理するリアルタイムアプリがあり、それをKafkaキューに送信します。Stormはkafkaからデータをプルし、必要な操作を適用します。この時点では、通常、このデータからいくつかの利点を得たいので、追加のBI計算のためにいくつかのNosql dbに送信するか、他のシステムからこのNoSqlをクエリするだけです。


Forhasに感謝します。これは非常に役立ちます。1つの質問として、Apache Kafkaを使用してApacheログファイルを集約できますか、それともFlumeでそれを行う必要がありますか
Ananth Duari 2014

私はそのような流れに精通していませんができると思います。多分あなたはあなたのニーズのためにSplunkをチェックすることができます(単なる推測..)。
for 's

GrayLogを使用して、apache kafkaに接続することをお勧めします。GrayLogにはすでにkakfa入力プラグインがあります。
saeid rastak 2017

36

KafkaとStormの目的は少し異なります。

Kafkaは、1秒あたりの大量のメッセージを処理できる分散メッセージブローカーです。パブリッシュサブスクライブパラダイムを使用し、トピックとパーティションに依存しています。KafkaはZookeeperを使用してブローカー間で状態を共有および保存します。したがって、Kafkaは基本的に、あるマシンから別のマシンにメッセージを転送する責任があります。

ストームは、スケーラブルでフォールトトレラントなリアルタイム分析システムです(リアルタイムのHadoopのように考えてください)。ソース(スパウト)からデータを消費し、パイプライン(ボルト)に渡します。それらをトポロジで組み合わせることができます。したがって、ストームは基本的には計算ユニット(集約、機械学習)です。


しかし、それらを一緒に使用することもできます。たとえば、アプリケーションはkafkaを使用して他のサーバーにデータを送信し、ストームを使用して計算を行います。


32

これは古いスレッドであり、Apache KafkaとStormの比較は、記述された時点で有効かつ正確でしたが、バージョン0.10(2016年4月)以降、Apache Kafkaが大幅に進化していることは注目に値しますストームなどの追加のソフトウェアを必要とせずにストリーム処理機能を提供するKafka Streams API。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 Semantics and Transactionsが提供されました。

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


1
基本的に、リアルタイムシステムはエンドポイントのKafkaasと直接通信し、KafkaはDBなどにストアしますか?
problemofficer 2018年

2
はい、Kafkaには、データベースやその他のデータソース(syslog、JMS、ログファイルなど)と通信するためのKafka Connectと、ストリーム処理(結合、変換、フィルター、集計)を行うためのKafka Streams、および書き込みのためにKafka Connectに戻ることが含まれています別のデータベースまたはリポジトリに送信します。
Hans Jespersen、2018年

15

これがどのように機能するか

Kafka-リアルタイムストリームを提供する

ストーム -そのストリームでいくつかの操作を実行するには

GitHubプロジェクトhttps://github.com/abhishekgoel137/kafka-nodejs-d3jsをご覧ください

(D3jsはグラフ表現ライブラリです)

理想的なケース:

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

このリポジトリは以下に基づいています:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js

1
Abhishek、上記の回答で言及されたリンクが壊れています。リンクを更新していただけませんか?
Abhijit Gaikwad 2015年

4

誰もがApache Kafka:は継続的なメッセージングキューであることをあなたに説明するように

Apache Storm:は継続的な処理ツールです

この側面では、KafkaはAPIを使用してFB、Twitterなどの任意のWebサイトからデータを取得し、そのデータはApache Stormを使用して処理され、処理したデータを任意のデータベースに保存できます。

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

ちょうどそれに従ってくださいあなたはいくつかのアイデアを得るでしょう


3

イベントの処理を続けながら、パターンを視覚化または警告する(Twitterの傾向を考える)必要があるユースケースがある場合、いくつかのパターンがあります。
NiFiを使用すると、カスタムコーディングをほとんど行わずに、イベントを処理し、低(より)バッチ集約で永続データストアを更新できます。
ストーム(多くのカスタムコーディング)により、トレンドイベントにほぼリアルタイムでアクセスできます。
何秒も待つことができれば、kafkaからhdfs(Parquet)にバッチ処理して処理できます。
数秒で知る必要がある場合は、NiFiが必要です。おそらくStormも必要です。(竜巻警報のために私が小地域の気象条件を確認する必要がある何千もの地球ステーションを監視することを考えてください)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.