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