Flink比賽之前的基礎學習

2021-09-26 07:14:39 字數 2850 閱讀 8728

本部落格描述了我學習flink的來龍去脈,不保證最終的學習效果!!!

可以先看大牛部落格裡的幾篇文章建議就看兩篇

flink原理與實現:理解flink中的計算資源

flink原理與實現:架構和拓撲概覽。

接下來主要是對flink table & sql的文件 api進行翻譯和解讀。

文件位址:

dynamic tables:這一章講解了flink處理無界資料流的語義怎麼做到和常規資料庫引擎處理有界資料集一樣的方法.

在學習dynamic tables之前先要帶著以下的理解

1.乙個資料庫table是乙個資料流通過insert、delete、update等dml語句執行後的結果。在這裡叫changelog stream.

2.乙個物化檢視被定義為一次sql查詢。為了更新該檢視,查詢需要不斷的處理changelog stream的檢視關係。

3.物化檢視是流式sql查詢的結果。

(我覺得這裡主要理解第一句話, 就是dml語句的型別)。

科普下物化檢視的概念:物化檢視和檢視類似,反映的是某個查詢的結果,但是和檢視僅儲存sql定義不同,物化檢視本身會儲存資料,因此是物化了的檢視。

動態表(dynamic table)是flink tableapi & sql支援處理流式資料的核心概念,和普通的靜態表不一樣,動態表無時無刻不在發生變化,它們可以像靜態批量表一樣被查詢。查詢動態表將會產生乙個持續的查詢結果,該結果也會產生乙個結果動態表,通過對這個結果動態表進行更新來反映出源動態表的變化。文件上描述動態查詢表類似於定義物化檢視的乙個查詢。

如圖所示展示了持續查詢、動態表、資料流之間的關係

1、datastream流轉成動態表

2、持續查詢動態表會產生乙個新的結果動態表

3、結果動態表可以轉回datastream

為了像關係型查詢一樣處理資料流,必須將資料流變成表,資料流裡的每條記錄都以insert模式附加到結果表上,也就是說我們在以insert-only changelog stream的模式在構造表。

看上面兩種查詢顯示

第一種:左邊不停的插入記錄, 右邊不停的對這個sql查詢語句的結果進行更新。

第二種:左邊不停的插入記錄, 右邊不停的對這個sql查詢語句的結果進行插入。並且根據查詢語句和結果能看見這個查詢是有個滾動時間視窗概念的,每次只查詢指定時間視窗範圍內的資料。(這裡一定要看懂sql來理解)

總結:第一種查詢更新了之前發射的結果(emitted result),changelog stream定義結果表包含了insert 和 update兩種change.

第二種查詢只是將資料附加到結果表上,所以changelog stream的結果表只有insert change.

在上面知道了動態表可以不停的由insert、update、delete三種change修改。

retract stream: retract stream支援兩種訊息,add和retract,動態表把insert change編碼成add message, delete change 編碼成retract message,update change 編碼成 retract之前的message和 add 現有的message, (可以理解為撤回和更新合起來的操作),

upsert stream: upsert stream支援兩種訊息,upsert和delete,這裡增加了乙個unique key的約束,upsert stream 編碼 insert 和 update change都 作為upsert訊息,delete change作為delete 訊息。 文件中對retract stream 和 upsert stream兩個流對於update change的成本做了說明, upsert stream只會編碼成乙個訊息, 所以更加有效率。

再然後看那篇introduction to flink pdf, 學習介紹一些關於流計算和flink相關的基礎知識。

筆記:第一章:描述了流式計算的模型,介紹了流式計算面臨的挑戰也就是一致性容錯(being fault-tolerant with exactly-once guarantees)【我的理解就是在你的計算程式出錯進行重啟以後任務繼續照常進行, 並且能保證整個過程就像你沒有重啟程式一樣正常進行】、低延時、高吞吐量、處理無序事件流的能力。在這裡又介紹了傳統的大資料架構lambda架構, 該架構保證了資料的最終一致性,通過增加一層批處理層來對資料的準確性做保證, 通過實時層來保證資料的低延時性。 而學習flink的重要原因就是它的批流統一的優勢, 因為lambda架構的特點會使得應用需要維護兩套**。維護性比較低。

第二章:講了流式計算模型的演進(stream-first architecture). 這一章主要在講流式處理管道的架構,講的有點虛,沒有細看。

第三章講了一些flink的先進設計架構,主要參考的也就是dataflow model**當中提出的理念進行了實現 包括時間機制 視窗機制、checkpoint機制,它們都分別解決了什麼問題。

第四章具體講了flink視窗watermark trigger的作用和設計思想。 (trigger和watermark是針對時間視窗中event time才有的概念).

第五章講了狀態計算。   首先了解什麼叫無狀態計算和有狀態計算(取決於程式的輸出結果是基於多個事件流還是單個事件流的),比如感測器會不停的給系統傳送溫度報告,我要計算過去1小時內感測器傳來的平均溫度。又或者在1分鐘內收到溫度相差20度以後建立報警這兩種事例都是有狀態的計算。

學習HTML之前必須了解的基礎

帖子包含非法片語,不能發布 一 網路基礎部分 1.1瀏覽器與伺服器 瀏覽器是指可以顯示網頁伺服器或者檔案系統的html檔案 標準通用標記語言的乙個應用 內容,並讓使用者與這些檔案互動的一種軟體。瀏覽器在訪問頁面時通過瀏覽器的核心解析頁面。瀏覽器的核心大致有這麼幾種 ie的trident核心,fire...

學習shell指令碼之前的基礎知識

什麼是shell 簡單點理解,就是系統跟計算機硬體互動時使用的中間介質,它只是系統的乙個工具 實際上,在 shell 和計算機硬體之間還有一層東西那就是系統核心了 打個比方,如果把計算機硬體比作乙個人的軀體,而系統核心則是人的大腦,至於 shell 把它比作人的五官似乎更加貼切些 回到計算機上來,使...

Flink學習筆記(六) flink的運算元與富函式

一 flink中的的transformation運算元 flink常用運算元就不自己詳細記錄了,看這裡就夠了。二 富函式 在呼叫datastream的運算元例如map filter時,可以傳入乙個函式,也可以傳入乙個function類,就像這樣 val filterstream stream.fil...