不知道你是否有過(guò)和我類(lèi)似的經(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ò)查詢(xún) ElasticSearch 數(shù)據(jù)來(lái)進(jìn)行判斷是否要告警。
從上面的幾個(gè)問(wèn)題我們就可以很明顯的發(fā)現(xiàn)這種架構(gòu)的瓶頸就在于 ElasticSearch 集群的寫(xiě)入和查詢(xún)能力,在海量的監(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 查詢(xún)數(shù)據(jù)增加 API 查詢(xún) 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)越多,主要分下面幾大類(lèi):
那么為了滿(mǎn)足這些實(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ì)等大廠(chǎng)都已經(jīng)將 Flink 實(shí)踐于公司大型項(xiàng)目中,帶起了一波 Flink 風(fēng)潮,勢(shì)必也會(huì)讓 Flink 人才市場(chǎng)產(chǎn)生供不應(yīng)求的招聘現(xiàn)象。
04
我為什么要寫(xiě) FLink 專(zhuān)欄?
在這個(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 專(zhuān)欄幫助大家盡快地從小白階段過(guò)渡到入門(mén)階段,然后再?gòu)娜腴T(mén)到能夠?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)化!
專(zhuān)欄亮點(diǎn)
全網(wǎng)首個(gè)使用最新版本 Flink 1.9 進(jìn)行內(nèi)容講解(該版本更新很大,架構(gòu)功能都有更新),領(lǐng)跑于目前市面上常見(jiàn)的 Flink 1.7 版本的教學(xué)課程。
包含大量的實(shí)戰(zhàn)案例和代碼去講解原理,有助于讀者一邊學(xué)習(xí)一邊敲代碼,達(dá)到更快,更深刻的學(xué)習(xí)境界。目前市面上的書(shū)籍沒(méi)有任何實(shí)戰(zhàn)的內(nèi)容,還只是講解純概念和翻譯官網(wǎng)。
在專(zhuān)欄高級(jí)篇中,根據(jù) Flink 常見(jiàn)的項(xiàng)目問(wèn)題提供了排查和解決的思維方法,并通過(guò)這些問(wèn)題探究了為什么會(huì)出現(xiàn)這類(lèi)問(wèn)題。
在實(shí)戰(zhàn)和案例篇,圍繞大廠(chǎng)公司的經(jīng)典需求進(jìn)行分析,包括架構(gòu)設(shè)計(jì)、每個(gè)環(huán)節(jié)的操作、代碼實(shí)現(xiàn)都有一一講解。
專(zhuān)欄內(nèi)容
預(yù)備篇
介紹實(shí)時(shí)計(jì)算常見(jiàn)的使用場(chǎng)景,講解 Flink 的特性,并且對(duì)比了 Spark Streaming、Structured Streaming 和 Storm 等大數(shù)據(jù)處理引擎,然后準(zhǔn)備環(huán)境并通過(guò)兩個(gè) Flink 應(yīng)用程序帶大家上手 Flink。
基礎(chǔ)篇
深入講解 Flink 中 Time、Window、Watermark、Connector 原理,并有大量文章篇幅(含詳細(xì)代碼)講解如何去使用這些 Connector(比如 Kafka、ElasticSearch、HBase、Redis、MySQL 等),并且會(huì)講解使用過(guò)程中可能會(huì)遇到的坑,還教大家如何去自定義 Connector。
進(jìn)階篇
講解 Flink 中 State、Checkpoint、Savepoint、內(nèi)存管理機(jī)制、CEP、Table/SQL API、Machine Learning 、Gelly。在這篇中不僅只講概念,還會(huì)講解如何去使用 State、如何配置 Checkpoint、Checkpoint 的流程和如何利用 CEP 處理復(fù)雜事件。
高級(jí)篇
重點(diǎn)介紹 Flink 作業(yè)上線(xiàn)后的監(jiān)控運(yùn)維:如何保證高可用、如何定位和排查反壓?jiǎn)栴}、如何合理的設(shè)置作業(yè)的并行度、如何保證 Exactly Once、如何處理數(shù)據(jù)傾斜問(wèn)題、如何調(diào)優(yōu)整個(gè)作業(yè)的執(zhí)行效率、如何監(jiān)控 Flink 及其作業(yè)?
實(shí)戰(zhàn)篇
教大家如何分析實(shí)時(shí)計(jì)算場(chǎng)景的需求,并使用 Flink 里面的技術(shù)去實(shí)現(xiàn)這些需求,比如實(shí)時(shí)統(tǒng)計(jì) PV/UV、實(shí)時(shí)統(tǒng)計(jì)商品銷(xiāo)售額 TopK、應(yīng)用 Error 日志實(shí)時(shí)告警、機(jī)器宕機(jī)告警。這些需求如何使用 Flink 實(shí)現(xiàn)的都會(huì)提供完整的代碼供大家參考,通過(guò)這些需求你可以學(xué)到 ProcessFunction、Async I/O、廣播變量等知識(shí)的使用方式。
系統(tǒng)案例篇
講解大型流量下的真實(shí)案例:如何去實(shí)時(shí)處理海量日志(錯(cuò)誤日志實(shí)時(shí)告警/日志實(shí)時(shí) ETL/日志實(shí)時(shí)展示/日志實(shí)時(shí)搜索)、基于 Flink 的百億數(shù)據(jù)實(shí)時(shí)去重實(shí)踐(從去重的通用解決方案 --> 使用 BloomFilter 來(lái)實(shí)現(xiàn)去重 --> 使用 Flink 的 KeyedState 實(shí)現(xiàn)去重)。
▲Flink 專(zhuān)欄思維導(dǎo)圖
多圖講解 Flink 知識(shí)點(diǎn)
▲Flink 支持多種時(shí)間語(yǔ)義
▲Flink 提供靈活的窗口
▲Flink On YARN
▲Flink Checkpoint
▲Flink 監(jiān)控
-
監(jiān)控平臺(tái)
+關(guān)注
關(guān)注
0文章
28瀏覽量
8538 -
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8899瀏覽量
137575
原文標(biāo)題:大數(shù)據(jù)計(jì)算引擎,你 pick 哪個(gè)?
文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論