傳統批處理方法是持續收取資料,以時間作為劃分多個批次的依據,再周期性地執行批次運算。但假設需要計算每小時出現事件轉換的次數,如果事件轉換跨越了所定義的時間劃分,跨越了批次的時間邊界,傳統批處理會將中介運算結果帶到下乙個批次進行計算;除此之外,當出現接收到的事件順序顛倒情況下,傳統批處理仍會將中介狀態帶到下一批次的運算結果中,這種處理方式也不盡如人意。
意思就是,批處理無法做到實時,比如3點-4點,批處理無法保證系統時間3點-4點時接受的資料就是想要的
有狀態的計算要有2個要素:
從乙個queue中累積狀態、維護狀態
時間,根據時間判斷是否接受到所有需要的資料
有狀態的分布式流計算
比如根據key分組求count,count就是狀態,根據key分組就是分布式。
要有乙個機制去維護狀態,並且可以容錯。
將資料為key,state的快照為value,建立乙個對映,如果哪條資料出錯了,直接回退到之前的快照
產生gcs的方法有2:
一條資料經過所有分布式節點上的運算元的計算後,記錄產生的狀態,這樣需要中斷執行
首先引入checkpoint的概念,所有的節點在經過乙個checkpoint後,會將當前狀態傳輸到乙個共享的dfs中
共享變數
本地jvm
遠端的,比如rocksdb,
定義乙個時間視窗,並不是按系統收到的時間,而是event產生的時間,這就需要event中帶有時間資訊,並且在處理時要讀取這個時間資訊。
watermark 用來保證指定視窗的資料是否已經全部收集完。接受乙個3-4的時間視窗的資料,會設定乙個延遲delay,比如5分鐘,到4:05的時候才把所有3-4的event進行處理。
比如專案公升級、修改bug、公升級flink版本,如何把之前的狀態遷移到新版本中
重新定義分割槽
儲存點:手動設定的checkpoint
比如公升級花了3小時,期間kafka仍然一直採集資料,等系統公升級完,利用eventtime來進行執行視窗,此時一定不能用processtime,否則會放到乙個視窗中。
Flink核心概念
根據資料來源的型別,即有界 bounded 或無界 unbounded 資料來源,您可以編寫乙個批處理程式或流處理程式,其中dataset api用於批處理,datastream api用於流處理。flink程式看起來像轉換資料集合的常規程式。每個程式都由相同的基本部分組成 streamexecut...
FLINK流式概念
flink流式概念整理 動態表 1 將流轉換為動態表。2 在動態表上計算乙個連續查詢,生成乙個新的動態表。3 生成的動態表被轉換回流。時間屬性 時間屬性可以像普通的時間戳的列一樣被使用和計算。一旦時間屬性被用在了計算中,它就會被物化,進而變成乙個普通的時間戳。普通的時間戳是無法跟 flink 的時間...
Flink核心概念
一 flink的定義 flnk是乙個分布式處理引擎,用於在無邊界和有邊界資料流上進行有狀態的計算。flink能在常見集群環境中執行,並能以記憶體速度和任意規模進行計算。二 有界流和無界流 flink的核心是流處理,當然也支援批處理。flink的本質是流處理,它將批處理看作是流處理的特殊情況,即有界流...