摘要:四阿里相關工作介紹在阿里的成長路線阿里是從年開始調研年月啟動項目,并完善在大規模生產下的一些優化和改進。年月已成為阿里的實時計算引擎。阿里在狀態管理和容錯相關的工作正在做的工作,基于重構方面的一些優化,阿里也正在將功能做完善。
作者: 施曉罡
本文來自2018年8月11日在北京舉行的 Flink Meetup會議,分享來自于施曉罡,目前在阿里大數據團隊部從事Blink方面的研發,現在主要負責Blink狀態管理和容錯相關技術的研發
本文主要內容如下:
有狀態的流數據處理;
Flink中的狀態接口;
狀態管理和容錯機制實現;
阿里相關工作介紹;
一.有狀態的流數據處理 1.1什么是有狀態的計算計算任務的結果不僅僅依賴于輸入,還依賴于它的當前狀態,其實大多數的計算都是有狀態的計算。 比如wordcount,給一些word,其計算它的count,這是一個很常見的業務場景。count做為輸出,在計算的過程中要不斷的把輸入累加到count上去,那么count就是一個state。
1.2.傳統的流計算系統缺少對于程序狀態的有效支持狀態數據的存儲和訪問;
狀態數據的備份和恢復;
狀態數據的劃分和動態擴容;
在傳統的批處理中,數據是劃分為塊分片去完成的,然后每一個Task去處理一個分片。當分片執行完成后,把輸出聚合起來就是最終的結果。在這個過程當中,對于state的需求還是比較小的。
對于流計算而言,對State有非常高的要求,因為在流系統中輸入是一個無限制的流,會運行很長一段時間,甚至運行幾天或者幾個月都不會停機。在這個過程當中,就需要將狀態數據很好的管理起來。很不幸的是,在傳統的流計算系統中,對狀態管理支持并不是很完善。比如storm,沒有任何程序狀態的支持,一種可選的方案是storm+hbase這樣的方式去實現,把這狀態數據存放在Hbase中,計算的時候再次從Hbase讀取狀態數據,做更新在寫入進去。這樣就會有如下幾個問題
流計算系統的任務和Hbase的數據存儲有可能不在同一臺機器上,導致性能會很差。這樣經常會做遠端的訪問,走網絡和存儲;
備份和恢復是比較困難,因為Hbase是沒有回滾的,要做到Exactly onces很困難。在分布式環境下,如果程序出現故障,只能重啟Storm,那么Hbase的數據也就無法回滾到之前的狀態。比如廣告計費的這種場景,Storm+Hbase是是行不通的,出現的問題是錢可能就會多算,解決以上的辦法是Storm+mysql,通過mysql的回滾解決一致性的問題。但是架構會變得非常復雜。性能也會很差,要commit確保數據的一致性。
對于storm而言狀態數據的劃分和動態擴容也是非常難做,一個很嚴重的問題是所有用戶都會在strom上重復的做這些工作,比如搜索,廣告都要在做一遍,由此限制了部門的業務發展。
1.3.Flink豐富的狀態訪問和高效的容錯機制Flink在最早設計的時候就意識到了這個問題,并提供了豐富的狀態訪問和容錯機制。如下圖所示:
二.Flink中的狀態管理 2.1.按照數據的劃分和擴張方式,Flink中大致分為2類:Keyed States
Operator States
Keyed States的使用
Flink也提供了Keyed States多種數據結構類型
Keyed States的動態擴容
Operator States的使用
Operator States的數據結構不像Keyed States豐富,現在只支持List
Operator States多種擴展方式
Operator States的動態擴展是非常靈活的,現提供了3種擴展,下面分別介紹:
ListState:并發度在改變的時候,會將并發上的每個List都取出,然后把這些List合并到一個新的List,然后根據元素的個數在均勻分配給新的Task;
UnionListState:相比于ListState更加靈活,把劃分的方式交給用戶去做,當改變并發的時候,會將原來的List拼接起來。然后不做劃分,直接交給用戶;
BroadcastState:如大表和小表做Join時,小表可以直接廣播給大表的分區,在每個并發上的數據都是完全一致的。做的更新也相同,當改變并發的時候,把這些數據COPY到新的Task即可
以上是Flink Operator States提供的3種擴展方式,用戶可以根據自己的需求做選擇。
使用Checkpoint提高程序的可靠性
用戶可以根據的程序里面的配置將checkpoint打開,給定一個時間間隔后,框架會按照時間間隔給程序的狀態進行備份。當發生故障時,Flink會將所有Task的狀態一起恢復到Checkpoint的狀態。從哪個位置開始重新執行。
Flink也提供了多種正確性的保障,包括:
AT LEAST ONCE;
Exactly once;
備份為保存在State中的程序狀態數據
Flink也提供了一套機制,允許把這些狀態放到內存當中。做Checkpoint的時候,由Flink去完成恢復。
從已停止作業的運行狀態中恢復
當組件升級的時候,需要停止當前作業。這個時候需要從之前停止的作業當中恢復,Flink提供了2種機制恢復作業:
Savepoint:是一種特殊的checkpoint,只不過不像checkpoint定期的從系統中去觸發的,它是用戶通過命令觸發,存儲格式和checkpoint也是不相同的,會將數據按照一個標準的格式存儲,不管配置什么樣,Flink都會從這個checkpoint恢復,是用來做版本升級一個非常好的工具;
External Checkpoint:對已有checkpoint的一種擴展,就是說做完一次內部的一次Checkpoint后,還會在用戶給定的一個目錄中,多存儲一份checkpoint的數據;
三.狀態管理和容錯機制實現下面介紹一下狀態管理和容錯機制實現方式,Flink提供了3種不同的StateBackend
MemoryStateBackend
FsStateBackend
RockDBStateBackend
用戶可以根據自己的需求選擇,如果數據量較小,可以存放到MemoryStateBackend和FsStateBackend中,如果數據量較大,可以放到RockDB中。
下面介紹HeapKeyedStateBackend和RockDBKeyedStateBackend
Checkpoint的執行流程是按照Chandy-Lamport算法實現的。
全量Checkpoint會在每個節點做備份數據時,只需要將數據都便利一遍,然后寫到外部存儲中,這種情況會影響備份性能。在此基礎上做了優化。
RockDB的增量CheckpointRockDB的數據會更新到內存,當內存滿時,會寫入到磁盤中。增量的機制會將新產生的文件COPY持久化中,而之前產生的文件就不需要COPY到持久化中去了。通過這種方式減少COPY的數據量,并提高性能。
四.阿里相關工作介紹 4.1.Flink在阿里的成長路線阿里是從2015年開始調研Flink,2015年10月啟動Blink項目,并完善Flink在大規模生產下的一些優化和改進。2016年雙11采用了Blink系統,為搜索,推薦,廣告業務提供服務。2017年5月Blink已成為阿里的實時計算引擎。
4.2.阿里在狀態管理和容錯相關的工作正在做的工作,基于State重構Window方面的一些優化,阿里也正在將功能做完善。后續將包括asynchronous Checkpoint的功能完善,并和社區進一步溝通和合作。幫助Flink社區完善相關方面的工作。
更多資訊請訪問 Apache Flink 中文社區網站
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/36001.html
摘要:擴展庫還包括用于復雜事件處理,機器學習,圖形處理和兼容性的專用代碼庫。事件時間機制使得那些事件無序到達甚至延遲到達的數據流能夠計算出精確的結果。負責接受用戶的程序代碼,然后創建數據流,將數據流提交給以便進一步執行。 showImg(https://segmentfault.com/img/remote/1460000016902812); 前言 Flink 是一種流式計算框架,為什么我...
摘要:機制博客從到學習介紹從到學習上搭建環境并構建運行簡單程序入門從到學習配置文件詳解從到學習介紹從到學習如何自定義從到學習介紹從到學習如何自定義從到學習轉換從到學習介紹中的從到學習中的幾種詳解從到學習讀取數據寫入到從到學習項目如何運行從 Flink Checkpoint 機制 https://t.zsxq.com/ynQNbeM 博客 1、Flink 從0到1學習 —— Apache Fl...
摘要:序列化機制博客從到學習介紹從到學習上搭建環境并構建運行簡單程序入門從到學習配置文件詳解從到學習介紹從到學習如何自定義從到學習介紹從到學習如何自定義從到學習轉換從到學習介紹中的從到學習中的幾種詳解從到學習讀取數據寫入到從到學習項目如何 Flink 序列化機制 https://t.zsxq.com/JaQfeMf 博客 1、Flink 從0到1學習 —— Apache Flink 介紹 2...
摘要:模塊中的類結構如下博客從到學習介紹從到學習上搭建環境并構建運行簡單程序入門從到學習配置文件詳解從到學習介紹從到學習如何自定義從到學習介紹從到學習如何自定義從到學習轉換從到學習介紹中的從到學習中的幾種詳解從到學習讀取數據寫入到從到學 Flink-Client 模塊中的類結構如下: https://t.zsxq.com/IMzNZjY showImg(https://segmentfau...
閱讀 2607·2021-09-26 10:17
閱讀 3230·2021-09-22 15:16
閱讀 2142·2021-09-03 10:43
閱讀 3268·2019-08-30 11:23
閱讀 3666·2019-08-29 13:23
閱讀 1310·2019-08-29 11:31
閱讀 3695·2019-08-26 13:52
閱讀 1401·2019-08-26 12:22