91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Flink1.10狀態管理是怎樣的

發布時間:2021-12-31 10:45:48 來源:億速云 閱讀:140 作者:iii 欄目:大數據

本篇內容主要講解“Flink1.10狀態管理是怎樣的”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Flink1.10狀態管理是怎樣的”吧!

一、概述

    我們先來看Flink官方文檔的第一句話:

    Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.

有道翻譯如下:

    Apache Flink是一個框架和分布式處理引擎,用于無界和有界數據流上的有狀態計算。Flink被設計成可以在所有常見的集群環境中運行,以內存中的速度和任何規模執行計算。

    

    這里要明確一點,Flink的流式處理可以是有狀態的可以是無狀態的,比如有些一些任務我只基于某個獨立的數據進行計算,最簡單的比如說從source端接收數據直接打印到控制臺了,然后后面輸出到sink,這種不依賴其他數據,這種根本就不涉及到狀態,直接就是來一條數據處理一條數據,這個應該比較好理解。

    之前我們說過大多數的流應用都是有狀態的,Flink執行計算任務的過程中,從source端到sink端中間會有很多的operator,中間會存在多個臨時狀態,如果任務的某個task掛掉,那它在內存中的狀態都會丟失,如果我們中間沒有存儲中間狀態的話,需要從頭開始計算,如果我們存儲了中間狀態,就可以恢復到中間狀態,從該狀態繼續計算,而不是從頭開始計算 ;Flink就設計了一種機制來保存任務執行的中間狀態,就是狀態管理機制。

    例如,經典的wordcount程序,task不斷的從source端接收數據,處理數據之前,task先去訪問state,獲取該單詞當前的count數,加1后再更新state,并將新的計算結果輸出。下面這個圖就展示了flink的task如何和state進行交互。

哪些場景需要狀態計算呢?下面是我整理了一些典型場景:

    a.數據增量統計;
    b.聚合操作;
    c.機器學習訓練模型迭代運算時保存當前模型;

    d.Job故障重啟,需要從之前的狀態恢復;

    e.數據記錄去重;

    f.歷史數據的比對。

二、狀態分類

   

    在講解Flink的狀態分類之前我們需要先區分幾個概念:

    1).State 狀態

        State一般指一個具體的task/operator的狀態,Flink為了保證計算過程中出現異常進行數據恢復,就將中間結果存儲起來,這個中間結果就是State,默認情況下,State保存在Jobmanager的內存中,也可以保存在TaskManager本地磁盤或HDFS分布式文件系統。

      

    2).State Backend 狀態后端

    State是如何準確的存儲、訪問、以及維護是由一個可插拔的組件決定的,這個組件稱為狀態后端(State backend),一個state backend負責兩件事:本地state管理,以及為state做檢查點并存儲到外部地址。

    3).Checkpoint 檢查點

    Checkpoint是指在某個特定的時刻下,對整個job一個全局的快照,當我們遇到故障或者重啟的時候可以從備份中進行恢復。

    按照數據的劃分和擴張方式,在Flink中有兩種類型的state:operator state和keyed state:

1.operator state 算子狀態 作用范圍限定為算子任務,一個任務一個狀態

Flink1.10狀態管理是怎樣的

    

    算子狀態的作用范圍限定為算子任務,由同一并行子任務所處理的所有數據都可以訪問到相同的狀態;

     算子狀態對于同一個任務而言是共享的(每一個并行的子任務共享一個狀態);

    算子狀態不能由相同或不同算子的另一個任務訪問(相同算子的不同任務之間也不能訪問);

operator state提供了三種原型:

List state  

    以list的方式表示state

Union list state

    同樣以list的方式表示state。但是它與常規list state的不同點在于:發生故障時恢復的方式、或一個application從檢查點開始的方式。

Broadcast state

    被用于特殊場景,當一個operator的每個task的state都是相同時。這個屬性可以被用于檢查點,或是rescaling 一個 operator時。

2.keyed state 

Flink1.10狀態管理是怎樣的

    鍵控狀態是基于KeyStream之上的狀態,keyBy之后的Operator State。

    鍵控狀態是根據輸入數據流中定義的鍵(key)來維度和訪問狀態的;

    Flink為每個key維護一個狀態實例,并將具有相同鍵的所有數據,都分區到同一個算子任務中,這個任務會維護和處理這個key對應的狀態;

    當任務處理一條數據時,它會自動將狀態的訪問范圍限定為當前數據的key;

keyed state提供了三種原型:

Value state

    為每個key存一個單值(可以是任意類型)。復雜的數據結構也可以作為value state 存儲;

List state

    為每個key存一個列表值。這個列表可以是任意類型;

Map state

    為每個key存一個key-value 映射。映射中的key和value可以是任意類型。

三、狀態存在形式

    Keyed State和Operator State,可以以兩種形式存在:原始狀態和托管狀態。

    托管方式就是狀態管理由flink提供的框架進行管理,通過flink狀態管理框架提供的接口,來更新和管理狀態的值。這里面包括用于存儲狀態數據的數據結構,現成的包裝類等。

    原始方式就是由用戶自行管理狀態具體的數據結構,框架在做checkpoint的時候(checkpoint是flink進行狀態數據持久化存儲的機制),使用byte[]來讀寫狀態內容,對其內部數據結構一無所知。

    通常在DataStream上的狀態推薦使用托管的狀態,當實現一個用戶自定義的operator時,會使用到原始狀態。一般來說,托管狀態用的比較多。

到此,相信大家對“Flink1.10狀態管理是怎樣的”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

吉林市| 罗平县| 双桥区| 蚌埠市| 白城市| 新巴尔虎右旗| 望城县| 清涧县| 江西省| 乐至县| 清原| 出国| 南靖县| 南昌县| 博乐市| 剑阁县| 乡城县| 连州市| 通道| 无锡市| 略阳县| 平阳县| 富顺县| 青海省| 丹阳市| 阳春市| 剑川县| 黔东| 玉门市| 阳高县| 泰兴市| 镇平县| 庆元县| 通州市| 定远县| 晋江市| 辽宁省| 吴堡县| 万全县| 巴彦淖尔市| 利辛县|