深入理解Flink核心設(shè)計(jì)與實(shí)踐原理
定 價(jià):138 元
- 作者:劉洋
- 出版時(shí)間:2020/11/1
- ISBN:9787121399114
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP274
- 頁(yè)碼:488
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
本書(shū)從Apache Flink的緣起開(kāi)始,由淺入深,理論結(jié)合實(shí)踐,全方位地介紹Apache Flink這一處理海量數(shù)據(jù)集的高性能工具。本書(shū)圍繞部署、流處理、批處理、Table API和SQL四大模塊進(jìn)行講解,并詳細(xì)說(shuō)明Apache Flink的每個(gè)特性的實(shí)際業(yè)務(wù)背景,使讀者不僅能編寫(xiě)可運(yùn)行的Apache Flink程序代碼,還能深刻理解并正確地將其運(yùn)用到合適的生產(chǎn)業(yè)務(wù)環(huán)境中。雖然本書(shū)是以Apache Flink技術(shù)框架來(lái)講解流計(jì)算技術(shù)的,但是流計(jì)算領(lǐng)域開(kāi)發(fā)所面臨的各種問(wèn)題同樣是Java后端開(kāi)發(fā)者在進(jìn)行服務(wù)端開(kāi)發(fā)時(shí)所要面臨的,如有狀態(tài)計(jì)算、Exactly Once語(yǔ)義等。因此,Apache Flink框架為解決這些問(wèn)題而設(shè)計(jì)的方案同樣值得Java后端開(kāi)發(fā)者借鑒。本書(shū)適合初級(jí)和中級(jí)軟件工程師閱讀,未接觸過(guò)流計(jì)算領(lǐng)域的Java開(kāi)發(fā)者也可以從本書(shū)中獲益。針對(duì)初學(xué)者,本書(shū)提供Windows環(huán)境搭建的演示,使不具備Linux系統(tǒng)操作經(jīng)驗(yàn)的讀者也可以快速學(xué)習(xí)Apache Flink。
國(guó)家認(rèn)證軟件設(shè)計(jì)師,獲得Apache Kylin管理員認(rèn)證,F(xiàn)任某上市咨詢公司高級(jí)咨詢顧問(wèn),有多年大數(shù)據(jù)、流式計(jì)算方面的開(kāi)發(fā)經(jīng)驗(yàn),對(duì)Hadoop、Strom、Flink等大數(shù)據(jù)計(jì)算引擎有著非常深入的理解,積累了豐富的項(xiàng)目實(shí)踐經(jīng)驗(yàn)。先后利用相關(guān)技術(shù)為銀行、保險(xiǎn)、能源等領(lǐng)域的頭部企業(yè)解決業(yè)務(wù)痛點(diǎn)。個(gè)人技術(shù)博客:www.cnblogs.com/intsmaze個(gè)人Github項(xiàng)目:github.com/intsmaze
目錄
第1章 Apache Flink介紹
1.1 Apache Flink簡(jiǎn)介
1.1.1 Apache Flink是什么
1.1.2 Apache Flink應(yīng)用場(chǎng)景
1.2 Apache Flink組件
1.2.1 分層API
1.2.2 作業(yè)管理器、任務(wù)管理器、客戶端
第2章 Apache Flink的安裝與部署
2.1 本地模式
2.1.1 安裝JDK
2.1.2 下載并安裝Flink
2.1.3 本地模式集群
2.1.4 Windows系統(tǒng)部署
2.2 Standalone模式
2.2.1 配置集群免密登錄
2.2.2 部署Standalone模式的集群
2.3 YARN模式
2.3.1 在YARN集群中啟動(dòng)一個(gè)長(zhǎng)期運(yùn)行的Flink集群
2.3.2 在YARN集群中運(yùn)行Flink作業(yè)
2.3.3 Flink和YARN的交互方式
2.3.4 問(wèn)題匯總
2.4 Flink集群高可用
2.4.1 Standalone模式下JobManager的高可用
2.4.2 YARN模式下JobManager的高可用
第3章 Apache Flink的基礎(chǔ)概念和通用API
3.1 基礎(chǔ)概念
3.1.1 數(shù)據(jù)集和數(shù)據(jù)流
3.1.2 Flink程序的組成
3.1.3 延遲計(jì)算
3.1.4 指定分組數(shù)據(jù)集合的鍵
3.1.5 指定轉(zhuǎn)換函數(shù)
3.1.6 支持的數(shù)據(jù)類型
3.2 Flink程序模型
3.2.1 程序和數(shù)據(jù)流
3.2.2 并行數(shù)據(jù)流
3.2.3 窗口
3.2.4 時(shí)間
3.2.5 有狀態(tài)計(jì)算
3.2.6 容錯(cuò)檢查點(diǎn)
3.2.7 狀態(tài)后端
3.2.8 保存點(diǎn)
3.3 Flink程序的分布式執(zhí)行模型
3.3.1 任務(wù)和任務(wù)鏈
3.3.2 任務(wù)槽和資源
3.4 Java的Lambda表達(dá)式
3.4.1 類型擦除
3.4.2 類型提示
第4章 流處理基礎(chǔ)操作
4.1 DataStream的基本概念
4.1.1 流處理示例程序
4.1.2 數(shù)據(jù)源
4.1.3 數(shù)據(jù)流的轉(zhuǎn)換操作
4.1.4 數(shù)據(jù)接收器
4.2 數(shù)據(jù)流基本操作
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 富函數(shù)
4.3.1 基本概念
4.3.2 代碼演示
4.4 任務(wù)鏈和資源組
4.4.1 默認(rèn)鏈接
4.4.2 開(kāi)啟新鏈接
4.4.3 禁用鏈接
4.4.4 設(shè)置任務(wù)槽共享組
4.5 物理分區(qū)
4.5.1 自定義分區(qū)策略
4.5.2 shuffle分區(qū)策略
4.5.3 broadcast分區(qū)策略
4.5.4 rebalance分區(qū)策略
4.5.5 rescale分區(qū)策略
4.5.6 forward分區(qū)策略
4.5.7 global分區(qū)策略
4.6 流處理的本地測(cè)試
4.6.1 本地執(zhí)行環(huán)境
4.6.2 集合支持的數(shù)據(jù)源和數(shù)據(jù)接收器
4.6.3 單元測(cè)試
4.6.4 集成測(cè)試
4.7 分布式緩存
4.7.1 注冊(cè)分布式緩存文件
4.7.2 訪問(wèn)分布式緩存文件
4.7.3 BLOB服務(wù)的配置參數(shù)
4.7.4 部署到集群中運(yùn)行
4.8 將參數(shù)傳遞給函數(shù)
4.8.1 通過(guò)構(gòu)造函數(shù)傳遞參數(shù)
4.8.2 使用ExecutionConfig傳遞參數(shù)
4.8.3 將命令行參數(shù)傳遞給函數(shù)
第5章 流處理中的狀態(tài)和容錯(cuò)
5.1 有狀態(tài)計(jì)算
5.1.1 Operator狀態(tài)和Keyed狀態(tài)
5.1.2 托管的Keyed狀態(tài)
5.1.3 托管的Operator狀態(tài)
5.2 檢查點(diǎn)機(jī)制
5.2.1 先決條件
5.2.2 啟用和配置檢查點(diǎn)機(jī)制
5.2.3 目錄結(jié)構(gòu)
5.2.4 其他相關(guān)的配置選項(xiàng)
5.3 狀態(tài)后端
5.3.1 MemoryStateBackend
5.3.2 FsStateBackend
5.3.3 RocksDBStateBackend
5.3.4 配置狀態(tài)后端
5.4 保存點(diǎn)機(jī)制
5.4.1 分配操作符id
5.4.2 保存點(diǎn)映射
5.4.3 保存點(diǎn)操作
5.4.4 保存點(diǎn)配置
5.5 廣播狀態(tài)
5.5.1 前置條件
5.5.2 廣播函數(shù)
5.5.3 代碼實(shí)現(xiàn)
5.6 調(diào)優(yōu)檢查點(diǎn)和大狀態(tài)
5.6.1 監(jiān)視狀態(tài)和檢查點(diǎn)
5.6.2 調(diào)優(yōu)檢查點(diǎn)
5.6.3 使用異步檢查點(diǎn)操作
5.6.4 調(diào)優(yōu)RocksDB
5.6.5 容量規(guī)劃
5.6.6 壓縮
第6章 流處理高級(jí)操作
6.1 窗口
6.1.1 窗口的基本概念
6.1.2 窗口分配器
6.1.3 窗口函數(shù)
6.1.4 窗口觸發(fā)器
6.1.5 窗口剔除器
6.1.6 允許數(shù)據(jù)延遲
6.1.7 窗口的快速實(shí)現(xiàn)方法
6.1.8 查看窗口使用組件
6.2 時(shí)間
6.2.1 時(shí)間語(yǔ)義
6.2.2 事件時(shí)間與水印
6.2.3 設(shè)置時(shí)間特性
6.3 數(shù)據(jù)流的連接操作
6.3.1 窗口Join
6.3.2 窗口CoGroup
6.3.3 間隔Join
6.4 側(cè)端輸出
6.4.1 基于復(fù)制數(shù)據(jù)流的方案
6.4.2 基于Split和Select的方案
6.4.3 基于側(cè)端輸出的方案
6.5 ProcessFunction
6.5.1 基本概念
6.5.2 計(jì)時(shí)器
6.6 自定義數(shù)據(jù)源函數(shù)
6.6.1 SourceFunction接口
6.6.2 ParallelSourceFunction接口
6.6.3 RichParallelSourceFunction抽象類
6.6.4 具備檢查點(diǎn)特性的數(shù)據(jù)源函數(shù)
6.7 自定義數(shù)據(jù)接收器函數(shù)
6.7.1 SinkFunction接口
6.7.2 RichSinkFunction抽象類
6.8 數(shù)據(jù)流連接器
6.8.1 內(nèi)置連接器
6.8.2 數(shù)據(jù)源和數(shù)據(jù)接收器的容錯(cuò)保證
6.8.3 Kafka連接器
6.8.4 安裝Kafka的注意事項(xiàng)
6.8.5 Kafka 1.0.0+ 連接器
6.8.6 Kafka消費(fèi)者
6.8.7 Kafka生產(chǎn)者
6.8.8 Kafka連接器指標(biāo)
第7章 批處理基礎(chǔ)操作
7.1 DataSet的基本概念
7.1.1 批處理示例程序
7.1.2 數(shù)據(jù)源
7.1.3 數(shù)據(jù)接收器
7.2 數(shù)據(jù)集的基本操作
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 將參數(shù)傳遞給函數(shù)
7.4 廣播變量
7.4.1 注冊(cè)廣播變量
7.4.2 訪問(wèn)廣播變量
7.4.3 代碼實(shí)現(xiàn)
7.5 物理分區(qū)
7.5.1 Rebalance
7.5.2 PartitionByHash
7.5.3 PartitionByRange
7.5.4 SortPartition
7.6 批處理的本地測(cè)試
7.6.1 本地執(zhí)行環(huán)境
7.6.2 集合支持的數(shù)據(jù)源和數(shù)據(jù)接收器
第8章 Table API和SQL
8.1 基礎(chǔ)概念和通用API
8.1.1 添加依賴
8.1.2 第一個(gè)Hello World表程序
8.1.3 表程序的公共結(jié)構(gòu)
8.1.4 創(chuàng)建一個(gè)TableEnvironment
8.1.5 在目錄中注冊(cè)表
8.1.6 查詢一個(gè)表
8.1.7 DataStream和DataSet API的集成
8.1.8 數(shù)據(jù)類型到表模式的映射
8.1.9 查詢優(yōu)化
8.2 SQL
8.2.1 指定一個(gè)查詢
8.2.2 SQL支持的語(yǔ)法
8.2.3 SQL操作
8.2.4 數(shù)據(jù)類型
8.2.5 保留關(guān)鍵字
8.3 Table API
8.4 自定義函數(shù)
8.4.1 標(biāo)量函數(shù)
8.4.2 表函數(shù)
8.4.3 聚合函數(shù)
8.4.4 自定義函數(shù)與運(yùn)行環(huán)境集成
8.5 SQL客戶端
8.5.1 啟動(dòng)SQL客戶端
8.5.2 配置參數(shù)
8.5.3 分離的SQL查詢
8.5.4 SQL客戶端中的視圖
8.5.5 SQL客戶端中的時(shí)態(tài)表
第9章 流處理中的Table API和SQL
9.1 動(dòng)態(tài)表
9.1.1 動(dòng)態(tài)表和連續(xù)查詢
9.1.2 在數(shù)據(jù)流中定義動(dòng)態(tài)表
9.1.3 動(dòng)態(tài)表到數(shù)據(jù)流的轉(zhuǎn)換
9.2 時(shí)間屬性
9.2.1 基本概念
9.2.2 組窗口
9.2.3 處理時(shí)間
9.2.4 事件時(shí)間
9.3 動(dòng)態(tài)表的Join
9.3.1 常規(guī)Join
9.3.2 時(shí)間窗口Join
9.4 時(shí)態(tài)表
9.4.1 需求背景
9.4.2 時(shí)態(tài)表函數(shù)
9.5 查詢配置
9.5.1 查詢配置對(duì)象
9.5.2 空閑狀態(tài)保留時(shí)間
9.6 連接外部系統(tǒng)
9.6.1 概述
9.6.2 表模式
9.6.3 更新模式
9.6.4 表格式
9.6.5 表連接器
9.6.6 未統(tǒng)一的TableSources和TableSinks
第10章 執(zhí)行管理
10.1 執(zhí)行參數(shù)
10.1.1 在ExecutionEnvironment中設(shè)置參數(shù)
10.1.2 在ExecutionConfig中設(shè)置參數(shù)
10.2 并行執(zhí)行
10.2.1 操作符級(jí)別
10.2.2 執(zhí)行環(huán)境級(jí)別
10.2.3 客戶端級(jí)別
10.2.4 系統(tǒng)級(jí)別
10.2.5 設(shè)置最大并行度
10.3 重啟策略
10.3.1 固定延遲重啟策略
10.3.2 故障率重啟策略
10.3.3 沒(méi)有重新啟動(dòng)策略
10.3.4 回退重啟策略
10.4 程序打包和部署
10.4.1 打包Flink程序
10.4.2 Web UI(Web管控臺(tái))提交
10.4.3 命令行客戶端提交
10.5 命令行接口
10.5.1 將Flink程序提交到Flink集群
10.5.2 列出集群中的作業(yè)
10.5.3 調(diào)整集群中的作業(yè)
10.5.4 保存點(diǎn)操作命令
10.6 執(zhí)行計(jì)劃
10.6.1 在線可視化工具
10.6.2 Web管控臺(tái)可視化