《大數據技術叢書 Flink原理、實戰與性能優化》

      網友投稿 760 2025-04-01

      大數據技術叢書

      Flink原理、實戰與性能優化

      《大數據技術叢書 Flink原理、實戰與性能優化》

      張利兵 著

      Preface

      前  言

      為什么要寫這本書

      記得在幾年前剛開始做流式計算相關的項目時,發覺項目對實時性和數據量的要求很高,無奈求助于Flink開源社區(后文簡稱“社區”),在社區中發現可以使用的流式框架有很多,例如比較主流的框架Apache Storm、Spark Streaming等,Apache Flink(簡稱“Flink”)也在其中。于是筆者開始對各種流式框架進行詳細研究,最后發現能同時支持低延遲、高吞吐、Excactly-once的框架只有Apache Flink,從那時起筆者就對Flink這套框架充滿興趣,不管是其架構還是接口,都可以發現其中包含了非常優秀的設計思想。雖然當時Flink在社區的成熟度并不是很高,但筆者還是決定將Flink應用在自己的項目中,自此開啟了Flink分布式計算技術應用之旅。

      剛開始學習Flink,對于沒有分布式處理技術和流式計算經驗的人來說會相對比較困難,因為其很難理解有狀態計算、數據一致性保障等概念。尤其在相關中文資源比較匱乏的情況下,需要用戶在官網以及國外的技術網站中翻閱大量的外文資料,這在一定程度上對學習和應用Flink造成了阻礙。筆者在2018年參加了一場由Flink中文社區組織的線下交流活動,當時聽了很多領域內專家將Flink應用在不同業務場景中的分享,發現Flink這項技術雖然優秀,但是國內尚未有一本能夠全面介紹Flink的中文書籍,于是筆者決定結合自己的實際項目經驗來完成一本Flink中文書籍,以幫助他人學習和使用Flink這項優秀的分布式處理技術。

      阿里巴巴在2018年1月開源了其內部Flink的分支項目Blink,并推動社區將Blink中優秀的特性合并到Flink主干版本中,一時間Flink在國內的發展被推向了高潮,成為很多公司想去嘗試使用的新技術。因此筆者相信未來會有更多的開發者參與到Flink社區中來,Flink也將在未來的大數據生態中占據舉足輕重的位置。

      讀者對象

      本書從多個方面對Flink進行了深入介紹,包括原理、多種抽象接口的使用,以及Flink的性能監控與調優等方面,因此本書比較適合以下類型的讀者。

      流計算開發工程師

      大數據架構工程師

      大數據開發工程師

      數據挖掘工程師

      高校研究生以及高年級本科生

      如何閱讀本書

      本書共分為10章,各章節間具有一定的先后關系,對于剛入門的讀者,建議從第1章開始循序漸進地學習。

      對于有一定經驗的讀者可以自行選擇章節開始學習。如果想使用Flink開發流式應用,則可以直接閱讀第4章、第5章,以及第7章之后的內容;如果想使用Flink開發批計算應用,則可以選擇閱讀第5章以及第7章之后的內容。

      勘誤和支持

      除封面署名外,參加本書編寫工作的還有:張再勝、尚越、程龍、姚遠等。由于筆者水平有限,編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。由于Flink技術的參考資料相對較少,因此書中有些地方參考了Flink官方文檔,讀者也可以結合Flink官網來學習。書中的全部源文件可以從GitHub網站下載,地址為https://github.com/zhanglibing1990/learning-flink。同時筆者也會將相應的功能及時更新。如果你有更多寶貴的意見可以通過QQ群686656574或電子郵箱zhanglibing1990@126.com聯系筆者,期待能夠得到你們的真摯反饋。

      致謝

      在本書的寫作過程中,得到了很多朋友及同事的幫助和支持,在此表示衷心感謝!

      感謝我的女朋友,因為有你的支持,我才能堅持將本書順利完成,謝謝你一直陪伴在我的身邊,不斷鼓勵我前行。

      感謝機械工業出版社華章公司的編輯楊福川和張錫鵬,在這半年多的時間中始終支持我的寫作,你們的鼓勵和幫助引導我順利完成全部書稿。

      謹以此書獻給我最親愛的家人,以及眾多熱愛Flink的朋友!

      總結

      本書最開始介紹Flink的發展歷史,然后對Flink批數據和流數據的不同處理接口進行介紹,再對Flink的部署與實施、性能優化等方面進行全面講解。經過系統完整地了解和學習Flink分布式處理技術之后,可以發現Flink有很多非常先進的概念,以及非常完善的接口設計,這些都能讓用戶更加有效地處理大數據,特別是流式數據處理。隨著大數據技術的不斷發展,Flink也在大數據的浪潮中奮勇前行。越來越多的用戶也參與到Flink社區的開發中,尤其是近年來隨著阿里巴巴的推進,Blink的開源在一定程度上推動了Flink在國內大規模的落地。相信在不久的將來,Flink會逐漸成為國內乃至全球不可或缺的分布式處理引擎,筆者也相信Flink在流式數據處理領域會有新的突破,能夠改變目前大部分基于批處理的模式,讓分布式數據處理變得更加高效,使得數據處理成本不斷降低。

      張利兵

      2019年

      目  錄 Contents

      前言

      第1章 Apache Flink介紹? 1

      1.1 Apache Flink是什么? 1

      1.2 數據架構的演變? 2

      1.2.1 傳統數據基礎架構? 3

      1.2.2 大數據數據架構? 4

      1.2.3 有狀態流計算架構? 5

      1.2.4 為什么會是Flink? 6

      1.3 Flink應用場景? 8

      1.4 Flink基本架構? 10

      1.4.1 基本組件棧? 10

      1.4.2 基本架構圖? 11

      1.5 本章小結? 13

      第2章 環境準備? 14

      2.1 運行環境介紹? 14

      2.2 Flink項目模板? 15

      2.2.1 基于Java實現的項目模板? 15

      2.2.2 基于Scala實現的項目模板? 18

      2.3 Flink開發環境配置? 20

      2.3.1 下載IntelliJ IDEA IDE? 21

      2.3.2 安裝Scala Plugins? 21

      2.3.3 導入Flink應用代碼? 22

      2.3.4 項目配置? 22

      2.4 運行Scala REPL? 24

      2.4.1 環境支持? 24

      2.4.2 運行程序? 24

      2.5 Flink源碼編譯? 25

      2.6 本章小結? 26

      第3章 Flink編程模型? 27

      3.1 數據集類型? 27

      3.2 Flink編程接口? 29

      3.3 Flink程序結構? 30

      3.4 Flink數據類型? 37

      3.4.1 數據類型支持? 37

      3.4.2 TypeInformation信息獲取? 40

      3.5 本章小結? 43

      第4章 DataStream API 介紹與使用? 44

      4.1 DataStream編程模型? 44

      4.1.1 DataSources數據輸入? 45

      4.1.2 DataSteam轉換操作? 49

      4.1.3 DataSinks數據輸出? 59

      4.2 時間概念與Watermark? 61

      4.2.1 時間概念類型? 61

      4.2.2 EventTime和Watermark? 63

      4.3 Windows窗口計算? 69

      4.3.1 Windows Assigner? 70

      4.3.2 Windows Function? 77

      4.3.3 Trigger窗口觸發器? 83

      4.3.4 Evictors數據剔除器? 87

      4.3.5 延遲數據處理? 88

      4.3.6 連續窗口計算? 89

      4.3.7 Windows多流合并? 90

      4.4 作業鏈和資源組? 95

      4.4.1 作業鏈? 95

      4.4.2 Slots資源組? 96

      4.5 Asynchronous I/O異步操作? 97

      4.6 本章小結? 98

      第5章 Flink狀態管理和容錯? 100

      5.1 有狀態計算? 100

      5.2 Checkpoints和Savepoints? 109

      5.2.1 Checkpoints檢查點機制? 109

      5.2.2 Savepoints機制? 111

      5.3 狀態管理器? 114

      5.3.1 StateBackend類別? 114

      5.3.2 狀態管理器配置? 116

      5.4 Querable State? 118

      5.5 本章小結? 123

      第6章 DataSet API介紹與使用? 124

      6.1 DataSet API? 124

      6.1.1 應用實例? 125

      6.1.2 DataSources數據接入? 126

      6.1.3 DataSet轉換操作? 128

      6.1.4 DataSinks數據輸出? 134

      6.2 迭代計算? 136

      6.2.1 全量迭代? 136

      6.2.2 增量迭代? 137

      6.3 廣播變量與分布式緩存? 139

      6.3.1 廣播變量? 139

      6.3.2 分布式緩存? 140

      6.4 語義注解? 141

      6.4.1 Forwarded Fileds注解? 141

      6.4.2 Non-Forwarded Fileds注解? 143

      6.4.3 Read Fields注解? 144

      6.5 本章小結? 145

      第7章 Table API & SQL介紹與使用? 146

      7.1 TableEnviroment概念? 146

      7.1.1 開發環境構建? 147

      7.1.2 TableEnvironment基本操作? 147

      7.1.3 外部連接器? 155

      7.1.4 時間概念? 162

      7.1.5 Temporal Tables臨時表? 166

      7.2 Flink Table API? 167

      7.2.1 Table API應用實例? 167

      7.2.2 數據查詢和過濾? 168

      7.2.3 窗口操作? 168

      7.2.4 聚合操作? 173

      7.2.5 多表關聯? 175

      7.2.6 集合操作? 177

      7.2.7 排序操作? 178

      7.2.8 數據寫入? 179

      7.3 Flink SQL使用? 179

      7.3.1 Flink SQL實例? 179

      7.3.2 執行SQL? 180

      7.3.3 數據查詢與過濾? 181

      7.3.4 Group Windows窗口操作? 182

      7.3.5 數據聚合? 184

      7.3.6 多表關聯? 186

      7.3.7 集合操作? 187

      7.3.8 數據輸出? 189

      7.4 自定義函數? 189

      7.4.1 Scalar Function? 189

      7.4.2 Table Function? 191

      7.4.3 Aggregation Function? 192

      7.5 自定義數據源? 193

      7.5.1 TableSource定義? 193

      7.5.2 TableSink定義? 196

      7.5.3 TableFactory定義? 199

      7.6 本章小結? 201

      第8章 Flink組件棧介紹與使用? 202

      8.1 Flink復雜事件處理? 202

      8.1.1 基礎概念? 203

      8.1.2 Pattern API? 204

      8.1.3 事件獲取? 210

      8.1.4 應用實例? 212

      8.2 Flink Gelly圖計算應用? 213

      8.2.1 基本概念? 213

      8.2.2 Graph API? 214

      8.2.3 迭代圖處理? 220

      8.2.4 圖生成器? 226

      8.3 FlinkML機器學習應用? 227

      8.3.1 基本概念? 227

      8.3.2 有監督學習算子? 229

      8.3.3 數據預處理? 231

      8.3.4 推薦算法? 234

      8.3.5 Pipelines In FlinkML? 235

      8.4 本章小結? 236

      第9章 Flink部署與應用? 237

      9.1 Flink集群部署? 237

      9.1.1 Standalone Cluster部署? 238

      9.1.2 Yarn Cluster部署? 240

      9.1.3 Kubernetes Cluster部署? 244

      9.2 Flink高可用配置? 247

      9.2.1 Standalone集群高可用配置? 248

      9.2.2 Yarn Session集群高可用配置? 250

      9.3 Flink安全管理? 251

      9.3.1 認證目標? 251

      9.3.2 認證配置? 252

      9.3.3 SSL配置? 253

      9.4 Flink集群升級? 255

      9.4.1 任務重啟? 256

      9.4.2 狀態維護? 256

      9.4.3 版本升級? 257

      9.5 本章小結? 258

      第10章 Flink監控與性能優化? 259

      10.1 監控指標? 259

      10.1.1 系統監控指標? 259

      10.1.2 監控指標注冊? 261

      10.1.3 監控指標報表? 264

      10.2 Backpressure監控與優化? 266

      10.2.1 Backpressure進程抽樣? 266

      10.2.2 Backpressure頁面監控? 267

      10.2.3 Backpressure配置? 268

      10.3 Checkpointing監控與優化? 268

      10.3.1 Checkpointing頁面監控? 268

      10.3.2 Checkpointing優化? 271

      10.4 Flink內存優化? 273

      10.4.1 Flink內存配置? 274

      10.4.2 Network Buffers配置? 275

      10.5 本章小結? 277

      Apache 分布式 大數據

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:企業管理中,流程管理不可忽略!這幾步教你破解流程管理難題,流程型企業打造生產運營管控一體化的幾個路徑
      下一篇:?2018中國國際智能機器人產業展
      相關文章
      久久夜色精品国产亚洲av | 亚洲日本va一区二区三区| 亚洲午夜久久久久久噜噜噜| 亚洲AV无码不卡在线观看下载 | 亚洲日韩国产一区二区三区在线| 亚洲黄色网站视频| 久久精品亚洲中文字幕无码麻豆| 国产V亚洲V天堂无码久久久| 亚洲精品美女久久777777| 亚洲精品一品区二品区三品区| 国产亚洲精品无码成人| 日韩亚洲欧洲在线com91tv| 亚洲va久久久噜噜噜久久天堂| 国产亚洲综合一区柠檬导航| 亚洲AV无码第一区二区三区| 日产亚洲一区二区三区| 亚洲国产精品线观看不卡| 亚洲人成日本在线观看| 亚洲一欧洲中文字幕在线| 亚洲视频无码高清在线| 亚洲欧美中文日韩视频| 久久亚洲中文字幕无码| 亚洲成人一区二区| 国产自偷亚洲精品页65页| 亚洲精品国产精品乱码不99| 亚洲精品成人av在线| 亚洲系列国产精品制服丝袜第| 亚洲一欧洲中文字幕在线| 亚洲欧美日韩综合久久久| 精品久久久久久久久亚洲偷窥女厕| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 国产啪亚洲国产精品无码| 亚洲午夜精品久久久久久浪潮| 亚洲中文字幕无码一区二区三区| 亚洲精品无码久久久久sm| 亚洲AV区无码字幕中文色| 亚洲熟妇无码爱v在线观看| 亚洲日本久久久午夜精品 | 亚洲av无码精品网站| 中文字幕亚洲色图| 亚洲日本久久一区二区va|