3dwoo大學簡體電腦書店
深入理解Flink核心設計與實踐原理
( 簡體 字)
作者:劉洋類別:1. -> 程式設計 -> 綜合
出版社:電子工業出版社深入理解Flink核心設計與實踐原理 3dWoo書號: 53768
詢問書籍請說出此書號!
有庫存
NT售價: 690
出版日:11/1/2020
頁數:488
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787121399114 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章 Apache Flink介紹
1.1 Apache Flink簡介
1.1.1 Apache Flink是什么
1.1.2 Apache Flink應用場景
1.2 Apache Flink組件
1.2.1 分層API
1.2.2 作業管理器、任務管理器、客戶端
第2章 Apache Flink的安裝與部署
2.1 本地模式
2.1.1 安裝JDK
2.1.2 下載并安裝Flink
2.1.3 本地模式集群
2.1.4 Windows系統部署
2.2 Standalone模式
2.2.1 配置集群免密登錄
2.2.2 部署Standalone模式的集群
2.3 YARN模式
2.3.1 在YARN集群中啟動一個長期運行的Flink集群
2.3.2 在YARN集群中運行Flink作業
2.3.3 Flink和YARN的交互方式
2.3.4 問題匯總
2.4 Flink集群高可用
2.4.1 Standalone模式下JobManager的高可用
2.4.2 YARN模式下JobManager的高可用
第3章 Apache Flink的基礎概念和通用API
3.1 基礎概念
3.1.1 數據集和數據流
3.1.2 Flink程序的組成
3.1.3 延遲計算
3.1.4 指定分組數據集合的鍵
3.1.5 指定轉換函數
3.1.6 支持的數據類型
3.2 Flink程序模型
3.2.1 程序和數據流
3.2.2 并行數據流
3.2.3 窗口
3.2.4 時間
3.2.5 有狀態計算
3.2.6 容錯檢查點
3.2.7 狀態后端
3.2.8 保存點
3.3 Flink程序的分布式執行模型
3.3.1 任務和任務鏈
3.3.2 任務槽和資源
3.4 Java的Lambda表達式
3.4.1 類型擦除
3.4.2 類型提示
第4章 流處理基礎操作
4.1 DataStream的基本概念
4.1.1 流處理示例程序
4.1.2 數據源
4.1.3 數據流的轉換操作
4.1.4 數據接收器
4.2 數據流基本操作
4.2.1 Map
4.2.2 FlatMap
4.2.3 Filter
4.2.4 KeyBy
4.2.5 Reduce
4.2.6 Aggregations
4.2.7 Split和Select
4.2.8 Project
4.2.9 Union
4.2.10 Connect和CoMap、CoFlatMap
4.2.11 Iterate
4.3 富函數
4.3.1 基本概念
4.3.2 代碼演示
4.4 任務鏈和資源組
4.4.1 默認鏈接
4.4.2 開啟新鏈接
4.4.3 禁用鏈接
4.4.4 設置任務槽共享組
4.5 物理分區
4.5.1 自定義分區策略
4.5.2 shuffle分區策略
4.5.3 broadcast分區策略
4.5.4 rebalance分區策略
4.5.5 rescale分區策略
4.5.6 forward分區策略
4.5.7 global分區策略
4.6 流處理的本地測試
4.6.1 本地執行環境
4.6.2 集合支持的數據源和數據接收器
4.6.3 單元測試
4.6.4 集成測試
4.7 分布式緩存
4.7.1 注冊分布式緩存文件
4.7.2 訪問分布式緩存文件
4.7.3 BLOB服務的配置參數
4.7.4 部署到集群中運行
4.8 將參數傳遞給函數
4.8.1 通過構造函數傳遞參數
4.8.2 使用ExecutionConfig傳遞參數
4.8.3 將命令行參數傳遞給函數
第5章 流處理中的狀態和容錯
5.1 有狀態計算
5.1.1 Operator狀態和Keyed狀態
5.1.2 托管的Keyed狀態
5.1.3 托管的Operator狀態
5.2 檢查點機制
5.2.1 先決條件
5.2.2 啟用和配置檢查點機制
5.2.3 目錄結構
5.2.4 其他相關的配置選項
5.3 狀態后端
5.3.1 MemoryStateBackend
5.3.2 FsStateBackend
5.3.3 RocksDBStateBackend
5.3.4 配置狀態后端
5.4 保存點機制
5.4.1 分配操作符id
5.4.2 保存點映射
5.4.3 保存點操作
5.4.4 保存點配置
5.5 廣播狀態
5.5.1 前置條件
5.5.2 廣播函數
5.5.3 代碼實現
5.6 調優檢查點和大狀態
5.6.1 監視狀態和檢查點
5.6.2 調優檢查點
5.6.3 使用異步檢查點操作
5.6.4 調優RocksDB
5.6.5 容量規劃
5.6.6 壓縮
第6章 流處理高級操作
6.1 窗口
6.1.1 窗口的基本概念
6.1.2 窗口分配器
6.1.3 窗口函數
6.1.4 窗口觸發器
6.1.5 窗口剔除器
6.1.6 允許數據延遲
6.1.7 窗口的快速實現方法
6.1.8 查看窗口使用組件
6.2 時間
6.2.1 時間語義
6.2.2 事件時間與水印
6.2.3 設置時間特性
6.3 數據流的連接操作
6.3.1 窗口Join
6.3.2 窗口CoGroup
6.3.3 間隔Join
6.4 側端輸出
6.4.1 基于復制數據流的方案
6.4.2 基于Split和Select的方案
6.4.3 基于側端輸出的方案
6.5 ProcessFunction
6.5.1 基本概念
6.5.2 計時器
6.6 自定義數據源函數
6.6.1 SourceFunction接口
6.6.2 ParallelSourceFunction接口
6.6.3 RichParallelSourceFunction抽象類
6.6.4 具備檢查點特性的數據源函數
6.7 自定義數據接收器函數
6.7.1 SinkFunction接口
6.7.2 RichSinkFunction抽象類
6.8 數據流連接器
6.8.1 內置連接器
6.8.2 數據源和數據接收器的容錯保證
6.8.3 Kafka連接器
6.8.4 安裝Kafka的注意事項
6.8.5 Kafka 1.0.0+ 連接器
6.8.6 Kafka消費者
6.8.7 Kafka生產者
6.8.8 Kafka連接器指標
第7章 批處理基礎操作
7.1 DataSet的基本概念
7.1.1 批處理示例程序
7.1.2 數據源
7.1.3 數據接收器
7.2 數據集的基本操作
7.2.1 Map
7.2.2 FlatMap
7.2.3 MapPartition
7.2.4 Filter
7.2.5 Project
7.2.6 Union
7.2.7 Distinct
7.2.8 GroupBy
7.2.9 Reduce
7.2.10 ReduceGroup
7.2.11 Aggregate
7.2.12 Join
7.2.13 OuterJoin
7.2.14 Cross
7.2.15 CoGroup
7.3 將參數傳遞給函數
7.4 廣播變量
7.4.1 注冊廣播變量
7.4.2 訪問廣播變量
7.4.3 代碼實現
7.5 物理分區
7.5.1 Rebalance
7.5.2 PartitionByHash
7.5.3 PartitionByRange
7.5.4 SortPartition
7.6 批處理的本地測試
7.6.1 本地執行環境
7.6.2 集合支持的數據源和數據接收器
第8章 Table API和SQL
8.1 基礎概念和通用API
8.1.1 添加依賴
8.1.2 第一個Hello World表程序
8.1.3 表程序的公共結構
8.1.4 創建一個TableEnvironment
8.1.5 在目錄中注冊表
8.1.6 查詢一個表
8.1.7 DataStream和DataSet API的集成
8.1.8 數據類型到表模式的映射
8.1.9 查詢優化
8.2 SQL
8.2.1 指定一個查詢
8.2.2 SQL支持的語法
8.2.3 SQL操作
8.2.4 數據類型
8.2.5 保留關鍵字
8.3 Table API
8.4 自定義函數
8.4.1 標量函數
8.4.2 表函數
8.4.3 聚合函數
8.4.4 自定義函數與運行環境集成
8.5 SQL客戶端
8.5.1 啟動SQL客戶端
8.5.2 配置參數
8.5.3 分離的SQL查詢
8.5.4 SQL客戶端中的視圖
8.5.5 SQL客戶端中的時態表
第9章 流處理中的Table API和SQL
9.1 動態表
9.1.1 動態表和連續查詢
9.1.2 在數據流中定義動態表
9.1.3 動態表到數據流的轉換
9.2 時間屬性
9.2.1 基本概念
9.2.2 組窗口
9.2.3 處理時間
9.2.4 事件時間
9.3 動態表的Join
9.3.1 常規Join
9.3.2 時間窗口Join
9.4 時態表
9.4.1 需求背景
9.4.2 時態表函數
9.5 查詢配置
9.5.1 查詢配置對象
9.5.2 空閑狀態保留時間
9.6 連接外部系統
9.6.1 概述
9.6.2 表模式
9.6.3 更新模式
9.6.4 表格式
9.6.5 表連接器
9.6.6 未統一的TableSources和TableSinks
第10章 執行管理
10.1 執行參數
10.1.1 在ExecutionEnvironment中設置參數
10.1.2 在ExecutionConfig中設置參數
10.2 并行執行
10.2.1 操作符級別
10.2.2 執行環境級別
10.2.3 客戶端級別
10.2.4 系統級別
10.2.5 設置最大并行度
10.3 重啟策略
10.3.1 固定延遲重啟策略
10.3.2 故障率重啟策略
10.3.3 沒有重新啟動策略
10.3.4 回退重啟策略
10.4 程序打包和部署
10.4.1 打包Flink程序
10.4.2 Web UI(Web管控臺)提交
10.4.3 命令行客戶端提交
10.5 命令行接口
10.5.1 將Flink程序提交到Flink集群
10.5.2 列出集群中的作業
10.5.3 調整集群中的作業
10.5.4 保存點操作命令
10.6 執行計劃
10.6.1 在線可視化工具
10.6.2 Web管控臺可視化
本書從Apache Flink的緣起開始,由淺入深,理論結合實踐,全方位地介紹Apache Flink這一處理海量數據集的高性能工具。本書圍繞部署、流處理、批處理、Table API和SQL四大模塊進行講解,并詳細說明Apache Flink的每個特性的實際業務背景,使讀者不僅能編寫可運行的Apache Flink程序代碼,還能深刻理解并正確地將其運用到合適的生產業務環境中。雖然本書是以Apache Flink技術框架來講解流計算技術的,但是流計算領域開發所面臨的各種問題同樣是Java后端開發者在進行服務端開發時所要面臨的,如有狀態計算、Exactly Once語義等。因此,Apache Flink框架為解決這些問題而設計的方案同樣值得Java后端開發者借鑒。本書適合初級和中級軟件工程師閱讀,未接觸過流計算領域的Java開發者也可以從本書中獲益。針對初學者,本書提供Windows環境搭建的演示,使不具備Linux系統操作經驗的讀者也可以快速學習Apache Flink。
為什么要寫這本書?
最近幾年,在Apache Flink(簡稱Flink)社區的推動下,國內越來越多的公司開始應用Flink去解決生產問題。筆者在2019年便開始全面從Storm轉到Flink。當時正值Flink在國內推廣的起步階段,相關系統性學習資料較少,因此筆者只能通過閱讀Flink官網和瀏覽Flink框架源碼進行學習,踩了不計其數的“雷”。例如,某些特性因為相關描述較少,導致初學者無法真正理解該特性所解決的實際業務背景,或者因為某些特性的示例代碼不全,導致初學者無法快速使用該特性編寫可運行的代碼。本書按照筆者的學習過程來編寫大綱,可以幫助初學者快速入門Flink,避免在學習過程中出現各種不必要的問題而浪費時間。
本書介紹的Flink的常用特性都附帶完整的可運行代碼,供讀者上手實踐。完整代碼可在筆者的GitHub上下載。
本書內容
本書共10章,其中第2、3、10章是讀者必須閱讀的章節,其他章節讀者可以結合自己的業務情況閱讀。
第1章主要介紹Flink分布式處理框架的背景、特性及應用場景。讀者可以快速閱讀本章以建立對Flink的基本認識。
第2章主要介紹Flink的多種部署方式,重點講解了它的單機部署、Standalone模式部署、YARN模式部署及相應的高可用設置。讀者可以根據自己的業務需求選擇其中一種方式搭建Flink。
第3章主要介紹Flink分布式開發的基礎概念。這些概念是流處理和批處理開發中的通用概念,為此讀者需要仔細閱讀本章后再根據自己的業務需求選擇閱讀相關流處理章節、批處理章節或Table&SQL章節的內容。
第4章主要介紹Flink的流處理開發的基本功能,包括讀取數據和輸出數據,以及對數據流進行各種轉換操作等,同時還講解了如何對開發的Flink應用程序進行本地測試。讀者在閱讀完本章后便可以使用Flink進行一些非關鍵業務程序的開發工作。
第5章主要介紹Flink在流處理開發中對有狀態計算的支持,包括檢查點機制、保存點機制、各種狀態后端等。讀者在閱讀完本章后便可以使用Flink進行一些關鍵業務程序的開發工作。
第6章主要介紹Flink在流處理開發中的高級功能,如窗口操作、時間處理、連接操作、側端輸出操作,以及自定義數據源和自定義數據接收器,同時講解了Apache Kafka連接器對數據源和數據接收器的支持。讀者在閱讀完本章后便可以使用Flink進行一些關鍵且復雜的業務程序的開發工作。
第7章主要介紹Flink在批處理開發中的基本操作,包括讀取數據和輸出數據,以及對數據集進行的各種轉換操作等。讀者在閱讀完本章后便可以使用Flink進行一些離線批處理任務的開發工作。
第8章主要介紹Flink的Table API和SQL如何統一流處理和批處理。Table API和SQL借助Apache Calcite進行查詢的解析、校驗和優化。它們可以簡化用戶的開發工作。針對一些常規的業務,開發者只需要寫SQL,Flink會自動將SQL轉化為流程序或批程序去執行。
第9章主要介紹Table API和SQL在流處理中的一些特別情況,包括動態表、時間屬性和時態表等。
第10章主要介紹Flink中部署程序的基本操作,包括配置程序的執行參數、程序的并行度、程序的重啟策略、發布程序的方式等。
術語約定
?Sink稱為接收器。
?DataStream中的數據集合稱為數據流,DataSet中的數據集合稱為數據集,數據集內部也是數據流。Flink程序中的數據集合統指數據流或數據集。
?Keyed狀態稱為鍵控狀態。
?SideOutput稱為側端輸出。
?Evictor稱為剔除器。
?Temporal Table稱為時態表。
?流處理表稱為流表。
?數據流中的一條數據(元素)也稱為一個事件。
?Flink集群中運行的Flink程序稱為作業。
?RichFunction稱為富函數。
?Window稱為窗口。
?Interval Join稱為間隔連接。
?Kafka中的數據稱為消息。
?Kafka消息的Value稱為消息的主體,消息的Key仍稱為Key,Key與Value的組合稱為Kafka消息。
?DataStream和DataSet上的轉換方法稱為操作符。
本書是以Flink 的1.7版本為基礎編寫的,示例代碼均用Java語言進行編寫,同時本書的大部分代碼均可運行在Flink 的1.8、1.9、1.10版本上。在本書的下載資源中提供了1.8、1.9、1.10版本的變動詳情說明,版本變動主要體現在底層優化上,在API的使用方式上并無太大變動,大的差異在于SQL模塊(例如在基于流處理的SQL模塊中增加了新的特性,以及集成Hive等)。 對本書的勘誤也可以在此網頁上提交。
由于個人能力有限,書中難免有疏漏之處,歡迎讀者批評指正。

劉洋
pagetop