Flink 原理與實踐

魯蔚徵

  • Flink 原理與實踐-preview-1
  • Flink 原理與實踐-preview-2
Flink 原理與實踐-preview-1

買這商品的人也買了...

商品描述

本書圍繞大數據流處理領域,介紹Flink DataStream API、時間和窗口、狀態和檢查點、Table API和SQL等知識。本書以實踐為導向,使用大量真實業務場景案例來演示如何基於Flink進行流處理。

本書主要面向對大數據領域感興趣的本科生、研究生,想轉行到大數據開發行業的在職人員,或有一定大數據開發經驗的相關從業人員。讀者最好有一定的Java或Scala編程基礎,掌握電腦領域的常見技術概念。

作者簡介

魯蔚徵
前小米工程師,現中國人民大學教師,一直從事大數據相關的開發和研究工作,關注大數據行業的發展,先後接觸了Hadoop、Hive、Kafka、Spark、TensorFlow等大數據中間件,在大數據的流處理和批處理方向上有一定的實際工作經驗。
主要研究項目及領域為推薦系統、大數據。
今日頭條科技領域優質創作者。

目錄大綱

第1章大數據技術概述................ 1
1.1什麼是大數據..................... ............ 2
1.1.1大數據的5個“V” ....................... 2
1.1. 2大數據分而治之............................... 3
1.2從批處理到流處理....... ................... 6
1.2.1數據與數據流....................... ............ 6
1.2.2批處理與流處理............................. .. 7
1.2.3為什麼需要一個優秀的
流處理框架.................................... .... 7
1.3代表性大數據技術.......................... 9
1.3.1 Hadoop ........ .................................... 9
1.3.2 Spark ......... ...................................... 10
1.3.3 Apache Kafka ...... ......................... 11
1.3.4 Flink .................... ............................. 12
1.4從Lambda到Kappa:
大數據處台的.................. 13
1.4.1 Lambda架構..................... ........... 14
1.4.2 Kappa架構................................. ... 15
1.5流處理基礎概念........................... 16
1.5.1延遲和吞吐....... .............................. 16
1.5.2窗口與時間............. ........................ 17
1.5.3狀態與檢查點.................. ............... 20
1.5.4數據一致性保障........................... .. 21
1.6編程語言的選擇........................... 21
1.6.1 Java和Scala ........ ......................... 21
1.6.2 Python .................... ........................ 22
1.6.3 SQL ..................... ............................. 23
1.7案例實戰使用Kafka構建
文本數據流........... ....................... 23
1.7.1 Kafka和消息隊列相關
背景知識........................................ ..23
1.7.2使用Kafka構建一個
文本數據流..................................... .24
本章小結............................................. 26

第2章大數據必備編程知識...... 27
2.1繼承和多態............................. ..... 28
2.1.1繼承、類和接口.............................28
2.1.2重寫與重載.....................................30
2.1.3繼承和多態小結.. ...........................32
2.2泛型................... ......................... 32
2.2.1 Java中的泛型................ ................32
2.2.2 Scala中的泛型......................... .....35
2.2.3泛型小結...................................... ...36
2.3函數式編程.................................. 36
2.3.1函數式編程思想簡介.....................36
2.3.2 Lambda表達式的內部結構........37
2.3. 3函數式接口.....................................38
2.3.4 Java Stream API .. .........................40
2.3.5函數式編程小結................. ............41
2.4案例實戰Flink開發環境搭建........ 42
2.4.1準備所需軟件.............. ...................42
2.4.2下載並安裝Flink ....................... ....43
2.4.3創建Flink工程..............................43
2.4.4調試和運行Flink程序..................48
2.4.5運行程序.......................... ...............50
Flink原理與實踐
本章小結............................ ................. 53

第3章Flink的設計與
運行原理....................... .... 54
3.1 Flink數據流圖簡介....................... 55
3.1.1 Flink程序和數據流圖.................. 55
3.1.2從邏輯視圖轉化為物理執行圖.... 57
3.1.3數據交換策略................................. 58
3.2 Flink分佈式架構與核心組件........ .. 59
3.2.1 Flink作業提交過程....................... 59
3.2.2 Flink核心組件.......... ..................... 60
3.2.3 Flink組件棧...................... ............. 61
3.3任務執行與資源劃分..................... 63
3.3.1再談邏輯視圖到物理執行圖........ 63
3.3.2任務、算子子任務與算子鏈........ 64
3.3.3 Slot與計算資源......... ................... 65
3.4實驗WordCount程序
迭代和完善....................... ........... 67
一、實驗目的.................................. ............ 67
二、實驗內容................................. ............. 67
三、實驗要求.............................................. 68
四、實驗報告............................................. . 68
本章小結............................................. 68

第4章DataStream API的
介紹和使用....................... 70
4.1 Flink程序的骨架結構........... ........ 71
4.1.1設置執行環境................................. 71
4.1 .2讀取數據源..................................... 72
4.1.3行轉換作................................. 72
4.1.4結果輸出........... .............................. 73
4.1.5執行............... ...................................73
4.2常見Transformation的
使用方法........ ............................. 73
4.2.1單數據流基本轉換............ .............74
4.2.2基於Key的分組轉換....................78
4.2.3多數據流轉換.................................84
4.2.4並行度與數據重分佈.....................86
4.3數據類型和序列化...................... .. 92
4.3.1 Flink支持的數據類型...................92
4.3.2 TypeInformation ............... ..........96
4.3.3註冊類.................................. ............98
4.3.4 Avro、Kryo、Thrift和
Protobuf ........................... ..............99
4.3.5數據類型的選擇.......................... 103
4.4用戶自定義函數.......................... 104
4.4.1接口............... ................................ 104
4.4.2 Lambda表達式........... ............... 105
4.4.3 Rich函數類............................ ..... 108
4.5實驗股票價格數據流處理........... 109
一、實驗目的............................................ 109
二、實驗內容............................................ 110
三、實驗要求............................................ 111
四、實驗報告............................................ 112
本章小結.. ......................................... 112

第5章時間和窗口.. .................. 113
5.1 Flink的時間語義........................ 114
5.1 .1 Flink的3種時間語義............... 114
5.1.2設置時間語義.................... .......... 115
5.1.3 Event Time和Watermark ..... 116
5.1.4分佈式環境下Watermark的
傳播................ ................................ 116
5.1.5設置時間戳及生成
Watermark ........ .......................... 118
5.1.6衡延遲和準確性............... ...... 123
5.2 ProcessFunction系列函數........ 123
5.2.1 Timer的使用方法...................... 123
5.2.2側輸出.. ........................................ 126
5.2.3在兩個數據流上使用
ProcessFunction ....................... 127
5.3窗口算子的使用.................. ........ 129
5.3.1窗口程序的骨架結構................. 129
5.3.2內置的3種窗口劃分方法..... .... 131
5.3.3窗口處理函數.............................. 135
5.3.4拓展和自定義窗口..................... 141
5.4雙流連接......................... .......... 146
5.4.1 Window Join ............................. 146
5.4.2 Interval Join ............................... 149
5.5處理遲到數據............. ................ 150
5.5.1將遲到數據發送到另外一個
數據流........................................... 151
5.5.2更新計算結果.............................. 151
5.6實驗股票價格數階分析........ 153
一、實驗目的........................................... 153
二、實驗內容........................................... 153
三、實驗要求. .......................................... 154
四、實驗報告... ........................................ 154
本章小結....... .................................... 154

第6章狀態和檢查點...... .......... 155
6.1實現有狀態的計算...................... 156
6.1.1為什麼要管理狀態... .................. 156
6.1.2 Flink中幾種常用的狀態........... 157
6.1.3橫向擴展問題... ........................... 159
6.1.4 Keyed State的使用方法.......... 160
6.1.5 Operator List State的
使用方法....................................... 165
6.1.6 BroadcastState的使用方法. ... 169
6.2 Checkpoint機制的原理及
配置方法................................... 173
6.2. 1 Flink分佈式快照流程................ 173
6.2.2分佈式快照性能優化方案......... 177
6.2.3 State Backend ... ........................ 177
6.2.4 Checkpoint相關配置............... 179
6.2.5重啟恢復流程.............................. 180
6.3 Savepoint機制的原理及
使用方法........ ........................... 182
6.3.1 Savepoint機制與Checkpoint
機制的區別............ ....................... 182
6.3.2 Savepoint的使用方法............. 183
6.3.3讀/寫Savepoint中的數據...... 184
6.3.4 Queryable State和
State Processor API ................... 194
6.4實驗電台用戶行為分析........ 195
一、實驗目的............................... ............. 195
二、實驗內容................................ ............ 195
三、實驗要求................................. ........... 195
四、實驗報告.................................. .......... 195
本章小結..................................... ...... 195

第7章Flink連接器................ 196
7.1 Flink端到端的
Exactly-Once保障........... ........ 197
7.1.1故障恢復與一致性保障............. 197
7.1.2冪等寫............ ............................... 198
7.1.3事務寫............. .............................. 199
7.2自定義Source和Sink ............. .. 200
7.2.1 Flink 1.11之前的Source ........ 200
7.2.2 Flink 1.11之後的Source ........ 205
Flink原理與實踐
7.2.3自定義Sink ................................. 205
7.3 Flink中常用的Connector .......... 211
7.3.1內置I/O接口.............................. 212
7.3.2 Flink Kafka Connector ........... 217
7.4實驗讀取並輸出股票價格
數據流...................... ................ 220
一、實驗目的............................. .............. 220
二、實驗內容............................... ............ 220
三、實驗要求................................. .......... 220
四、實驗報告................................... ........ 221
本章小結....................................... .... 221

第8章Table API & SQL的
介紹和使用..................... 222
8.1 Table API & SQL綜述...... ........ 223
8.1.1 Table API & SQL程序的
骨架結構....................................... 223
8.1.2創建TableEnvironment ... ....... 224
8.1.3獲取表..................................... ..... 227
8.1.4在表上執行語句.......................... 228
8.1.5將表結果輸出.. ............................ 229
8.1.6執行作業................ ...................... 229
8.1.7獲取表的具體方式................... .. 231
8.2動態表和持續查詢...................... 233
8.2.1動態表和持續查詢.......... ........... 233
8.2.2流處理的限制.............................. 237
8.2.3狀態過期時間.............................. 238
8.3時間和窗口......... ....................... 238
8.3.1時間屬性..................... ................. 238
8.3.2窗口聚合........................... ........... 241
8.4 Join .......................................... 249
8.4.1時間窗口Join ............................ 250
8.4.2臨時表Join .............. .................. 251
8.4.3傳統意義上的Join ..................... 254
8.5 SQL DDL ................................. 256
8.5.1註冊和獲取表....... ....................... 256
8.5.2 USE和SHOW語句.................. 258
8.5.3 CREATE、DROP、
ALTER語句.................................. 259
8.5.4 INSERT語句. .............................. 262
8.6系統內置函數............... .............. 263
8.6.1標量函數.............................. ........ 264
8.6.2聚合函數.................................... .. 269
8.6.3時間單位...................................... 269
8.7用戶自定義函數.......................... 270
8.7.1註冊函數............. ......................... 270
8.7.2標量函數................... ................... 270
8.7.3表函數......................... .................. 272
8.7.4聚合函數.......................... ............ 274
8.8實驗使用Flink SQL處理
IoT數據............................. ....... 277
一、實驗目的...................................... ...... 277
二、實驗內容....................................... ..... 277
三、實驗要求........................................ .... 278
四、實驗報告......................................... ... 279
本章小結........................................... 279

第9章Flink的部署和配置.... 280
9.1 Flink集群部署模式..................... 281
9.1.1 Standalone集群....................... 281
9.1.2 Hadoop YARN集群............... .. 282
9.1.3 Kubernetes集群....................... 285
9.2配置文件............... .................... 287
9.2.1 Java和類加載...................... ....... 288
9.2.2並行度與槽位劃分...................... 289
9.2.3內存...... ........................................ 290
9.2.4磁盤..... ......................................... 294
9.3算子鏈與槽位共享...................... 294
9.3.1設置算子鏈.................... .............. 294
9.3.2設置槽位共享............................ .. 295
9.4命令行工具................................ 296
9.4.1提交作業..... ................................. 297
9.4.2管理作業........... ........................... 298
9.5與Hadoop集成........................ 299
9.5.1添加Hadoop Classpath ......... 299
9.5.2將Hadoop依添加到
9.5.3本地調試...................................... 300
9.6實驗作業編碼、與提交........ 301
一、實驗目的................................. ........... 301
二、實驗內容.................................. .......... 301
三、實驗要求................................... ......... 301
四、實驗報告.................................... ........ 301
本章小結....................................... .... 301

參考文獻......................................... 302