中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flink流式處理概念是什么

發布時間:2021-11-23 11:08:16 來源:億速云 閱讀:150 作者:柒染 欄目:大數據

今天就跟大家聊聊有關Flink流式處理概念是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一,抽象層次

Flink提供不同級別的抽象來開發流/批處理應用程序。

Flink流式處理概念是什么

1,stateful streaming

最底層。它通過Process Function嵌入到DataStream API中。它允許用戶從一個或多個流自由處理事件,并使用一致的容錯狀態。此外,用戶可以注冊事件時間和處理時間回調,允許程序實現復雜的計算。

2,Core APIs

實際上,大多數應用程序不需要上述的低級別抽象,而是針對Core API(如DataStream API(有界/無界流))和DataSet API(有界數據集)進行編程。這些流暢的API為數據處理提供了常見的構建模塊,如用戶指定的各種轉換形式,連接,聚合,窗口,狀態等。在這些API中處理的數據類型以各自的編程語言表示為classes。底層的Process Function和DataStream API的整合,使得針對一些特定的操作可以實現更低層次的抽象。DataSet API為有界數據集提供了額外的原函數,如循環/迭代。

3,Table API

Table API是以表為中心的聲明式DSL,可能是動態更改表(表示流時)。Table API遵循(擴展)關系模型:Table 具有附加schema(與關系數據庫中的表相似),API提供操作,例如select,project,join,group-by,aggregate等。Table API代表的是應該做什么邏輯操作,而不是直接指定如何編寫操作的源代碼。雖然Table API可以通過各種類型的用戶定義的函數進行擴展,但它不如Core API那么具有表達力,但使用起來更加簡潔(少寫很多代碼)。

此外,Table API程序還可以通過在執行之前應用優化規則的優化器。

可以在表和DataStream / DataSet之間無縫轉換,允許程序將Table API和DataStream和DataSet API混合使用。

4,SQL

最高層次的抽象就是SQL。無論是語法還是表達,該層次的抽象都很像Table API。SQL抽象與Table API緊密交互,SQL查詢可以在Table API中定義的表上執行。

二,Programs and Dataflows

Flink程序的基本構建塊是流和轉換。在概念上,stream 是data records的(潛在的永無止境的)flow,并且變換是將一個或多個流作為輸入的操作,并且作為結果產生一個或多個輸出流。

執行時,Flink程序被映射成streaming dataflows,由streams 和轉換操作符組成。每個dataflow 從一個或多個sources開始,并以一個或多個sinks結束。dataflows 像任意的有向無環圖(DAG)。雖然通過迭代構造允許特殊形式的循環,但是為了簡單起見,我們大部分都會任務是DAG。

Flink流式處理概念是什么

通常,程序中的變換和數據流中的運算符之間存在一對一的對應關系。然而,有時,一個變換可能由多個轉換算子組成。

三,Parallel Dataflows

Flink中的程序本質上是并行和分發的。在執行期間,流具有一個或多個流分區,并且每個運算符具有一個或多個運算符subtask。操作符subtask彼此獨立,并以不同的線程執行,可能在不同的機器或容器上執行。

運算符子任務的數量是該特定操作符的并行性。stream 的并行性總是其生產運算符的并行性。同一程序的不同運算符可能具有不同的并行級別。

Flink流式處理概念是什么

Streams 可以以一對一(或轉發)模式或重新分配模式在兩個運算符之間傳輸數據:

1),一對一

One-to-one streams(例如上圖中的Source和map()運算符之間)保留元素的分區和ordering。這意味著map()運算符的子任務[1]看到的元素的順序將和由Source 操作符產生的順序相同。

2),再分配

重新分配流(如map()和上面的keyBy / window之間以及keyBy / window和Sink之間)改變流的分區。每個操作符子任務根據所選擇的轉換將數據發送到不同的目標子任務。

KeyBy是按照key的hash值進行重新分區,rebalance()是以隨機的方式重新分區。在重新分配交換中,元素之間的排序僅保留在每對發送和接收子任務對(例如,keyBy / window的map()和子任務[2]的子任務[1]中)。上例子中僅保證相同key的元素順序性。

四,Windows

Aggregating events(例如,counts,sums)在流上的工作方式與批處理不同。例如,不可能對流中的所有元素進行計數,因為流通常是無限的(無界)。相反,流上的聚合(計數,總和等)由窗口限定,例如“最后5分鐘計數”或“最后100個元素的總和”。

Windows可以時間驅動(例如:每30秒)或數據驅動(例如:每100個元素)。通常區分不同類型的窗口,例如翻轉窗口(無重疊)[tumbling windows (no overlap)],滑動窗口(具有重疊)[sliding windows (with overlap)]和會話窗口(由不活動空隙劃分)[ession windows (punctuated by a gap of inactivity)]。

Flink流式處理概念是什么

五,Time

當在Streaming 程序中使用時間的時候,如定義窗口時,可以參考不同的時間概念:

1,Event Time

Event Time是Event創建的時間。Events中的Event Time是以時間戳的格式存在。Fink通過timestamp assigners來獲得event timestamps。timestamp assigners后面出文章具體說。

2,Ingestion time

Ingestion time是event進入flink dataflow的時間。

3,Processing Time

Processing Time是基于時間的操作算子執行的本地時間。

Flink流式處理概念是什么

六,Stateful Operations

雖然dataflow 中的許多操作只是一次處理一個單獨的事件(例如事件解析器),但一些操作會記住跨多個事件的信息(例如窗口運算符)。這些操作稱為有狀態。有狀態的操作算子,狀態保存在嵌入式的鍵/值存儲中。狀態會和被狀態操作算子讀取的streams一起分區和分配。使用keyBy函數后,僅keyed streams可能獲取key/value狀態,并且僅限于與當前事件key相關的值。對齊stream和state的keys,確保所有狀態更新都是本地操作,保證一致性,無需事務開銷。此對齊還允許Flink重新分配狀態并透明地調整流分區。

Flink流式處理概念是什么

七,Checkpoints 

Flink使用stream replay和checkpoint組合來實現容錯。檢查點與每個輸入流中的特定點相關聯,以及每個運算符的相應狀態。Streaming dataflow可以從檢查點恢復流,同時通過恢復操作符的狀態,從檢查點重新執行事件來保持一致性(一次性處理語義)。

檢查點間隔是在恢復時間(需要重新計算的事件數)的情況下,在執行期間消除容錯的開銷的一種手段。

八,Batch on Streaming

Flink執行批處理程序作為流程序的特殊情況,其中streams 是有限的(有限數量的元素)。DataSet在內部被視為數據流。以上概念因此適用于批處理程序,同樣適用于流式傳輸程序,但有一些例外:

1,批處理程序的容錯不使用checkpoint。恢復需要完全執行流。這是可能的,因為輸入是有限的。恢復成本增加,但是使得處理變得廉價,因為無需進行checkpoint。

2,DataSet API中的有狀態操作使用簡化的in-memory/out-of-core數據結構,而不是鍵/值索引。

3,DataSet API引入了特殊的同步(superstep-based)迭代,這些迭代只能在有界流上進行。具體后面出文章介紹。

九,Tasks and Operator Chains

為了分布式執行,Flink 鏈式合并operator subtasks成tasks。每個task被一個線程執行。鏈式的將操作符合并成任務是一個很有用的優化:它減少了線程到線程切換和緩沖的開銷,并且在減少延遲的同時增加了總體吞吐量。鏈式操作是可以配置的(后面出文章具體介紹)。

下圖dataflow的例子,使用五個subtasks執行,于是需要五個并發線程。

Flink流式處理概念是什么

十,flink的角色

Flink運行時由兩種類型的進程組成:

1),JobManager也叫master協調分布式執行。他們調度任務,協調checkpoints,協調故障恢復等。至少有一個JobManager。高可用情況下可以啟動多個JobManager,其中一個選舉為leader,其余為standby。

2),TaskManager也叫worker,負責執行具體的tasks。緩存,交換數據流。至少有一個TaskManager。

JobManager和TaskManager可以用很多種方式啟動:可以直接作為Standalone集群啟動,也可以被yarn或者Mesos管理。TaskManager連接到JobManager,宣布自己可用,并接受分配的工作。

客戶端不是runtime 和程序執行的一部分,而是用于準備并發送數據流到JobManager。

之后,客戶端可以斷開連接或保持連接以接收進度報告。客戶端作為觸發執行的Java / Scala程序的一部分運行,或在命令行進程中運行./bin/flink運行。。

Flink流式處理概念是什么

十一,Task Slots and Resources

每個worker(或者叫TaskManager)是一個jvm進程,可以在獨立的線程中執行一個或者多個subtasks。為了控制worker接受tasks數,worker稱之為任務槽數(至少有一個)。

每個task slot代表TaskManager的一個固定部分資源。例如,一個TaskManager有三個slot,會均分其管理的內存給每個slot。按槽分配資源意味著一個subtask不會與其它job的subtask競爭管理的內存,而是使用保留的內存資源。這里并沒有實現cpu資源的隔離。僅僅實現了基于內存的資源隔離。

通過調整task slots的數量,用戶可以定義子任務彼此隔離的方式。每個TaskManager擁有一個slot 意味著每個任務組在單獨的JVM中運行(例如,可以在單獨的容器中啟動)。擁有多個slots 意味著更多的子任務共享相同的JVM。相同JVM中的任務共享TCP連接(通過復用)和心跳消息。他們還可以共享數據集和數據結構,從而減少每個任務的開銷。

Flink流式處理概念是什么

默認情況下,Flink允許子任務共享slot,即使它們是不同tasks的subtasks,只要它們來自相同的job。結果是一個slot可以處理整個job pipeline。允許這個slot共享有兩個主要好處:

1),Flink集群需要與job中使用的最高并行度完全相同的task slot數。不需要計算一個程序總共包含多少任務(具有不同的并行性)。

2),更容易獲得更好的資源利用率。沒有slot共享,非密集的source / map()子任務將擁有與資源密集型窗口子任務一樣多的資源。使用slot共享,通過將例子中國的基礎并行度從2增加到6,可以充分利用slot資源,同時保證heavy subtasks均勻的分配到不同taskmanager中。

Flink流式處理概念是什么

也有resource 組機制,可以組織不希望的slot共享。

作為經驗法則,task slot最佳默認數量將是CPU內核的數量。

十二,State Backends

 key/values索引存儲的確切數據結構取決于所選的State Backends(目前有三種:MemoryStateBackend,FsStateBackend,RocksDBStateBackend)。一種state backend將數據存儲于內存的hash map中,另一種state backend使用的是RocksDB,還有就是使用文件。除了定義保存狀態的數據結構之外,state backends 還實現邏輯以獲取鍵/值狀態的 point-in-time 快照,并將該快照存儲為checkpoint的一部分。

Flink流式處理概念是什么

十三,Savepoints

使用Data Stream API編寫的程序可以從Savepoints恢復執行。Savepoints允許更新程序和Flink集群,而不會丟失任何狀態。

Savepoints 是手動觸發的checkpoints,它們記錄程序的快照并將其寫入狀態后端。他們依靠這個常規的檢查點機制。執行過程中,定期在工作節點上快照并生成檢查點。為了恢復,只需要最后完成的檢查點,一旦新的檢查點完成,可以安全地丟棄較舊的檢查點。Savepoints 與這些定期checkpoints類似,除了它們由用戶觸發,并且在較新的檢查點完成時不會自動過期。可以從命令行創建保存點,也可以通過REST API取消作業。

十四,總結

Flink作為一個流式處理的框架,在實時計算中也是很常見的。Flink應用程序總共有以下三個部分:

1),Data source:Flink處理的輸入數據

2),Transformations:Flink修改傳入數據時的處理步驟

3),Data sink: flink處理結束后輸出位置

Flink流式處理概念是什么

        kafka,hbase,spark等源碼入門到深入,spark機器學習,大數據安全,大數據運維,請關注浪尖公眾號,看高質量文章。

看完上述內容,你們對Flink流式處理概念是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广西| 长顺县| 昌邑市| 红原县| 渝中区| 民和| 和田市| 洱源县| 枣庄市| 团风县| 双辽市| 通渭县| 丹阳市| 南投县| 乐安县| 麟游县| 闽侯县| 中方县| 云林县| 太原市| 平湖市| 松滋市| 西平县| 庄浪县| 崇信县| 西乌珠穆沁旗| 南城县| 余江县| 张家港市| 巴塘县| 湟中县| 武汉市| 广州市| 萍乡市| 视频| 龙山县| 安泽县| 辽宁省| 斗六市| 甘孜县| 靖宇县|