0

イベントを保存するためにflumeとS3を使用しています。HDFS シンクが次のファイルにロールするか、flume が正常にシャットダウンされる場合にのみ、イベントが S3 に転送されることを認識しました。

私の考えでは、これは潜在的なデータ損失につながる可能性があります. Flume のドキュメントには次のように書かれています。

...Flume はトランザクション アプローチを使用して、イベントの信頼できる配信を保証します...

ここに私の設定:

agent.sinks.defaultSink.type = HDFSEventSink
agent.sinks.defaultSink.hdfs.fileType = DataStream
agent.sinks.defaultSink.channel = fileChannel
agent.sinks.defaultSink.serializer = avro_event
agent.sinks.defaultSink.serializer.compressionCodec = snappy
agent.sinks.defaultSink.hdfs.path = s3n://testS3Bucket/%Y/%m/%d
agent.sinks.defaultSink.hdfs.filePrefix = events
agent.sinks.defaultSink.hdfs.rollInterval = 3600
agent.sinks.defaultSink.hdfs.rollCount = 0
agent.sinks.defaultSink.hdfs.rollSize = 262144000
agent.sinks.defaultSink.hdfs.batchSize = 10000
agent.sinks.defaultSink.hdfs.useLocalTimeStamp = true

#### CHANNELS ####

agent.channels.fileChannel.type = file
agent.channels.fileChannel.capacity = 1000000
agent.channels.fileChannel.transactionCapacity = 10000

何か間違ったことをしただけだと思いますが、何かアイデアはありますか?

4

1 に答える 1

0

いくつかの調査の結果、S3 と Flume および HDFS Sink を使用する主な問題の 1 つが見つかりました。

プレーン HDFS と S3 実装の主な違いの 1 つは、S3 が名前の変更を直接サポートしていないことです。S3 でファイルの名前が変更されると、ファイルは新しい名前にコピーされ、古いファイルは削除されます。(参照: Amazon S3 でファイルとフォルダーの名前を変更する方法は? )

ファイルがいっぱいでない場合、Flume はデフォルトでファイルを .tmp で拡張します。ローテーション後、ファイルの名前は最終的なファイル名に変更されます。HDFS ではこれは問題になりませんが、S3 ではこの問題に従って問題が発生する可能性があります: https://issues.apache.org/jira/browse/FLUME-2445

HDFS シンク シームを使用した S3 は 100% 信頼できるわけではないため、すべてのファイルをローカルに保存し、完成したファイルを aws ツール s3 sync ( http://docs.aws.amazon.com/cli/latest ) で同期/削除するより安全な方法を好みます。 /reference/s3/sync.html )

最悪の場合、ファイルが同期されていないか、ローカル ディスクがいっぱいですが、監視システムを使用することで、どちらの問題も簡単に解決できます。

于 2016-08-09T12:01:03.087 に答える