Apache Flink項目的資深貢獻(xiàn)者Fabian Hueske和Vasiliki Kalavri展示了如何使用Flink DataStream API實現(xiàn)可伸縮的流式應(yīng)用,以及怎樣在業(yè)務(wù)環(huán)境中持續(xù)運行和維護(hù)這些應(yīng)用。流處理的理想應(yīng)用場景有很多,包括低延遲ETL、流式分析、實時儀表盤以及欺詐檢測、異常檢測和報警。你可以在任意類型的持續(xù)數(shù)據(jù)(包括用戶交互、金融交易和物聯(lián)網(wǎng)等數(shù)據(jù))生成后,立即對它們進(jìn)行處理。
了解有關(guān)分布式狀態(tài)化流處理的概念和挑戰(zhàn)。
探索Flink的系統(tǒng)架構(gòu),包括事件時間處理模式和容錯模型。
理解DataStream API的基礎(chǔ)知識和構(gòu)成要素,包括基于時間和有狀態(tài)的算子。
以精確一次的一致性讀寫外部系統(tǒng)。
部署和配置Flink集群。
對持續(xù)運行的流式應(yīng)用進(jìn)行運維。
帶你走近Apache Flink,一個為全世界多個最大規(guī)模級別的流處理應(yīng)用提供支持的開源框架。通過本書,你將探索并行流處理的基本概念并了解該技術(shù)與傳統(tǒng)批處理的區(qū)別。
"無論你是在流計算領(lǐng)域摸爬滾打了多年的老手,還是剛剛完成第一個流處理作業(yè)的初級軟件工程師和數(shù)據(jù)工程師,本書都是一本很棒的讀物。書中不但介紹了Flink,還涉及到很多流處理的核心基礎(chǔ)知識,有助于讀者技術(shù)性思維的提升。強烈推薦。”
——Ted Malaska
Capital One企業(yè)架構(gòu)總監(jiān)
Fabian Hueske是Apache Flink項目的PMC成員,他從Flink項目創(chuàng)始之初就開始參與貢獻(xiàn)。Fabian是data Artisans(現(xiàn)在的Ververica)公司的創(chuàng)始人之一,擁有柏林工業(yè)大學(xué)的計算機科學(xué)博士學(xué)位。
Vasiliki Kalavri是蘇黎世聯(lián)邦理工學(xué)院系統(tǒng)組的博士后研究員。她同樣也是Apache Flink項目的PMC成員。作為Flink早期貢獻(xiàn)者,Vasiliki參與了圖計算庫Gelly以及初期版本的Table API和流式SQL的建設(shè)工作。
崔星燦,加拿大約克大學(xué)博士后,分布式流處理技術(shù)和開源愛好者,Apache Flink Committer。
目錄
前言 .1
第1 章 狀態(tài)化流處理概述 .7
傳統(tǒng)數(shù)據(jù)處理架構(gòu) .8
事務(wù)型處理 8
分析型處理.9
狀態(tài)化流處理 11
事件驅(qū)動型應(yīng)用 .13
數(shù)據(jù)管道 14
流式分析 15
開源流處理的演變 .16
歷史回顧 17
Flink 快覽 18
運行首個Flink 應(yīng)用 .20
小結(jié) .23
第2 章 流處理基礎(chǔ) . 25
Dataflow 編程概述 25
Dataflow 圖 25
數(shù)據(jù)并行和任務(wù)并行 26
數(shù)據(jù)交換策略 .27
并行流處理 28
延遲和吞吐.28
數(shù)據(jù)流上的操作 .31
時間語義 .36
流處理場景下一分鐘的含義 37
處理時間 38
事件時間 39
水位線 40
處理時間與事件時間 41
狀態(tài)和一致性模型 .41
任務(wù)故障 43
結(jié)果保障 44
小結(jié) .46
第3 章 Apache Flink 架構(gòu) . 47
系統(tǒng)架構(gòu) .47
搭建Flink 所需組件 .48
應(yīng)用部署 50
任務(wù)執(zhí)行 51
高可用性設(shè)置 .52
Flink 中的數(shù)據(jù)傳輸 .54
基于信用值的流量控制 56
任務(wù)鏈接 57
事件時間處理 58
時間戳 59
水位線 59
水位線傳播和事件時間 61
時間戳分配和水位線生成 63
狀態(tài)管理 .64
算子狀態(tài) 65
鍵值分區(qū)狀態(tài) .66
狀態(tài)后端 68
有狀態(tài)算子的擴(kuò)縮容 68
檢查點、保存點及狀態(tài)恢復(fù) 71
一致性檢查點 .71
從一致性檢查點中恢復(fù) 72
Flink 檢查點算法 .74
檢查點對性能的影響 79
保存點 79
小結(jié) .82
第4 章 設(shè)置Apache Flink 開發(fā)環(huán)境 83
所需軟件 .83
在IDE 中運行和調(diào)試Flink 程序 .84
在IDE 中導(dǎo)入書中示例 .84
在IDE 中運行Flink 程序 .87
在IDE 中調(diào)試Flink 程序 88
創(chuàng)建Flink Maven 項目 89
小結(jié) .90
第5 章 DataStream API (1.7 版本) . 91
Hello, Flink! 91
設(shè)置執(zhí)行環(huán)境 .93
讀取輸入流.94
應(yīng)用轉(zhuǎn)換 94
輸出結(jié)果 95
執(zhí)行 96
轉(zhuǎn)換操作 .96
基本轉(zhuǎn)換 97
基于KeyedStream 的轉(zhuǎn)換 100
多流轉(zhuǎn)換 104
分發(fā)轉(zhuǎn)換 108
設(shè)置并行度 111
類型 . 112
支持的數(shù)據(jù)類型 . 113
為數(shù)據(jù)類型創(chuàng)建類型信息 116
顯式提供類型信息 . 117
定義鍵值和引用字段 . 118
字段位置 118
字段表達(dá)式. 119
鍵值選擇器.120
實現(xiàn)函數(shù) .121
函數(shù)類 121
Lambda 函數(shù) 122
富函數(shù) 123
導(dǎo)入外部和Flink 依賴 124
小結(jié) .125
第6 章 基于時間和窗口的算子 127
配置時間特性 127
分配時間戳和生成水位線 129
水位線、延遲及完整性問題 133
處理函數(shù) .134
時間服務(wù)和計時器 .136
向副輸出發(fā)送數(shù)據(jù) .138
CoProcessFunction .140
窗口算子 .141
定義窗口算子 .142
內(nèi)置窗口分配器 .143
在窗口上應(yīng)用函數(shù) .148
自定義窗口算子 .155
基于時間的雙流Join .167
基于間隔的Join .167
基于窗口的Join .168
處理遲到數(shù)據(jù) 170
丟棄遲到事件 .170
重定向遲到事件 .171
基于遲到事件更新結(jié)果 172
小結(jié) .174
第7 章 有狀態(tài)算子和應(yīng)用 . 175
實現(xiàn)有狀態(tài)函數(shù) 176
在RuntimeContext 中聲明鍵值分區(qū)狀態(tài) .176
通過ListCheckpointed 接口實現(xiàn)算子列表狀態(tài) .180
使用CheckpointedFunction 接口 .187
接收檢查點完成通知 189
為有狀態(tài)的應(yīng)用開啟故障恢復(fù) 190
確保有狀態(tài)應(yīng)用的可維護(hù)性 190
指定算子唯一標(biāo)識 .191
為使用鍵值分區(qū)狀態(tài)的算子定義最大并行度 192
有狀態(tài)應(yīng)用的性能及魯棒性 192
選擇狀態(tài)后端 .193
選擇狀態(tài)原語 .194
防止?fàn)顟B(tài)泄露 .195
更新有狀態(tài)應(yīng)用 198
保持現(xiàn)有狀態(tài)更新應(yīng)用 199
從應(yīng)用中刪除狀態(tài) .200
修改算子的狀態(tài) .200
可查詢式狀態(tài) .202
可查詢式狀態(tài)服務(wù)的架構(gòu)及啟用方式203
對外暴露可查詢式狀態(tài) 204
從外部系統(tǒng)查詢狀態(tài) 205
小結(jié) .207
第8 章 讀寫外部系統(tǒng) 209
應(yīng)用的一致性保障 .210
冪等性寫 211
事務(wù)性寫 211
內(nèi)置連接器 213
Apache Kafka 數(shù)據(jù)源連接器 214
Apache Kafka 數(shù)據(jù)匯連接器 218
文件系統(tǒng)數(shù)據(jù)源連接器 222
文件系統(tǒng)數(shù)據(jù)匯連接器 224
Apache Cassandra 數(shù)據(jù)匯連接器 .228
實現(xiàn)自定義數(shù)據(jù)源函數(shù) .232
可重置的數(shù)據(jù)源函數(shù) 233
數(shù)據(jù)源函數(shù)、時間戳及水位線 .235
實現(xiàn)自定義數(shù)據(jù)匯函數(shù) .236
冪等性數(shù)據(jù)匯連接器 238
事務(wù)性數(shù)據(jù)匯連接器 239
異步訪問外部系統(tǒng) .248
小結(jié) .251
第9 章 搭建Flink 運行流式應(yīng)用 253
部署模式 .253
獨立集群 254
Docker 256
Apache Hadoop YARN .258
Kubernetes 261
高可用性設(shè)置 266
獨立集群的HA 設(shè)置 267
YARN 上的HA 設(shè)置 268
Kubernetes 的HA 設(shè)置 270
集成Hadoop 組件 270
文件系統(tǒng)配置 272
系統(tǒng)配置 .274
Java 和類加載.275
CPU 275
內(nèi)存和網(wǎng)絡(luò)緩沖 .276
磁盤存儲 278
檢查點和狀態(tài)后端 .279
安全性 280
小結(jié) .281
第10 章 Flink 和流式應(yīng)用運維 283
運行并管理流式應(yīng)用 .283
保存點 284
通過命令行客戶端管理應(yīng)用 285
通過REST API 管理應(yīng)用 .292
在容器中打包并部署應(yīng)用 298
控制任務(wù)調(diào)度 302
控制任務(wù)鏈接 .302
定義處理槽共享組 .303
調(diào)整檢查點及恢復(fù) .305
配置檢查點.306
配置狀態(tài)后端 .309
配置故障恢復(fù) . 311
監(jiān)控Flink 集群和應(yīng)用 313
Flink Web UI 313
指標(biāo)系統(tǒng) 316
延遲監(jiān)控 322
配置日志行為 323
小結(jié) .324
第11 章 還有什么? 325
Flink 生態(tài)的其他組成部分 325
用于批處理的DataSet API .325
用于關(guān)系型分析的Table API 及SQL 326
用于復(fù)雜事件處理和模式匹配的FlinkCEP .326
用于圖計算的Gelly .327
歡迎加入社區(qū) 327