《Flink實戰派》是2021年電子工業出版社出版的圖書,作者是龍中華。
基本介紹
- 中文名:Flink實戰派
- 作者:龍中華
- 出版時間:2021年4月1日
- 出版社:電子工業出版社
- 頁數:396 頁
- ISBN:9787121408526
- 定價:109 元
- 開本:16 開
內容簡介,圖書目錄,作者簡介,
內容簡介
本書針對Flink 1.11版本和Alink 1.2版本,採用“知識點+實例”的形式編寫,包括47個基於知識點的實例和1個綜合項目實例。
第1章對大數據和人工智慧進行初步介紹;第2章用一個實例總覽Flink的關鍵知識點;第3~5章介紹Flink的架構、開發基礎和轉換運算元;第6、7、10、11章深入講解4種開發Flink應用程式的API;第8、9章講解操作Flink狀態(計算和容錯)的狀態處理器API和用於處理複雜事件(異常檢測、反欺詐、風險控制)的CEP庫;第12章講解Flink如何與其他外部系統集成,並實現Flink與Kafka的集成;第13章介紹機器學習的基礎知識;第14章講解機器學習框架Alink的知識和實戰套用;第15章是項目實戰,使用大數據和機器學習技術實現一個廣告推薦系統(包含離線訓練、線上訓練、實時預測和線上服務)。
本書可以作為具備Java基礎的開發人員、大數據領域從業人員的參考用書。閱讀本書的讀者不需要具備高等數學知識和人工智慧的底層算法知識。
圖書目錄
入門篇
第1章 進入大數據和人工智慧世界 2
1.1 認識大數據和人工智慧 2
1.2 認識Flink 4
1.2.1 Flink是什麼 4
1.2.2 Flink的發展歷程 4
1.2.3 Flink的套用場景 6
1.3 認識Alink 6
1.4 如何使用本書的源碼 6
-
第2章 【實例1】使用Flink的4種API處理無界數據流和有界數據流 8
2.1 創建Flink應用程式 8
2.2 使用DataSet API處理有界數據流 10
2.2.1 編寫批處理代碼 10
2.2.2 配置依賴作用域 11
2.2.3 測試Flink應用程式 12
2.3 使用DataStream API處理無界數據流 12
2.3.1 自定義無界數據流數據源 12
2.3.2 編寫無界數據流處理代碼 13
2.3.3 使用DataStream API的視窗功能處理無界數據流 14
2.4 使用Table API處理無界數據流和有界數據流 16
2.4.1 處理無界數據流 16
2.4.2 處理有界數據流 17
2.5 使用SQL處理無界數據流和有界數據流 19
2.5.1 處理無界數據流 19
2.5.2 處理有界數據流 19
2.6 生成執行計畫圖 20
-
基礎篇
第3章 概覽Flink 24
3.1 了解流處理和批處理 24
3.1.1 數據流 24
3.1.2 流處理 25
3.1.3 流式的批處理 26
3.1.4 有狀態流處理 27
3.1.5 並行數據流 28
3.2 Flink的整體架構 29
3.2.1 部署層 30
3.2.2 執行引擎層 30
3.2.3 核心API層 30
3.2.4 領域庫層 30
3.3 Flink的編程接口 31
3.3.1 有狀態實時流處理接口 31
3.3.2 核心API(DataStream API/DataSet API) 32
3.3.3 Table API和SQL 33
3.3.4 比較DataStream API、DataSet API、Table API和SQL 34
3.4 Flink的項目依賴 34
3.4.1 Flink核心依賴和用戶的應用程式依賴 35
3.4.2 流處理應用程式和批處理應用程式所需的依賴 35
3.4.3 Table API和SQL的依賴 36
3.4.4 Connector和Library的依賴 38
3.4.5 Hadoop的依賴 38
3.5 了解分散式執行引擎的環境 38
3.5.1 作業管理器、任務管理器、客戶端 38
3.5.2 任務插槽和資源 40
3.5.3 Flink應用程式的執行 41
-
第4章 Flink開發基礎 43
4.1 開發Flink應用程式的流程 43
4.1.1 了解Flink應用程式的結構 43
4.1.2 配置執行環境和參數 44
4.1.3 初始化數據源 46
4.1.4 數據轉換 46
4.1.5 輸出結果和觸發程式 47
4.2 處理參數 49
4.2.1 將參數傳遞給函式 49
4.2.2 用參數工具讀取參數 50
4.2.3 在Flink應用程式中使用參數 51
4.2.4 【實例2】通過withParameters方法傳遞和使用參數 53
4.2.5 【實例3】通過參數工具讀取和使用參數 54
4.3 自定義函式 56
4.3.1 自定義函式的常用方式 56
4.3.2 了解累加器和計數器 57
4.3.3 【實例4】實現累加器 58
4.4 數據類型和序列化 59
4.4.1 認識數據類型 59
4.4.2 類型擦除和類型推斷 62
4.4.3 【實例5】在Flink中使用元組類 63
4.4.4 【實例6】在Flink中使用Java的POJO類 63
4.4.5 處理類型 65
4.4.6 認識TypeInformation類 65
4.4.7 認識Java API類型信息 66
-
第5章 Flink的轉換運算元 69
5.1 定義鍵 69
5.1.1 定義元組的鍵 69
5.1.2 使用欄位表達式定義鍵 70
5.1.3 使用鍵選擇器函式定義鍵 71
5.2 Flink的通用轉換運算元 71
5.2.1 DataStream和DataSet的通用轉換運算元 71
5.2.2 【實例7】使用Map運算元轉換數據 72
5.2.3 【實例8】使用FlatMap運算元拆分句子 73
5.2.4 【實例9】使用Filter運算元過濾數據 74
5.2.5 【實例10】使用Project運算元投射欄位並排序 75
5.3 Flink的DataSet API專用轉換運算元 76
5.3.1 聚合轉換運算元 76
5.3.2 分區轉換運算元 78
5.3.3 排序轉換運算元 79
5.3.4 關聯轉換運算元 80
5.3.5 【實例11】在按欄位位置鍵分組的數據集上進行聚合轉換 81
5.3.6 【實例12】在分組元組上進行比較運算 82
5.3.7 【實例13】使用MapPartition運算元統計數據集的分區計數 83
5.3.8 【實例14】對POJO數據集和元組進行分組與聚合 84
5.3.9 【實例15】使用First-n運算元返回數據集的前n個元素 87
5.4 Flink的DataStream API專用轉換運算元 88
5.4.1 多流轉換運算元 88
5.4.2 鍵控流轉換運算元 89
5.4.3 視窗轉換運算元 91
5.4.4 連線轉換運算元 92
5.4.5 物理分區運算元 95
5.4.6 其他轉換運算元 96
5.4.7 【實例16】使用Union運算元連線多個數據源 97
5.4.8 【實例17】使用Connect運算元連線不同類型的數據源 98
5.4.9 【實例18】使用Reduce操作鍵控流 99
5.4.10 【實例19】使用Split運算元和Select運算元拆分數據流,並選擇拆分後的數據流 100
5.4.11 任務、運算元鏈和資源組 101
5.5 認識低階流處理運算元 103
5.5.1 ProcessFunction——在非循環流上實現低階運算 103
5.5.2 CoProcessFunction——在兩個輸入流上實現低階運算 104
5.5.3 KeyedProcessFunction——在鍵控流上實現低階運算 104
5.5.4 計時器和計時器服務 104
5.6 疊代運算 106
5.6.1 認識DataSet的全量疊代運算和增量疊代運算 106
5.6.2 比較全量疊代運算和增量疊代運算 108
5.6.3 【實例20】全量疊代 108
5.6.4 【實例21】增量疊代 109
5.6.5 認識DataStream的疊代 111
5.6.6 【實例22】實現DataStream的歸零疊代運算 112
-
進階篇
第6章 使用DataSet API實現批處理 116
6.1 DataSet API的數據源 116
6.1.1 認識DataSet API的數據源 116
6.1.2 配置CSV解析 117
6.1.3 【實例23】讀取和解析CSV檔案 118
6.1.4 讀取壓縮檔案 119
6.2 操作函式中的數據對象 121
6.2.1 禁用對象重用 121
6.2.2 啟用對象重用 122
6.3 語義注釋 122
6.3.1 轉發欄位注釋 123
6.3.2 【實例24】使用函式類注釋聲明轉發欄位信息 124
6.3.3 非轉發欄位 125
6.3.4 【實例25】聲明非轉發欄位 125
6.3.5 讀取欄位信息 126
6.3.6 【實例26】聲明讀取欄位信息 126
6.4 認識分散式快取和廣播變數 127
6.4.1 分散式快取 127
6.4.2 廣播變數 128
-
第7章 使用DataStream API實現流處理 130
7.1 認識DataStream API 130
7.1.1 DataStream API的數據源 130
7.1.2 DataStream API的數據接收器 131
7.2 視窗 132
7.2.1 認識時間驅動和數據驅動的視窗 132
7.2.2 認識視窗分配器 133
7.2.3 認識鍵控視窗和非鍵控視窗 138
7.2.4 認識視窗的生命周期 139
7.2.5 【實例27】實現滾動時間視窗和滑動時間視窗 140
7.2.6 【實例28】實現滾動計數視窗和滑動計數視窗 141
7.2.7 【實例29】實現會話視窗 144
7.2.8 認識視窗函式 146
7.2.9 【實例30】使用視窗函式實現視窗內的計算 148
7.2.10 觸發器 152
7.2.11 【實例31】自定義觸發器 154
7.2.12 移除器 155
7.2.13 處理遲到數據 156
7.2.14 處理視窗結果 157
7.3 認識時間和水位線生成器 159
7.3.1 認識時間 159
7.3.2 設定時間特徵 160
7.3.3 認識水位線 161
7.3.4 內置水位線生成器 166
7.3.5 編寫水位線生成器 167
7.4 狀態 169
7.4.1 認識狀態 169
7.4.2 使用運算元狀態 172
7.4.3 認識鍵控流 173
7.4.4 使用鍵控狀態 174
7.5 狀態持久化 178
7.5.1 檢查點 178
7.5.2 狀態快照 180
7.5.3 保存點 182
7.5.4 狀態後端 182
7.5.5 比較快照、檢查點、保存點和狀態後端 184
7.6 旁路輸出 184
7.6.1 認識旁路輸出 184
7.6.2 【實例32】輸出多條旁路數據流 186
7.7 數據處理語義 187
7.7.1 認識數據處理語義 187
7.7.2 兩階段提交 188
7.7.3 Flink“兩階段提交”的事務性寫入 189
7.8 【實例33】自定義事件時間和水位線 191
-
第8章 使用狀態處理器API——State Processor API 193
8.1 認識狀態處理器API 193
8.2 將應用程式狀態映射到DataSet 194
8.3 讀取狀態 194
8.3.1 讀取運算元狀態 194
8.3.2 讀取鍵控狀態 196
8.4 編寫新的保存點 198
8.5 修改保存點 200
8.6 【實例34】使用狀態處理器API寫入和讀取保存點 201
-
第9章 複雜事件處理庫 204
9.1 認識複雜事件處理庫 204
9.2 【實例35】實現3種模式的CEP應用程式 205
9.2.1 實現單個模式的CEP應用程式 205
9.2.2 實現循環模式的CEP應用程式 206
9.2.3 實現組合模式的CEP應用程式 207
9.3 認識模式API 207
9.3.1 單個模式 207
9.3.2 組合模式 212
9.3.3 循環模式中的連續性 213
9.3.4 模式組 215
9.3.5 跳過策略 218
9.4 檢測模式 220
9.5 複雜事件處理庫中的時間 222
9.5.1 按照“事件時間”處理遲到事件 222
9.5.2 時間上下文 223
-
第10章 使用Table API實現流/批統一處理 224
10.1 Table API和SQL 224
10.1.1 認識Table API和SQL 224
10.1.2 Table API和SQL程式的結構 225
10.1.3 認識Table API和SQL的環境 225
10.1.4 認識計畫器——OldPlanner和BlinkPlanner 226
10.1.5 查詢和輸出表 230
10.2 Table API和SQL的“流”的概念 232
10.2.1 認識動態表 232
10.2.2 在Table API和SQL中定義時間屬性 238
10.2.3 流上的連線 242
10.2.4 認識時態表 243
10.3 Catalog 244
10.3.1 認識Catalog 244
10.3.2 【實例36】使用Java和SQL的DDL方式創建Catalog、Catalog資料庫與Catalog表247
10.3.3 使用Catalog API 249
10.3.4 使用Table API和SQL Client操作Catalog 251
10.4 Table API、SQL與DataStream和DataSet API的結合 252
10.4.1 從Table API、SQL到DataStream、DataSet的架構 252
10.4.2 使用DataStream和DataSet API創建視圖與表 252
10.4.3 將錶轉換成DataStream或DataSet 253
10.4.4 從數據類型到Table Schema的映射 255
10.4.5 【實例37】使用Table API轉換DataSet,並套用Group運算元、Aggregate運算元、Select運算元和Filter運算元 258
10.4.6 【實例38】使用SQL轉換DataSet,並註冊表和執行SQL查詢 259
-
第11章 使用SQL實現流/批統一處理 261
11.1 SQL客戶端 261
11.2 SQL語句 263
11.2.1 認識SQL語句 263
11.2.2 CREATE語句 264
11.2.3 【實例39】使用CREATE語句創建和查詢表 270
11.2.4 查詢語句和查詢運算元 271
11.2.5 DROP語句 283
11.2.6 ALTER語句 284
11.2.7 INSERT語句 286
11.2.8 SQL hints 288
11.2.9 描述語句、解釋語句、USE語句和SHOW語句 289
11.2.10 【實例40】使用描述語句描述表的Schema 291
11.2.11 【實例41】使用解釋語句解釋SQL語句的計畫 292
11.3 變更數據獲取 293
11.3.1 了解變更數據獲取 293
11.3.2 【實例42】獲取MySQL變更數據 293
11.4 認識流式聚合 296
11.5 【實例43】使用DDL創建表,並進行流式視窗聚合 299
-
第12章 集成外部系統 303
12.1 認識Flink的連線器 303
12.1.1 內置的連線器 303
12.1.2 Table&SQL的連線器 304
12.2 異步訪問外部數據 307
12.3 外部系統拉取Flink數據 311
12.4 認識Flink的Kafka連線器 311
12.4.1 認識Kafka 311
12.4.2 Kafka連線器 314
12.4.3 Kafka消費者 314
12.4.4 Kafka生產者 320
12.4.5 使用Kafka時間戳和Flink事件時間 323
12.4.6 認識Kafka連線器指標 324
12.4.7 啟用Kerberos身份驗證 324
12.4.8 常見問題 325
12.5 【實例44】在Flink中生產和消費Kafka訊息 325
12.5.1 添加Flink的依賴 325
12.5.2 自定義數據源 325
12.5.3 編寫訊息生產者 326
12.5.4 編寫訊息消費者 327
12.5.5 測試在Flink中生產和消費Kafka訊息 327
-
機器學習篇
第13章 進入機器學習世界 330
13.1 學習人工智慧的經驗 330
13.2 認識機器學習 331
13.3 機器學習的主要任務 332
13.3.1 分類 332
13.3.2 回歸 333
13.3.3 聚類 333
13.4 開發機器學習應用程式的基礎 333
13.4.1 機器學習的概念 333
13.4.2 開發機器學習應用程式的步驟 334
13.5 機器學習的分類 336
13.5.1 監督式學習 336
13.5.2 無監督式學習 336
13.5.3 半監督式學習 336
13.5.4 增強學習 336
13.6 了解機器學習算法 337
13.7 機器學習的評估模型 339
13.7.1 認識評估模型 339
13.7.2 認識二分類評估 339
13.7.3 認識多分類評估、聚類評估和回歸評估 342
-
第14章 流/批統一的機器學習框架(平台)Alink 343
14.1 認識Alink的概念和算法庫 343
14.1.1 認識Flink ML 343
14.1.2 Alink的架構 343
14.1.3 Alink機器學習的過程 344
14.1.4 Alink的概念 344
14.1.5 Alink的算法庫 345
14.2 【實例45】以流/批方式讀取、取樣和輸出數據集 346
14.2.1 創建Alink應用程式 346
14.2.2 按行讀取、拆分和輸出數據集 348
14.2.3 讀取、取樣和輸出Libsvm格式的數據集 349
14.2.4 讀取、取樣CSV格式的數據集 350
14.2.5 讀取、解析和輸出Kafka的數據集 351
14.3 【實例46】使用分類算法實現數據的情感分析 353
14.3.1 認識邏輯回歸算法 353
14.3.2 讀取數據並設定管道 354
14.3.3 訓練模型和預測 355
14.3.4 保存、查看和復用模型 356
14.4 【實例47】實現協同過濾式的推薦系統 357
14.4.1 了解訓練集 357
14.4.2 實現機器學習應用程式 357
14.4.3 測試推薦系統 359
-
項目實戰篇
第15章 【實例48】使用大數據和機器學習技術實現一個廣告推薦系統 362
15.1 了解實例架構 362
15.1.2 實例架構 362
15.1.2 廣告推薦流程 363
15.1.3 機器學習流程 364
15.2 了解推薦系統 364
15.2.1 什麼是推薦系統 364
15.2.2 推薦系統的分類 365
15.2.3 推薦系統的排序算法 366
15.2.4 召回算法 367
15.3 認識線上學習算法 367
15.3.1 離線訓練和線上訓練 367
15.3.2 線上學習算法FTRL 368
15.4 實現機器學習 369
15.4.1 處理數據 369
15.4.2 特徵工程 370
15.4.3 離線模型訓練 371
15.4.4 線上模型訓練 371
15.4.5 線上預測 372
15.4.6 線上評估 372
15.5 實現接入服務層 374
15.5.1 了解接入服務層 374
15.5.2 在Alink中傳送預測數據 374
15.5.3 實現廣告伺服器接收預測數據 375
15.6 日誌打點和監測 376
-
附 錄 377
難懂概念介紹 377
Flink常見問題匯總 378
Alink常見問題匯總 381
作者簡介
龍中華
10多年來一直在某一線網際網路公司擔任技術負責人。帶領多個研發團隊,承擔系統的需求分析、架構設計、項目管理,以及技術團隊管理和培訓等職責。