設計一條完整離線etl線路

ETL:抽取(extract)、轉換(transform)、加載(load)

下面是etl 數據流:

    藍色的框框代表的是數據來源,紅色的框框主要是數據計算平臺,綠色的 HDFS 是我們一種主要的數據存儲,Hive、Hbase、ES這些就不再列出來了。

我們常說的數據流主要分兩種:1離線數據 2.實時數據

         其中離線數據一般都是 T+1 的模式,即每天的凌晨開始處理前一天的數據,有時候可能也是小時級的,技術方案的話可以用 Sqoop、Flume、MR 這些。實時數據一般就是指實時接入的數據,一般是分鐘級別以下的數據,常用的技術方案有 Spark Streaming 和 Flink。

場景舉例:

場景一:

  1. 數據源主要爲 Mysql,希望實時同步 Mysql 數據到大數據集羣中(肯定是越快越好)。
  2. 目前每日 20 億數據,可遇見的一段時間後的規模是 100 億每日以上。
  3. 能快速地查到最新的數據,這裏包含兩部分含義:從 Mysql 到大數據集羣的速度快、從大數據集羣中查詢的速度要快。

我們最終選定一下方案:

注意:

  1. 小文件,分鐘級別的文件落地,肯定會有小文件的問題,這裏要考慮的是,小文件的處理儘量不要和數據接入流程耦合太重,可以考慮每天、每週、甚至每月合併一次小文件。
  2. 數據流的邏輯複雜度問題,比如從 Kafka 落地 HDFS 會有一個取捨的考慮,比如說,我可以在一個 SS 程序中就分別落地 HDFS 和 ES,但是這樣的話兩條流就會有大的耦合,如果 ES 集羣卡住,HDFS 的落地也會受到影響。但是如果兩個隔開的話,就會重複消費同一份數據兩次,會有一定網絡和計算資源的浪費。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章