官术网_书友最值得收藏!

前言

為什么要寫本書

近些年來,流計算技術發展迅速,被廣泛應用于數據ETL、數據BI、實時數據倉庫建設和AI等方面。Flink作為流計算領域的一顆璀璨的明星,自問世以來發展迅猛,其技術生態圈也日益壯大,現已成為Apache頂級開源項目中最活躍的項目之一。很多企業選擇用Flink來構建其流計算體系或流批一體體系,使用on YARN或on Kubernetes部署模式來進行大規模生產。

轉眼間,我從事Flink研發工作已經4年,其間我對Flink的1.2、1.3、1.5、1.8、1.9、1.11和1.13版本源代碼進行維護和改造,提供Flink大規模集群生產支持,并在公司內提供業務解決方案。在為業務方提供支持的過程中,我逐漸萌生寫一本剖析Flink內部機制的書的想法,原因有二。

其一,隨著流計算的流行和應用于大規模生產,公司對Flink的性能、可用性和效能等方面的要求更加迫切,因而更加需要流計算方面的人才,尤其是擁有Flink性能調優、可用性和效能等方面經驗的人才。而單純查看官方文檔,對Flink機制的認識只能流于黑盒形式。只有深入源代碼才能深刻理解Flink的內部機制,才能更好地進行性能調優,做好可用性保障和優化,以及做好效能方面的優化。

其二,市場上缺少深入剖析Flink源代碼和設計的圖書。我希望借助自己多年從事大規模生產以及進行多個Flink版本維護與改造的經驗,對Flink的設計與實現進行深入剖析,幫助讀者更好地了解Flink源代碼與機制。

通過了解源代碼,讀者能有以下收獲:

  • 編寫出更健壯的流計算代碼;
  • 更好地對流計算作業進行調優,使得作業性能更高;
  • 更好地維護Flink引擎,并對Flink引擎進行二次開發。

讀者對象

本書適合以下幾類人員閱讀:

  • 流計算開發人員、大數據開發人員;
  • 大數據架構人員;
  • 對Flink計算引擎底層感興趣的相關人員。

本書特色

  • 基于使用方式及其背后的原理、原理背后的設計及源代碼實現來剖析Flink內部機制,由淺入深。
  • 盡量用圖來展示原理和機制,以便于讀者理解。
  • 盡可能結合實際生產分析Flink內部機制,對讀者的實際生產具有指導意義。
  • 講解的設計和實現原理有助于讀者提升架構設計與實現能力。

本書結構與內容

本書基于Flink 1.9版本的源代碼來解析Flink。全書共11章,主要內容如下。

  • 第1章 閱讀Flink源代碼前的準備

主要介紹Flink源代碼閱讀環境準備以及Flink的設計理念和基本架構,包括Flink源代碼的導入流程和調試方式,Flink與Hadoop MapReduce、Spark的設計差異,以及Flink的分層架構和運行時架構。

  • 第2章 編程模型與API

主要介紹Flink DataStream的算子的使用和實現原理。首先講解DataStream底層的轉換,接著介紹常用算子(如FlatMap、Join、Aggregation、Union),最后解析窗口的設計與實現。

  • 第3章 運行時組件與通信

深入剖析運行時組件、組件間通信及運行時組件的高可用。首先介紹運行時組件REST、Dispatcher、ResourceManager、JobMaster和TaskExecutor,接著介紹運行時組件間通信的框架Akka,并以Slot申請為例講解運行時組件之間的通信,最后介紹運行時組件高可用的功能、存在的問題及其解決方案。

  • 第4章 狀態管理與容錯

從狀態、檢查點、狀態后端三個概念入手,對Flink狀態管理和容錯的設計與實現進行深度剖析。

  • 第5章 任務提交與執行

主要介紹Flink任務提交的整個流程,從客戶端、JobManager和TaskManager端對應任務各個階段的轉換入手進行深入的梳理與分析。

  • 第6章 Flink網絡棧

首先介紹Flink的內存管理機制,然后講解什么是Flink網絡棧以及網絡傳輸流程,其中涵蓋Flink的兩種背壓實現方式,最后介紹流批一體的shuffle架構的設計和實現。

  • 第7章 Flink Connector的設計與實現

首先以Kafka Connector為切入點介紹Connector模塊設計時需要考慮的消費、分區管理、一致性語義保障等關鍵問題,然后以HBase為例介紹SQL/Table Connector的使用和實現原理。

  • 第8章 部署模式

主要介紹Flink中常用的三種部署模式:Local模式、Standalone模式和第三方部署模式。首先介紹用于本地調試的Local模式、Standalone模式中Session模式的構建與實現,然后介紹Flink on YARN的Session模式和Per-Job模式的設計與實現,最后介紹Flink on Kubernetes基于YAML的實現。

  • 第9章 Flink Table與SQL

主要介紹Flink Table與SQL中StreamTableEnvironment的實現過程、SQL的解析過程、Table Connector以及UDF和內置算子的實現。

  • 第10章 Flink CEP原理解析

主要介紹Flink CEP的基本概念和語法,如何使用Flink CEP編寫作業,以及Flink CEP內部基于NFA的實現原理。

  • 第11章 Flink監控

主要介紹Flink監控指標、常用系統指標和監控體系的建設,以及常用的定位手段。

勘誤與支持

由于作者的水平有限,加之寫作時間倉促,書中難免存在不妥之處。為此,我們在GitHub上創建了本書專屬工程(https://github.com/streaming-olap/deep-in-flink-book)來支持在線反饋。大家如有任何意見或建議,歡迎在該工程下創建issue,我們會盡快處理。

致謝

感謝Flink社區提供了如此優秀的流處理框架。

感謝我們的家人和朋友,沒有他們的支持和鼓勵,我們不可能完成本書。

感謝機械工業出版社華章公司的編輯楊福川和羅詞亮,他們的細致工作讓本書得以順利出版。

謹以此書獻給大數據行業的關注者和建設者!

羅江宇
2021年12月

主站蜘蛛池模板: 南投市| 武陟县| 南华县| 黄浦区| 北票市| 邹平县| 霍山县| 松潘县| 巴彦县| 宾川县| 闸北区| 连平县| 岗巴县| 象山县| 灵川县| 虹口区| 财经| 久治县| 宜川县| 和龙市| 滨海县| 沁阳市| 云霄县| 武山县| 昌吉市| 绥芬河市| 黄平县| 苏尼特左旗| 凌云县| 高雄市| 昭平县| 资溪县| 天水市| 灵川县| 天祝| 广安市| 武宁县| 德阳市| 江阴市| 宜君县| 乐昌市|