文章目錄
- 引言
- Flink基本概述
- 傳統數據架構的不足
- Dataflow中的幾大基本概念
- Dataflow流式處理宏觀流程
- 數據并行和任務并行的區別
- Flink中幾種數據傳播策略
- Flink中事件的延遲和吞吐
- 事件延遲
- 事件的吞吐
- 如何更好的理解事件的延遲和吞吐
- flink數據流的幾種操作
- 輸入輸出
- 轉換操作
- 滾動聚合
- 窗口操作
- Flink中的時間語義
- 事件時間和處理時間
- Flink水位線
- Flink中的一致性問題
- 利用狀態保證一致性
- 任務保證和結果保障的概念
- 小結
- 參考
引言
本文初步針對flink中幾個核心的概念和使用的注意事項進行簡單的介紹,讓讀者針對flin中一些核心的組件使用有一個初步的了解。
Flink基本概述
傳統數據架構的不足
因為特殊需要我們針對采集的數據等進行數據樣本分析,所以大部分企業都會在傳統事務型的OLTP
數據庫補充一套OLAP
同步數據。
好在如今有了各種分析型的數據倉庫可以做到這一點,但因為如今的微服務架構使得各個應用都遵循專注做好一件事
的哲學。這是的事務型數據庫數據分布在不同的系統上,所以我們就需要一款實時采集數據流數據處理應用,將這些相互隔離的數據庫數據聯合并采集到分析型數據倉庫上。
而上述這個同步的過程,也就是我們常說的ETL即提取-轉換-加載(Extract-Transform-Load,)
,整體來說,它的執行步驟為:
- 提取:從事務型數據庫中提取數據
- 轉換:按照需求進行數據轉換為符合要求的數據格式(可能包含數據驗證、數據歸一化、編碼、去重、表模式轉換)
- 加載:同步到分析型數據庫上完成持久化
所以一旦數據同步到分型數據庫上,我們就可以利用分析型數據庫做到如下幾點:
- 定期數據報告:以生成計算業務習相關的統計數據,幫助管理層進行評估企業整體健康狀況。
- 即席查詢:利用分析型數據的優勢,通過查詢數據解決特定問題,以便進行下一步的商業決策。
Dataflow中的幾大基本概念
Dataflow流式處理宏觀流程
Dataflow代表著數據如何在不同的操作之間的流動,它通常是由一張有向圖構成,即:
- 數據源:對于flink中沒有輸入一端的算子,即數據源頭,我們稱之為dataflow的源數據。
- 算子:有輸入和輸出,即通過從輸入端獲取數據并對其進行計算,然后產生數據從輸出端輸出供后續處理。
- 數據匯:經過無數個算子,將數據匯聚到終端即沒有輸出的一端,這種沒有輸出端的算子就是數據匯。
數據并行和任務并行的區別
上述說明了構成了Dataflow
的宏觀核心概念的邏輯視圖,按照物理分布式視圖下,算子可能會發布在不同的物理機器上,例如下圖所示,中間進行數據轉換計算的算子,各分配兩個發布在不同的機器下作為并行任務運行,各自完成自己的一部分的計算任務。由此,也就有了數據并行和任務并行的概念。
先來說說數據并行,本質就是將數據進行分組,使之同一操作的多個任務切割為不同的子集,這使得計算負載能夠分配到不同算子上工作,例如按照用戶id進行分組將數據發布到負載的算子上進行數據運算。
而任務并行則說相同規則的算子可以多個并行處理,源數據可以并行傳輸到并行算子中運行,可以更好的利用集群資源進行運算。
Flink中幾種數據傳播策略
采集到源數據之后,flink會按照數據傳播策略將數據項分配給不同的任務,對應的傳播策略也有以下幾種:
- 轉發策略:將數據按照一對一映射的方式傳輸到指定的節點上,這種做法對于部署在相同機器上的任務非常友好,因為它們避免的網絡通信的開銷。
- 廣播策略:即針對收到的數據流,將數據拷貝的多份然后發布到所有的下游算子中,因為涉及多算子節點的網絡通信,所以代價也會相對昂貴一些。
- 基于鍵值對的策略:按照事先約定