阿里巴巴工程師告訴你Flink 可以做什么?它為什么這么火?

什么?你還不知道啥是Flink?那么通過(guò)下面這篇他的經(jīng)歷,一起了解一下Flink吧!
不知道你是否有過(guò)和我類似的經(jīng)歷?
我是 2018 年 6 月加入公司,一直負(fù)責(zé)監(jiān)控平臺(tái)的告警系統(tǒng)。之后,我們的整個(gè)監(jiān)控平臺(tái)架構(gòu)中途換過(guò)兩次,其中一次架構(gòu)發(fā)生了巨大的變化。我們監(jiān)控告警平臺(tái)最早的架構(gòu)如下圖所示:

這個(gè)架構(gòu)的挑戰(zhàn)難點(diǎn)在于:
海量的監(jiān)控?cái)?shù)據(jù)(Metric & Log & Trace 數(shù)據(jù))實(shí)時(shí)寫(xiě)入 ElasticSearch;
多維度的監(jiān)控指標(biāo)頁(yè)面展示(Dashboard) 查 ElasticSearch 的數(shù)據(jù)比較頻繁;
不斷遞增的告警規(guī)則需要通過(guò)查詢 ElasticSearch 數(shù)據(jù)來(lái)進(jìn)行判斷是否要告警。
從上面的幾個(gè)問(wèn)題我們就可以很明顯的發(fā)現(xiàn)這種架構(gòu)的瓶頸就在于 ElasticSearch 集群的寫(xiě)入和查詢能力,在海量的監(jiān)控?cái)?shù)據(jù)(Metric & Log & Trace 數(shù)據(jù))下實(shí)時(shí)的寫(xiě)入對(duì) ElasticSearch 有極大的影響。
我依然清楚記得,當(dāng)時(shí)經(jīng)常因?yàn)閷?xiě)入的問(wèn)題導(dǎo)致 ElasticSearch 集群掛掉,從而讓我的告警和監(jiān)控頁(yè)面(Dashboard)歇菜(那會(huì)老被噴:為啥配置的告警規(guī)則沒(méi)有觸發(fā)告警?為啥查看應(yīng)用的 Dashboard 監(jiān)控頁(yè)面沒(méi)數(shù)據(jù))。我也很無(wú)奈啊,只想祈禱我們的 ElasticSearch 集群穩(wěn)一點(diǎn)。
01
初次接觸 Flink
在如此糟糕的架構(gòu)情況下,我們挺過(guò)了幾個(gè)月,后面由于一些特殊的原因,我們監(jiān)控平臺(tái)組的整體做了一個(gè)很大的架構(gòu)調(diào)整,如下圖:

主要做了四點(diǎn)改變:
接入 Flink 集群去消費(fèi) Kafka 數(shù)據(jù),告警的 Flink Job 消費(fèi) Kafka 數(shù)據(jù)去判斷異常點(diǎn),然后做告警
Metric & Trace 數(shù)據(jù)存儲(chǔ)到 ElasticSearch,之前還存儲(chǔ)在 ElasticSearch 中的有 Log 數(shù)據(jù)
Log 數(shù)據(jù)存儲(chǔ)到 Cassandra
Dashboard 查詢數(shù)據(jù)增加 API 查詢 Cassandra 的日志數(shù)據(jù)
原先因?yàn)?Metric & Trace & Log 的數(shù)據(jù)量一起全部實(shí)時(shí)寫(xiě)入到 ElasticSearch 中,對(duì) ElasticSearch 的壓力很大,所以我們將 Log 的數(shù)據(jù)拆分存儲(chǔ)到 Cassandra 中,分擔(dān)了一些 ElasticSearch 的寫(xiě)入壓力。但是過(guò)后我們發(fā)現(xiàn)偶爾還會(huì)出現(xiàn)數(shù)據(jù)實(shí)時(shí)寫(xiě)入到 ElasticSearch 集群把 ElasticSearch 寫(xiě)掛的情況。所以那會(huì)不斷調(diào)優(yōu)我們的寫(xiě)入數(shù)據(jù)到 ElasticSearch 的 Flink Job,然后也對(duì) ElasticSearch 服務(wù)端做了不少的性能調(diào)優(yōu)。另外那會(huì)我們的監(jiān)控?cái)?shù)據(jù)是以 10s 一次為單位將采集的數(shù)據(jù)發(fā)上來(lái)的,后面我們調(diào)整了下數(shù)據(jù)采集的策略(變成 30s 一次為單位采集數(shù)據(jù)),采取多種調(diào)優(yōu)策略后,終于將我們的 ElasticSearch 弄穩(wěn)定了。
02
遇到 Flink 相關(guān)的挑戰(zhàn)
替換成這種新架構(gòu)后,由于組里沒(méi)人熟悉 Flink,再加上那會(huì)兒 Flink 的資料真的很少很少,所以當(dāng)時(shí)在組里對(duì) Flink 這塊大家都是從 0 開(kāi)始學(xué)習(xí),于大家而言挑戰(zhàn)還挺大的。
那時(shí)候我們跑在 Flink 上面的 Job 也遇到各種各樣的問(wèn)題:
消費(fèi) Kafka 數(shù)據(jù)延遲
checkpoint 失敗
窗口概念模糊、使用操作有誤
Event Time 和 Processing Time 選擇有誤
不知道怎么利用 Watermark 機(jī)制來(lái)處理亂序和延遲的數(shù)據(jù)
Flink 自帶的 Connector 的優(yōu)化
Flink 中的 JobManager 和 TaskManager 經(jīng)常掛導(dǎo)致 Flink Job 重啟
Flink 集群模式的選型
...
因?yàn)榕龅降母鞣N各樣的問(wèn)題,所以才會(huì)促使我們不斷地學(xué)習(xí) Flink 的原理和內(nèi)部機(jī)制,然后慢慢去解決上面遇到的各種問(wèn)題,并逐步穩(wěn)定我們監(jiān)控平臺(tái)運(yùn)行的 Flink Job。
03
為什么要學(xué)習(xí) Flink?
隨著大數(shù)據(jù)的不斷發(fā)展,對(duì)數(shù)據(jù)的及時(shí)性要求越來(lái)越高,實(shí)時(shí)場(chǎng)景需求也變得越來(lái)越多,主要分下面幾大類:

那么為了滿足這些實(shí)時(shí)場(chǎng)景的需求,衍生出不少計(jì)算引擎框架,現(xiàn)有市面上的大數(shù)據(jù)計(jì)算引擎的對(duì)比如下:

可以發(fā)現(xiàn)無(wú)論從 Flink 的架構(gòu)設(shè)計(jì)上,還是從其功能完整性和易用性來(lái)講都是領(lǐng)先的,再加上?Flink 是阿里巴巴主推的計(jì)算引擎框架,所以從去年開(kāi)始就越來(lái)越火了!雖然市面上講 Flink 的太少太少,國(guó)內(nèi)的中文資料太欠缺,已有的幾本書(shū)籍也不甚詳盡,但是國(guó)內(nèi)在阿里的推動(dòng)下,我相信 Flink 會(huì)越來(lái)越火的,并且阿里內(nèi)部也將 Flink 做了一定的優(yōu)化和修改,叫 Blink,今年年初也將源碼貢獻(xiàn)到 Flink 上面,后面在 Flink 1.9 版本會(huì)將 Blink 的功能進(jìn)行合并到 Flink 上去。目前,阿里巴巴、騰訊、美團(tuán)、華為、滴滴出行、攜程、餓了么、愛(ài)奇藝、有贊、唯品會(huì)等大廠都已經(jīng)將 Flink 實(shí)踐于公司大型項(xiàng)目中,帶起了一波 Flink 風(fēng)潮,勢(shì)必也會(huì)讓 Flink 人才市場(chǎng)產(chǎn)生供不應(yīng)求的招聘現(xiàn)象。
04
我為什么要寫(xiě) Flink 專欄?
在這個(gè)過(guò)程中我持續(xù)記錄自己的 Flink 學(xué)習(xí)之路,目前已經(jīng)對(duì)外公布了 20+ 篇 Flink 的個(gè)人學(xué)習(xí)博客,同時(shí)好多對(duì) Flink 感興趣的童鞋也加我一起討論問(wèn)題。每天群里的童鞋會(huì)提很多遇到的 Flink 問(wèn)題,但是我發(fā)現(xiàn)得到的回答比較少,其實(shí)這并不是因?yàn)槿豪锎罄胁换钴S,而是因?yàn)榇蠹覍?duì) Flink 的了解還不是很多,比如有的是大數(shù)據(jù)工程師但之前是搞 Spark 這塊的,有的是轉(zhuǎn)大數(shù)據(jù)開(kāi)發(fā)的后端開(kāi)發(fā)工程師,有的是對(duì) Flink 這塊比較感興趣的研究生等。因?yàn)樽约壕褪菑?Flink 小白過(guò)來(lái)的,所以知道初學(xué)者可能會(huì)遇到的哪些問(wèn)題。當(dāng)你回首的時(shí)候,你可能會(huì)發(fā)現(xiàn),這么簡(jiǎn)單的問(wèn)題自己當(dāng)時(shí)那么費(fèi)力地折騰了半天都出不來(lái)。這種時(shí)候要是有人指點(diǎn)一下,可以節(jié)省多少功夫??!所以自己在心里萌生了一個(gè)想法:寫(xiě)一個(gè) Flink 專欄幫助大家盡快地從小白階段過(guò)渡到入門階段,然后再?gòu)娜腴T到能夠?qū)?Flink 用上,在生產(chǎn)環(huán)境真正把你的 Flink Job 運(yùn)行起來(lái),再做到能夠根據(jù)你生產(chǎn)環(huán)境出現(xiàn)的錯(cuò)誤進(jìn)行排查并解決,還能根據(jù)你的 Job 的運(yùn)行狀況進(jìn)一步優(yōu)化!