FLINK流式概念

2021-10-17 08:01:30 字數 2454 閱讀 2942

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...