Flume原理の解析

1. はじめに

Flume は、高可用性、高信頼性の分散型大規模ログ収集、集約、送信システムです。Flume は、データを収集するためにログ システム内のさまざまなデータ送信者のカスタマイズをサポートしていますが、同時に Flume は、データを単純に処理してさまざまなデータ受信者 (カスタマイズ可能) に書き込む機能も提供します。その中で、Flume-NG は Flume のブランチであり、その目的は、大幅にシンプルで、サイズが小さく、デプロイが容易になることです。その最も基本的なアーキテクチャを次の図に示します。 Source、Channel、Sink の 3 つのモジュールで構成
ここに画像の説明を挿入
されており、Source はデータの受信を担当し、Channel はデータの送信を担当し、Sink は次のエンドへのデータの送信を担当します。

2. モジュールの説明

名前 説明する
ソース ソースは、特別なメカニズムを通じてデータを受信または生成し、データを 1 つ以上のチャネルにバッチ処理する役割を果たします。ソースには、データドリブンとポーリングの 2 種類があります。一般的なソース タイプは次のとおりです。 1. システムに統合されたソース: Syslog、Netcat。2. 自動生成イベントのソース: Exec、SEQ。3. エージェントとエージェント間の通信用の IPC ソース: Avro。4. ソースは少なくとも 1 つのチャネルに関連付けられている必要があります。
チャネル チャネルはソースとシンクの間に配置され、ソースからのデータをキャッシュするために使用されます。シンクがネクストホップ チャネルまたは最終宛先にデータを正常に送信すると、データはチャネルから削除されます。チャネルによって提供される永続レベルはチャネルのタイプに関連しており、次の 3 つのタイプがあります。 1. メモリ チャネル: 非永続。2. ファイル チャネル: WAL (Write-Ahead Logging) に基づく永続化の実装。3. JDBC チャネル: 組み込みデータベースに基づく永続化の実装。チャネルはトランザクションをサポートし、弱い順序保証を提供し、任意の数のソースおよびシンクと連携できます。
シンク シンクは次のホップまたは最終宛先にデータを送信する責任を負い、正常に完了するとチャネルからデータを削除します。一般的なシンク タイプは次のとおりです。 1. HDFS、HBase などの最終宛先端末シンクにデータを保存します。2. 自動的に消費されるシンク (Null シンクなど)。3. エージェント間通信用の IPC シンク: Avro。シンクは正確なチャネル上で動作する必要があります。

次の図に示すように、Flume は複数のソース、チャネル、およびシンクとして構成することもできます:
ここに画像の説明を挿入Flume の信頼性は、エージェント間のトランザクションの交換に基づいています。次のエージェントがダウンしても、チャネルはデータを保持でき、エージェントは回復後に送信します。Flume の可用性は、組み込みの負荷分散およびフェイルオーバー メカニズムに基づいています。チャネルとエージェントはどちらも複数のエンティティで構成でき、エンティティ間で負荷分散などの戦略を使用できます。各エージェントは JVM プロセスであり、同じサーバーに複数のエージェントを含めることができます。収集ノード (Agent1、2、3) はログの処理を担当し、集約ノード (Agent4) は HDFS への書き込みを担当し、各収集ノードのエージェントは複数の集約ノードを選択して負荷分散を実現できます。
ここに画像の説明を挿入
Flume のアーキテクチャと詳細な原理については、https: //flume.apache.org/releases/1.9.0.htmlを参照してください。

3. 水路の原理

エージェント間の信頼性
エージェント間のデータ交換の流れを以下の図に示します。
ここに画像の説明を挿入

  1. Flume はデータ送信の信頼性を確保するためにトランザクションベースの方式を採用しており、あるエージェントから別のエージェントにデータが流れるとき、すでに 2 つのトランザクションが有効になり始めています。エージェントを送信するシンクは、まずチャネルからメッセージを取得し、そのメッセージを別のエージェントに送信します。メッセージを受信するエージェントがメッセージを正常に受け入れて処理すると、送信側エージェントはトランザクションを送信し、データ送信が正常かつ確実に完了したことを示します。

  2. 受信側エージェントは、送信側エージェントによって送信されたメッセージを受信すると、新しいトランザクションを開始します。データが正常に処理される (チャネルに書き込まれる) と、受信側エージェントはトランザクションを送信し、成功応答を送信側エージェントに送信します。

  3. あるコミット(commit)までにデータ送信に失敗すると、最後のトランザクションが再度開始され、前回送信に失敗したデータが再送信されます。コミット操作によってすでにトランザクションがディスクに書き込まれているため、プロセスが失敗して終了し、ビジネスを再開した後でも、最後のトランザクションを継続できます。

4. Flume と HDFS の関係

ユーザーが HDFS を Flume のシンクとして構成すると、HDFS は Flume の最終データ ストレージ システムとして機能し、Flume は構成に従って送信されたすべてのデータを HDFS に書き込みます。

5. Flume と HBase の関係

ユーザーが HBase を Flume のシンクとして構成すると、HBase は Flume の最終データ ストレージ システムとして機能し、Flume は構成に従って送信されたすべてのデータを HBase に書き込みます。

おすすめ

転載: blog.csdn.net/weixin_43114209/article/details/132180480