1

Flume を使用してアクセス ログを Spark クラスターに送信しようとしています。しかし、ログ ファイルを読み取るためにカスタム アプリケーション (または Flume ソース) を作成しなければならないという制限がたくさんあります。

私がやろうとしているのは、データをシンクに書き込めない場合に備えて、Flume クライアントにこのソースを通知させることです。ネットワークが常に長時間停止しており、ネットワークが復旧するまで、ディスク上の失敗したログをキューに入れるための十分なディスク領域がないためです。代わりに、ネットワークが起動するまでログの読み取りを停止するようにソースに「指示」し、次に再開するように「指示」したいと思います。しかし、これまでのところ、ドキュメントのエラーに関するコールバックは見たことがありません。

車輪を再発明せずにそのようなシナリオを達成できる方法はありますか?

4

1 に答える 1

0

さて、いくつかの質問を明確にしたので、実際に何が起こるかを次に示します。

Flume Source - SpoolDir or similar -> Channel -> AvroSink (SparkStreaming)

Flume はファイルを解析し、そのファイルの行を FlumeEvents に変換します。FlumeEvents は Channel にスプールされます。これは、少なくともチャネルがいっぱいになるまで、可能な限り迅速に行われます。チャネルがいっぱいの場合、チャネルが再びレコードを受け入れるまで、ソースはバックオフします。チャネルが保持できるメモリとレコードの量を指定することにより、チャネルの容量を制御できます。

チャネルは AvroSink によって読み取られます。ネットワークの停止が原因で AvroSink がイベントを送信できない場合、チャネルからの消費が停止するため、チャネルがいっぱいになります。

その時点で、Flume のログ ファイルに、チャネルが (信頼できない) シンクのバック バッファーとして機能するため、シンクがソースに追いつかないことを示すメッセージが表示されます。これは予想される動作です。イベントの処理が重複することはありませんが、MemoryChannel などの持続性のないチャネル タイプを選択すると、一部のイベントが失われて停止する可能性があります。

于 2015-09-08T16:29:24.337 に答える