目标
从apache服务器读取所有日志并存储在s3上
背景
我们有以下声明
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
文件以及std输出,供apachekafka的java生产者使用
这个生产者最终将数据发送到kafka集群,然后发送到amazons3。
这个 error_log
文件得到旋转,然后还存储在s3使用 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);
}
}
问题
当比较kafka桶和logrotate桶的每小时日志时,有些日志会断断续续地丢失,没有特定的模式或时间。
可能是因为 pipe
限制或 BufferedReader
限制?怎样才能找到答案?
1条答案
按热度按时间ztigrdn81#
不,一点也不。这个
Reader
与下面的管道或插座一样可靠。如果它是tcp,它不能在不重置连接的情况下丢失数据。