flink流式概念整理
–動態表
1、將流轉換為動態表。
2、在動態表上計算乙個連續查詢,生成乙個新的動態表。
3、生成的動態表被轉換回流。
–時間屬性
時間屬性可以像普通的時間戳的列一樣被使用和計算。
一旦時間屬性被用在了計算中,它就會被物化,進而變成乙個普通的時間戳。
普通的時間戳是無法跟 flink 的時間以及watermark等一起使用的,所以普通的時間戳就無法用在時間相關的操作中。–注意列計算避免使用時間屬性字段
--處理時間
概念:處理時間是基於機器的本地時間來處理資料,它是最簡單的一種時間概念,但是它不能提供確定性。它既不需要從資料裡獲取時間,也不需要生成 watermark。
--建立乙個表生成一列為處理時間,proctime屬性列上定義視窗 需要在流模式上,mysql 是批模式
create table table_name (
aaa int,
bbb int,
ccc int,
time_str timestamp(3),
arrs varchar(5),
watermark for time_str as time_str, --時間時間列 事件屬性的資料型別必須是 timestamp(3)
--watermark for time_str as time_str - interval '1' minute
--watermark for time_str as time_str - interval '0.5' hour
new_time_str as proctime() --處理時間屬性
) with (
...)
--事件時間
概念:事件時間屬性可以用 watermark 語句在 create table ddl 中進行定義。watermark 語句在乙個已有欄位上定義乙個 watermark 生成表示式,同時標記這個已有欄位為時間屬性字段
使用事件時間語義時,表必須包含事件時間屬性和 watermark 策略
–水印的幾種策略
1、嚴格遞增時間戳: watermark for rowtime_column as rowtime_column。
發出到目前為止已觀察到的最大時間戳的 watermark ,時間戳大於最大時間戳的行被認為沒有遲到。、
2、遞增時間戳: watermark for rowtime_column as rowtime_column - interval 『0.001』 second。
發出到目前為止已觀察到的最大時間戳減 1 的 watermark ,時間戳大於或等於最大時間戳的行被認為沒有遲到。
3、有界亂序時間戳: watermark for rowtime_column as rowtime_column - interval 『string』 timeunit。
發出到目前為止已觀察到的最大時間戳減去指定延遲的 watermark ,例如, watermark for rowtime_column as rowtime_column - interval 『5』 second 是乙個 5 秒延遲的 watermark 策略。
—一般用到資料流 就直接用事件時間屬性就好了
–時態表
時態表(temporal table)是一張隨時間變化的表 – 在 flink 中稱為動態表
時態表可以分為 版本表 和 普通表。
版本表: 如果時態表中的記錄可以追蹤和並訪問它的歷史版本,這種表我們稱之為版本表,來自資料庫的 changelog 可以定義成版本表。 --類似 緩慢變化維之拉鍊表 這裡是快速隨著時間變化的
普通表: 如果時態表中的記錄僅僅可以追蹤並和它的最新版本,這種表我們稱之為普通表,來自資料庫 或 hbase 的表可以定義成普通表。 --記錄的是最新的資料
–定義乙個版本表
在 flink 中,定義了主鍵約束和事件時間屬性的表就是版本表。
– 檢視的邏輯是一樣的,定義了主鍵約束和事件時間屬性的表就是版本檢視
create table table_name (
aaa int,
bbb int,
ccc int,
time_str timestamp(3),
arrs varchar(5),
watermark for time_str as time_str, --時間時間列 事件屬性的資料型別必須是 timestamp(3)
–watermark for time_str as time_str - interval 『1』 minute
–watermark for time_str as time_str - interval 『0.5』 hour
new_time_str as proctime(), --處理時間屬性
primary key(aaa) not enforced
) with (…)
–算是整理官方文件流式概念的一些筆記
flink入門 流式計算概念
只要時間不停萬事萬物都沒有靜止。我們所以為的靜態,不過是流中的乙個片段。意味著流的世界,不在乎所謂的狀態,在乎的是變化,也就是事件的發生,通過事件來表示。批量的時代,我們只記錄關鍵的資訊,只在乎當前的狀態,不會去記錄狀態是如何一步步變化至當前狀態的,計算所面向的資料也是靜態的,從乙個態的資料變化到另...
flink 2 概念 有狀態的流式處理
傳統批處理方法是持續收取資料,以時間作為劃分多個批次的依據,再周期性地執行批次運算。但假設需要計算每小時出現事件轉換的次數,如果事件轉換跨越了所定義的時間劃分,跨越了批次的時間邊界,傳統批處理會將中介運算結果帶到下乙個批次進行計算 除此之外,當出現接收到的事件順序顛倒情況下,傳統批處理仍會將中介狀態...
Flink核心概念
根據資料來源的型別,即有界 bounded 或無界 unbounded 資料來源,您可以編寫乙個批處理程式或流處理程式,其中dataset api用於批處理,datastream api用於流處理。flink程式看起來像轉換資料集合的常規程式。每個程式都由相同的基本部分組成 streamexecut...