目指すjavaのpipeまたはBufferedReaderはデータを失う可能性がありますか?
はS3上のApacheサーバとストアからすべてのログを読むには
背景
我々はhttpd.conf
ErrorLog "| /usr/bin/tee -a /var/log/httpd/error_log | /usr/bin/java -cp /usr/local/bin/CustomProducer/producer-1.0-SNAPSHOT-jar-with-dependencies.jar stdin.producer.StdInProducer /usr/local/bin/CustomProducer/Config.json >> /var/log/producer_init.log 2>&1"
このプット内のステートメント次ていますログインはerror_log
ファイルとApache kafkaのJavaプロデューサが消費するstd out
このプロデューサは、最終的にkafkaクラスタに、次にamazon S3にデータを送信します。
error_log
ファイルを回転させ、その後もlogrotate
プロデューサーコード
this.stdinReader = new BufferedReader(new InputStreamReader(System.in));
try {
while ((msg = this.stdinReader.readLine()) != null) {
//Some processing which may introduce some delay
//Send message to cluster
this.producer.send(message);
}
}
問題時間ごとにログがカフカバケットとlogrotateのバケットから比較され
を使用してS3に保存されます特定のパターンや時間がないと断続的に失われるログがあります。
pipe
制限またはBufferedReader
制限のためですか?これを見つける方法は何ですか?
ちょっとしたアイデア。通常のlinuxパイプの場合、最も遅いパイプ消費者は通常、プロデューサの出力をブロックします。これは、Apacheロギングサブシステム全体および/またはErrorLogディレクティブの場合には当てはまりません。 – Osw