摘要:你將獲得什麼掌握 Flink 與其他計算框架的區別掌握 Flink Time/Window/Watermark/Connectors 概念和實現原理掌握 Flink State/Checkpoint/Savepoint 狀態與容錯熟練使用 DataStream/DataSet/Table/SQL API 開發 Flink 作業掌握 Flink 作業部署/運維/監控/性能調優學會如何分析並完成實時計算需求獲得大型高併發流量系統案例實戰項目經驗。深入講解 Flink 中 Time、Window、Watermark、Connector 原理,並有大量文章篇幅(含詳細代碼)講解如何去使用這些 Connector(比如 Kafka、ElasticSearch、HBase、Redis、MySQL 等),並且會講解使用過程中可能會遇到的坑,還教大家如何去自定義 Connector。

不知道你是否有過和我類似的經歷?

我是 2018 年 6 月加入公司,一直負責監控平臺的告警系統。之後,我們的整個監控平臺架構中途換過兩次,其中一次架構發生了巨大的變化。我們監控告警平臺最早的架構如下圖所示:

這個架構的挑戰難點在於:海量的監控數據(Metric & Log & Trace 數據)實時寫入 ElasticSearch;多維度的監控指標頁面展示(Dashboard) 查 ElasticSearch 的數據比較頻繁;不斷遞增的告警規則需要通過查詢 ElasticSearch 數據來進行判斷是否要告警。

從上面的幾個問題我們就可以很明顯的發現這種架構的瓶頸就在於 ElasticSearch 集羣的寫入和查詢能力,在海量的監控數據(Metric & Log & Trace 數據)下實時的寫入對 ElasticSearch 有極大的影響。

我依然清楚記得,當時經常因爲寫入的問題導致 ElasticSearch 集羣掛掉,從而讓我的告警和監控頁面(Dashboard)歇菜(那會老被噴:爲啥配置的告警規則沒有觸發告警?爲啥查看應用的 Dashboard 監控頁面沒數據)。我也很無奈啊,只想祈禱我們的 ElasticSearch 集羣穩一點。

01初次接觸 Flink

在如此糟糕的架構情況下,我們挺過了幾個月,後面由於一些特殊的原因,我們監控平臺組的整體做了一個很大的架構調整,如下圖:

主要做了四點改變:接入 Flink 集羣去消費 Kafka 數據,告警的 Flink Job 消費 Kafka 數據去判斷異常點,然後做告警Metric & Trace 數據存儲到 ElasticSearch,之前還存儲在 ElasticSearch 中的有 Log 數據Log 數據存儲到 CassandraDashboard 查詢數據增加 API 查詢 Cassandra 的日誌數據

原先因爲 Metric & Trace & Log 的數據量一起全部實時寫入到 ElasticSearch 中,對 ElasticSearch 的壓力很大,所以我們將 Log 的數據拆分存儲到 Cassandra 中,分擔了一些 ElasticSearch 的寫入壓力。

但是過後我們發現偶爾還會出現數據實時寫入到 ElasticSearch 集羣把 ElasticSearch 寫掛的情況。所以那會不斷調優我們的寫入數據到 ElasticSearch 的 Flink Job,然後也對 ElasticSearch 服務端做了不少的性能調優。

另外那會我們的監控數據是以 10s 一次爲單位將採集的數據發上來的,後面我們調整了下數據採集的策略(變成 30s 一次爲單位採集數據),採取多種調優策略後,終於將我們的 ElasticSearch 弄穩定了。

02遇到 Flink 相關的挑戰

替換成這種新架構後,由於組裏沒人熟悉 Flink,再加上那會兒 Flink 的資料真的很少很少,所以當時在組裏對 Flink 這塊大家都是從 0 開始學習,於大家而言挑戰還挺大的。

那時候我們跑在 Flink 上面的 Job 也遇到各種各樣的問題:消費 Kafka 數據延遲checkpoint 失敗窗口概念模糊、使用操作有誤Event Time 和 Processing Time 選擇有誤不知道怎麼利用 Watermark 機制來處理亂序和延遲的數據Flink 自帶的 Connector 的優化Flink 中的 JobManager 和 TaskManager 經常掛導致 Flink Job 重啓Flink 集羣模式的選型

...

因爲碰到的各種各樣的問題,所以纔會促使我們不斷地學習 Flink 的原理和內部機制,然後慢慢去解決上面遇到的各種問題,並逐步穩定我們監控平臺運行的 Flink Job。

03爲什麼要學習 Flink?

隨着大數據的不斷發展,對數據的及時性要求越來越高,實時場景需求也變得越來越多,主要分下面幾大類:

那麼爲了滿足這些實時場景的需求,衍生出不少計算引擎框架,現有市面上的大數據計算引擎的對比如下:

可以發現無論從 Flink 的架構設計上,還是從其功能完整性和易用性來講都是領先的,再加上 Flink 是阿里巴巴主推的計算引擎框架,所以從去年開始就越來越火了!

雖然市面上講 Flink 的太少太少,國內的中文資料太欠缺,已有的幾本書籍也不甚詳盡,但是國內在阿里的推動下,我相信 Flink 會越來越火的,並且阿里內部也將 Flink 做了一定的優化和修改,叫 Blink,今年年初也將源碼貢獻到 Flink 上面,後面在 Flink 1.9 版本會將 Blink 的功能進行合併到 Flink 上去。

目前,阿里巴巴、騰訊、美團、華爲、滴滴出行、攜程、餓了麼、愛奇藝、有贊、唯品會等大廠都已經將 Flink 實踐於公司大型項目中,帶起了一波 Flink 風潮,勢必也會讓 Flink 人才市場產生供不應求的招聘現象。

04我爲什麼要寫 FLink 專欄?

在這個過程中我持續記錄自己的 Flink 學習之路,目前已經對外公佈了 20+ 篇 Flink 的個人學習博客,同時好多對 Flink 感興趣的童鞋也加我一起討論問題。

每天羣裏的童鞋會提很多遇到的 Flink 問題,但是我發現得到的回答比較少,其實這並不是因爲羣裏大佬不活躍,而是因爲大家對 Flink 的瞭解還不是很多,比如有的是大數據工程師但之前是搞 Spark 這塊的,有的是轉大數據開發的後端開發工程師,有的是對 Flink 這塊比較感興趣的研究生等。

因爲自己就是從 Flink 小白過來的,所以知道初學者可能會遇到的哪些問題。當你回首的時候,你可能會發現,這麼簡單的問題自己當時那麼費力地折騰了半天都出不來。這種時候要是有人指點一下,可以節省多少功夫啊!

所以自己在心裏萌生了一個想法:寫一個 Flink 專欄幫助大家儘快地從小白階段過渡到入門階段,然後再從入門到能夠將 Flink 用上,在生產環境真正把你的 Flink Job 運行起來,再做到能夠根據你生產環境出現的錯誤進行排查並解決,還能根據你的 Job 的運行狀況進一步優化!

專欄亮點全網首個使用最新版本 Flink 1.9 進行內容講解(該版本更新很大,架構功能都有更新),領跑於目前市面上常見的 Flink 1.7 版本的教學課程。包含大量的實戰案例和代碼去講解原理,有助於讀者一邊學習一邊敲代碼,達到更快,更深刻的學習境界。目前市面上的書籍沒有任何實戰的內容,還只是講解純概念和翻譯官網。在專欄高級篇中,根據 Flink 常見的項目問題提供了排查和解決的思維方法,並通過這些問題探究了爲什麼會出現這類問題。

在實戰和案例篇,圍繞大廠公司的經典需求進行分析,包括架構設計、每個環節的操作、代碼實現都有一一講解。

在實戰和案例篇,圍繞大廠公司的經典需求進行分析,包括架構設計、每個環節的操作、代碼實現都有一一講解。

專欄內容預備篇

介紹實時計算常見的使用場景,講解 Flink 的特性,並且對比了 Spark Streaming、Structured Streaming 和 Storm 等大數據處理引擎,然後準備環境並通過兩個 Flink 應用程序帶大家上手 Flink。

基礎篇

深入講解 Flink 中 Time、Window、Watermark、Connector 原理,並有大量文章篇幅(含詳細代碼)講解如何去使用這些 Connector(比如 Kafka、ElasticSearch、HBase、Redis、MySQL 等),並且會講解使用過程中可能會遇到的坑,還教大家如何去自定義 Connector。

進階篇

講解 Flink 中 State、Checkpoint、Savepoint、內存管理機制、CEP、Table/SQL API、Machine Learning 、Gelly。在這篇中不僅只講概念,還會講解如何去使用 State、如何配置 Checkpoint、Checkpoint 的流程和如何利用 CEP 處理複雜事件。

高級篇

重點介紹 Flink 作業上線後的監控運維:如何保證高可用、如何定位和排查反壓問題、如何合理的設置作業的並行度、如何保證 Exactly Once、如何處理數據傾斜問題、如何調優整個作業的執行效率、如何監控 Flink 及其作業?

實戰篇

教大家如何分析實時計算場景的需求,並使用 Flink 裏面的技術去實現這些需求,比如實時統計 PV/UV、實時統計商品銷售額 TopK、應用 Error 日誌實時告警、機器宕機告警。這些需求如何使用 Flink 實現的都會提供完整的代碼供大家參考,通過這些需求你可以學到 ProcessFunction、Async I/O、廣播變量等知識的使用方式。

系統案例篇

講解大型流量下的真實案例:如何去實時處理海量日誌(錯誤日誌實時告警/日誌實時 ETL/日誌實時展示/日誌實時搜索)、基於 Flink 的百億數據實時去重實踐(從去重的通用解決方案 --> 使用 BloomFilter 來實現去重 --> 使用 Flink 的 KeyedState 實現去重)。

▲Flink 專欄思維導圖

多圖講解 Flink 知識點

▲Flink 支持多種時間語義

▲Flink 提供靈活的窗口

▲Flink On YARN

▲Flink Checkpoint

▲Flink 監控

掃碼瞭解 Flink 專欄詳情

專欄作者-zhisheng

在某大型公司擔任監控平臺研發工程師,負責實時計算引擎開發和流式告警,現專注於實時計算開發工作。

擅長 Flink、kafka、ElasticSearch 等大數據組件的項目開發和管理等。

專欄作者-範瑞

現就職於北京微鯉科技有限公司,負責數據倉庫的研發、集羣維護及 Flink 實時流處理開發。兩年內經歷了公司數據量的爆炸式增長,從中收益良多。

你將獲得什麼掌握 Flink 與其他計算框架的區別掌握 Flink Time/Window/Watermark/Connectors 概念和實現原理掌握 Flink State/Checkpoint/Savepoint 狀態與容錯熟練使用 DataStream/DataSet/Table/SQL API 開發 Flink 作業掌握 Flink 作業部署/運維/監控/性能調優學會如何分析並完成實時計算需求獲得大型高併發流量系統案例實戰項目經驗

作者介紹適宜人羣Flink 愛好者實時計算開發工程師大數據開發工程師計算機專業研究生

有實時計算場景場景的 Java 開發工程師

有實時計算場景場景的 Java 開發工程師

相關文章