Apache Kafka:分散メッセージングシステム
Apache Storm:リアルタイムメッセージ処理
イベントデータを処理するためのリアルタイムデータパイプラインで両方のテクノロジーを使用するにはどうすればよいですか?
リアルタイムデータパイプラインに関しては、どちらも同じ仕事をしているように思えます。データパイプラインで両方のテクノロジーを使用するにはどうすればよいですか?
Apache Kafkaは、大量のデータを処理でき、あるエンドポイントから別のエンドポイントにメッセージを渡すことができる分散された堅牢なキューとして使用します。
ストームはキューではありません。これは、リアルタイム処理機能を分散したシステムです。つまり、リアルタイムデータに対してあらゆる種類の操作を並行して実行できます。
これらのツールの一般的なフロー(私が知っているように)は次のようになります。
リアルタイムシステム-> Kafka-> Storm-> NoSql-> BI(オプション)
したがって、大量のデータを処理するリアルタイムアプリがあり、Kafkaキューに送信します。 Stormはkafkaからデータを取得し、必要な操作を適用します。この時点で、通常、このデータからいくつかの利点を得たいので、追加のBI計算のためにNosqlデータベースに送信するか、単に他のシステムからこのNoSqlを照会することができます。
KafkaとStormの目的は少し異なります。
Kafkaは、1秒間に大量のメッセージを処理できる分散メッセージブローカーです。パブリッシュ/サブスクライブのパラダイムを使用し、トピックとパーティションに依存しています。 KafkaはZookeeperを使用して、ブローカー間で状態を共有および保存します。したがって、Kafkaは基本的に、あるマシンから別のマシンにメッセージを転送する役割を果たします。
Stormは、スケーラブルで耐障害性のあるリアルタイム分析システムです(リアルタイムのHadoopのように考えてください)。ソース(スパウト)からデータを消費し、パイプライン(ボルト)に渡します。それらをトポロジーで組み合わせることができます。したがって、Stormは基本的に計算単位(集計、機械学習)です。
ただし、これらを一緒に使用することもできます。たとえば、アプリケーションでkafkaを使用して、ストームを使用して計算を行う他のサーバーにデータを送信します。
これは古いスレッドであり、Apache KafkaとStormの比較はそれらが書かれた時点で有効かつ正しいことを知っていますが、Apache Kafkaはバージョン0.10(2016年4月)以降、Kafkaには、Stormなどの追加ソフトウェアを必要とせずにストリーム処理機能を提供する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セマンティクスとトランザクションを提供しました。
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などのWebサイトからデータを取得し、そのデータはApache Stormを使用して処理され、処理したデータを任意のデータベースに保存できます。
https://github.com/miguno/kafka-storm-starter
それに従うだけで、あなたはいくつかのアイデアを得るでしょう
イベントの処理を続けながら、パターンを視覚化またはアラートする必要があるユースケースがある場合(Twitterのトレンドを考えてください)、いくつかのパターンがあります。
NiFiを使用すると、イベントを処理し、永続的なデータストアを、非常に少ないカスタムコーディングで、低い(より少ない)バッチ集約で更新できます。
Storm(多くのカスタムコーディング)により、トレンドのイベントにほぼリアルタイムでアクセスできます。
何秒も待てば、カフカからバッチ処理してhdfs(Parquet)に入れて処理できます。
数秒で知る必要がある場合、NiFiが必要です。Stormも必要です。 (竜巻警報のために小地域の気象条件を見る必要がある数千の地球局を監視することを考えてください)。