天天看點

flume + spark-streaming + kafka + hdfs 實時解析日志的一種方式

記錄前段時間寫的一個實時解析日志應用,本次采用flume對接日志,進入kafka,spark-streaming實時消費kafka裡面的資料,然後結果持久化儲存在hdfs裡面。

1、資料采集

    資料采集使用的是flume,在這個地方flume采集到日志之後,将會在hdfs儲存一份原始日志,同時将日志實時寫入kafka的指定topic(例如stream_topic_1)。

2、資料解析

    資料解析分為兩個部分,将會啟動兩個流:

        第一個流用來消費kafka裡面的原始日志(stream_topic_1),通過正則解析,将結果寫入kafka(dataset_stream_topic_1)。

消費kafka裡面的原始日志,應該從最新的日志開始消費,也就是"auto.offset.reset" -> "latest",以免總是在消費曆史資料,沒法達到實時性。

        第二個流消費解析之後的日志(dataset_stream_topic_1)然後寫入snappy檔案。生成的snapp的檔案名,要帶有相應日志的時間字段。例如:20180508100000_8d6245f0be124fdbaa5ae4e6014aa6ec.snappy。注意:在寫完snappy檔案的close之後,應該将檔案路徑修改一下,避免後面合并檔案的時候造成讀寫混亂。

        最後在啟動一個定時任務,将第二個流生成的snappy檔案合并成parquet檔案。每次啟動任務的時候,将所有未合并的snappy檔案(此時所有讀到的snappy檔案都已經關閉了),按照時間進行group,将同一個時間段的日志一次性寫進同一個parquet檔案。然後關閉parquet檔案。

        如果系統裡面還要加上其他的資料導出功能,可以直接再起一個流,消費解析之後的資料kafka(dataset_stream_topic_1)

繼續閱讀