掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
摘要:本文整理自戴爾科技集團(tuán)軟件工程師周煜敏在 Flink Forward Asia 2020 分享的議題《Pravega Flink Connector 的過(guò)去、現(xiàn)在和未來(lái)》,文章內(nèi)容為:

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供衡東企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、HTML5、小程序制作等業(yè)務(wù)。10年已為衡東眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
Pravega 項(xiàng)目的名字來(lái)源于梵語(yǔ),意思是 good speed。項(xiàng)目起源于 2016 年,基于 Apache V2 協(xié)議在 Github 上開(kāi)源,并且于 2020 年 11 月加入了 CNCF 的大家庭,成為了 CNCF 的 sandbox 項(xiàng)目。
Pravega 項(xiàng)目是為大規(guī)模數(shù)據(jù)流場(chǎng)景而設(shè)計(jì)的,彌補(bǔ)傳統(tǒng)消息隊(duì)列存儲(chǔ)短板的一個(gè)新的企業(yè)級(jí)存儲(chǔ)系統(tǒng)。它在保持對(duì)于流的無(wú)邊界、高性能的讀寫上,也增加了企業(yè)級(jí)的一些特性:例如彈性伸縮以及分層存儲(chǔ),可以幫助企業(yè)用戶降低使用和維護(hù)的成本。同時(shí)我們也在存儲(chǔ)領(lǐng)域有著多年的技術(shù)沉淀,可以依托公司商用存儲(chǔ)產(chǎn)品為客戶提供持久化的存儲(chǔ)。
以上的架構(gòu)圖描述的是 Pravega 典型的讀寫場(chǎng)景,借此進(jìn)行 Pravega 術(shù)語(yǔ)介紹以幫助大家進(jìn)一步了解系統(tǒng)架構(gòu)。
Segment 存儲(chǔ)二進(jìn)制數(shù)據(jù)數(shù)據(jù)流,并且根據(jù)數(shù)據(jù)流量的大小,發(fā)生 merge 或者 split 的操作,以釋放或者集中資源。此時(shí) Segment 會(huì)進(jìn)行 seal 操作禁止新數(shù)據(jù)寫入,然后由新建的 Segment 進(jìn)行新數(shù)據(jù)的接收。
Pravega Flink connector 是 Pravega 最初支持的 connector,這也是因?yàn)?Pravega 與 Flink 的設(shè)計(jì)理念非常一致,都是以流為基礎(chǔ)的批流一體的系統(tǒng),能夠組成存儲(chǔ)加計(jì)算的完整解決方案。
以 Kafka 為例,可以首先來(lái)看一下 Kafka 是如何做到 Flink Checkpoint 的集成的。
上圖所示是一個(gè)典型的 Kafka "讀" 的架構(gòu)?;?Chandy-Lamport 算法的 Flink checkpoint 實(shí)現(xiàn),當(dāng) Job master Trigger 一個(gè) Checkpoint 時(shí),會(huì)往 Task Executor 發(fā)送 RPC 請(qǐng)求。其接收到之后會(huì)把自身狀態(tài)存儲(chǔ)中的 Kafka commit offset 合并回 Job Manager 形成一個(gè) Checkpoint Metadata。
仔細(xì)思考后,其實(shí)可以發(fā)現(xiàn)其中的一些小問(wèn)題:
基于這些不足之處,Pravega 有自己內(nèi)部設(shè)計(jì)的 Checkpoint 機(jī)制,我們來(lái)看一下它是怎么和 Flink 的 Checkpoint 進(jìn)行集成的。
同樣讀取 Pravega Stream。開(kāi)始 Checkpoint 這里就有不同,Job master 不再向 Task Executor 發(fā)送 RPC 請(qǐng)求,轉(zhuǎn)而以 ExternallyInducedSource 的接口,向 Pravega 發(fā)送一個(gè) Checkpoint 的請(qǐng)求。
同時(shí),Pravega 內(nèi)部會(huì)利用 StateSynchronizer 組件來(lái)同步和協(xié)調(diào)所有的 reader,并且會(huì)在所有的 reader 之間,發(fā)送 Checkpoint 的 event。當(dāng) Task Executor 讀到 Checkpoint Event 之后,整個(gè) Pravega 會(huì)標(biāo)志著這個(gè) Checkpoint 完成,然后返回的 Pravega Checkpoint 會(huì)存到 Job master state 當(dāng)中,從而完成 Checkpoint。
這樣的實(shí)現(xiàn)其實(shí)對(duì)于 Flink 來(lái)說(shuō)是更干凈的,因?yàn)樗鼪](méi)有耦合外部系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié),整個(gè) Checkpoint 的工作是交給 Pravega 來(lái)實(shí)現(xiàn)并完成的。
Flink1.11 是 2020 年的一個(gè)重要發(fā)布版本,對(duì) connector 而言其實(shí)也有非常多的挑戰(zhàn),主要集中在兩個(gè) FLIP 的實(shí)現(xiàn):FLIP-27 以及 FLIP-95。對(duì)于這兩個(gè)全新功能,團(tuán)隊(duì)也花了很多時(shí)間去集成,在過(guò)程中也遇到了一些問(wèn)題和挑戰(zhàn)。下面我們來(lái)向大家分享一下我們是如何踩坑和填坑的。本文會(huì)以 FLIP-95 為例展開(kāi)。
FLIP-95 是新的 Table API,其動(dòng)機(jī)和 FLIP-27 類似,也是為了實(shí)現(xiàn)批流一體的接口,同時(shí)也能更好地支持 CDC 的集成。針對(duì)冗長(zhǎng)的配置鍵,也提出了相應(yīng)的 FLIP-122 來(lái)簡(jiǎn)化配置鍵的設(shè)定。
從上圖可以看到 Pravega 在 Flink 1.10 之前的一個(gè) Table API,并且從圖中建表的 DDL 可以看到:
針對(duì)這些問(wèn)題,我們也就有了非常大的動(dòng)力去實(shí)現(xiàn)這樣一套新的 API,讓用戶更好的去使用表的抽象。整個(gè)框架如圖所示,借由整個(gè)新框架的幫助,所有的配置項(xiàng)通過(guò) ConfigOption 接口定義,并且都集中在 PravegaOptions 類管理。
下圖是最新 Table API 建表的實(shí)現(xiàn),和之前的相比有非常大的簡(jiǎn)化,同時(shí)在功能上也有了不少優(yōu)化,例如企業(yè)級(jí)安全選項(xiàng)的配置,多 stream 以及起始 streamcut 的指定功能。
接下來(lái),我想在此分享 Flink 1.11 集成的一個(gè)小的心得,是關(guān)于一個(gè) issue 解決過(guò)程的分享。Flink-18641 是我們?cè)诩?1.11.0 版本時(shí)碰到的問(wèn)題。升級(jí)的過(guò)程中,在單元測(cè)試中會(huì)報(bào) CheckpointException。接下來(lái)是我們完整的 debug 過(guò)程。
我們也總結(jié)了以下一些注意事項(xiàng)給到在做開(kāi)源社區(qū)的同胞們:
其實(shí)作為中國(guó)的開(kāi)發(fā)人員,有除了像 mailing list 和 JIRA 之外。我們也有釘釘群以及視頻的方式可以聯(lián)系到非常多的 Committer。其實(shí)更多的就是一個(gè)交流的過(guò)程,做開(kāi)源就是要和社區(qū)多交流,可以促進(jìn)項(xiàng)目之間的共同成長(zhǎng)。
最后也希望社區(qū)的小伙伴可以多多的關(guān)注 Pravega 項(xiàng)目,促進(jìn) Pravega connector 與 Flink 的共同發(fā)展。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流