flink實戰-基本概念

  1. 基本概念
    在這裏插入圖片描述

flink程序執行時包含兩個主要的進程,master和worker。主要分爲:Job Client 、JobManager、TaskManager.

job manager

master進程是job manager,協調和管理着程序的執行,主要職責:調度任務、管理checkpoints、故障恢復等

job manager包含如下組件:

  • Actor system

  • Scheduler

  • Check pointing

scheduler

flink的執行者叫做 task slots,每個taskmanger需要管理一個或者多個 task slots

Check pointing

check pointing 是flink實現一致性容錯方案的支撐。它維持了分發的數據流和執行者狀態的一致性快照。在出錯的時,flink停止執行者、重置它們並且從最新可用的checkpoint開始執行。

stream barriers 是flink快照的核心元素:
在這裏插入圖片描述

Task Manager

task manager是工作節點(worker nodes),負責任務在JVM中的一個或者多個線程下執行。任務執行的並行度(parallelism)由每個task manager中可用的task slots決定。每個任務代表了分配給task slot的一系列的資源。例如一個task manager有四個slots,,然後它將分配給每個task slot 25%的內存。一個task slot裏可能會有一個或者多個線程運行。在相同slot裏的線程分享相同的虛擬機。在相同jvm裏的tasks分享了tcp 連接和心跳信息:
在這裏插入圖片描述

job client

job client 不是flink程序內部的部分,但是是執行的開始節點,job client職責是從用戶那裏接受程序,然後創建一個數據流,把數據流提交給job manager 以備將來執行,一旦任務執行完成,jobclient 提供一個結果給用戶。

例如下邊編寫一個簡單的word count 程序:

val text = enc.readTextFile("input.txt"); //source
val count = text.flatMap(_.toLowerCase.split("\\W+") filter (_.nonEmpty).map{(_,1)}
            .groupBy(0)
             .sum(1)          //Transformation
  
  counts.writeAsCsv("output.txt","\n"," ")  //Sink
               

如果一個客戶端接受了用戶提交的程序,他將轉換成一個data flow,data flow 看起來如下:
在這裏插入圖片描述
Flink數據流默認是並行分佈的。 對於並行數據處理,Flink分割運算符和流。 操作員分區被稱爲子任務。 流可以以一對一或重新分佈的方式分發數據。

數據直接從源流向map運算符,因爲不需要混洗數據。 但是對於GroupBy操作,Flink可能需要通過keys重新分配數據才能獲得正確的結果:
在這裏插入圖片描述
以上基本展示了flink的基本架構和執行模塊兒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章