流計算系統圖解

[美] 喬什·費舍爾(Josh Fischer)[加] 王寧 (Ning Wang)著 傅宇 黃鵬程 張晨 譯

  • 流計算系統圖解-preview-1
  • 流計算系統圖解-preview-2
  • 流計算系統圖解-preview-3
流計算系統圖解-preview-1

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

商品描述

流計算系統盡可能地優化了接收處理事件數據的間隔時間,因此能實時地提供響應。對於金融、安全和物聯網領域的應用來說,幾毫秒都很關鍵,因此流計算系統是必要組件。而且,流計算是熱門技術!具有 Spark、Heron 和Kafka 經驗的工程師供不應求。 《流計算系統圖解》以淺顯易懂的語言介紹了實時事件流應用。這本引人入勝的書闡明瞭數據並行化、事件窗口和反壓等核心概念,讓你不會被框架的具體細節所困擾。在學習過程中,你將從頭開始構建一個簡單的流計算工具,以確保深入領會各種理念和技術。當你讀到實時信用卡欺詐檢測和 IoT 監控服務等示例時,實用且有趣的插圖使流計算系統顯得更加生動。 主要內容 實現流計算系統以及故障排除 為復雜功能設計流計算系統 定位網絡瓶頸並解決反壓問題 為高性能系統對數據進行分組

目錄大綱

第I部分 初識流系統 1

第1章 歡迎閱讀《流計算系統圖解》 3

1.1 什麽是流處理 4

1.2 流系統的例子 5

1.3 流系統和實時性 6

1.4 流系統的工作方式 7

1.5 應用程序 8

1.6 後台服務 9

1.7 後台服務的內部實現 10

1.8 批處理系統 11

1.9 批處理系統內部 12

1.10 流處理系統 13

1.11 流處理系統的內部實現 14

1.12 多階段架構的優勢 15

1.13 批處理和流處理系統中的多階段架構 16

1.13.1 批處理系統 16

1.13.2 流處理系統 16

1.14 比較這些系統 17

1.15 一個典型的流處理系統 18

1.16 小結 19

1.17 練習 19

第2章 你好,流系統 21

2.1 老闆需要一個高級收費站 22

2.2 失敗案例:使用HTTP請求實現服務 23

2.3 AJ 和 Miranda 對失敗的反思 24

2.4 AJ 對流系統的思考 25

2.5 比較後端服務和流 26

2.5.1 後端服務:一個同步模型 26

2.5.2 流:異步模型 26

2.6 流系統如何適用於當前場景 27

2.7 基本概念:隊列 28

2.8 通過隊列傳輸數據 29

2.9 初探流框架Streamwork 30

2.10 Streamwork 框架概述 31

2.11 深入 Streamwork 的引擎 32

2.12 流的核心概念 33

2.13 相關概念的更多細節 34

2.14 流作業的執行流程 35

2.15 你的第一個流作業 36

2.15.1 你的第一個流作業:創建事件類 36

2.15.2 你的第一個流作業:數據源 37

2.15.3 你的第一個流作業:數據源(續) 38

2.15.4 你的第一個流作業:算子 39

2.15.5 你的第一個流作業:算子(續) 40

2.15.6 你的第一個流作業:構建作業 41

2.16 執行作業 42

2.17 檢查作業執行情況 43

2.18 深入瞭解處理引擎 44

2.18.1 深入瞭解引擎:源執行器 45

2.18.2 深入瞭解引擎:算子執行器 46

2.18.3 深入瞭解引擎:作業啟動器 47

2.19 事件的流轉 48

2.20 數據元素的生命周期 49

2.21 回顧流概念 50

2.22 小結 51

2.23 練習 51

第3章 並行化和數據分組 53

3.1 傳感器正在生成更多的事件 54

3.2 即使在流中,實時處理也很難 55

3.3 新概念:並行很重要 56

3.4 新概念:數據並行 57

3.5 新概念:數據執行的獨立性 58

3.6 新概念:任務並行 59

3.7 數據並行與任務並行 60

3.8 並行與並發 61

3.9 作業的並行化 62

3.10 組件的並行化 63

3.11 數據源的並行化 64

3.12 查看作業輸出 65

3.13 算子並行化 66

3.14 再次查看作業輸出 67

3.15 事件和實例 68

3.16 事件順序 69

3.17 事件分組 70

3.18 隨機分組 71

3.19 隨機分組原理 72

3.20 字段分組 73

3.21 字段分組原理 74

3.22 事件的分組執行 75

3.23 深入瞭解引擎:事件分發器 76

3.24 在作業中採用字段分組 77

3.25 查看事件順序 78

3.26 比較分組行為 79

3.27 小結 80

3.28 練習 80

第4章 流中的圖 81

4.1 信用卡欺詐檢測系統 82

4.2 信用卡欺詐檢測系統的更多細節 83

4.3 欺詐檢測業務流程 84

4.4 流並不總是一條直線 85

4.5 系統內部分析 86

4.6 欺詐檢測作業的細節 87

4.7 新概念 88

4.8 上下游組件 89

4.9 流的扇出和扇入 90

4.10 圖、有向圖以及有向無環圖 91

4.11 流處理系統中的 DAG 92

4.12 新概念概覽 93

4.13 從流扇出到分析器 94

4.14 深入瞭解引擎 95

4.15 有一個問題: 效率 96

4.16 不同流的扇出 97

4.17 再次深入瞭解引擎 98

4.18 使用通道實現組件間通信 99

4.19 多個通道 100

4.20 流扇入至評分聚合器 101

4.21 引擎中的流扇入 102

4.22 對另一個流扇入的簡單介紹:Join 103

4.23 回顧整個系統 104

4.24 圖和流作業 105

4.25 示例系統 106

4.26 小結 107

4.27 練習 108

第5章 送達語義 109

5.1 欺詐檢測系統的延遲需求 110

5.2 重新審視欺詐檢測作業 111

5.3 關於準確性 112

5.4 部分結果 113

5.5 一個監控系統使用率的流作業 114

5.6 新系統使用率作業 115

5.7 新系統使用率作業的需求 116

5.8 新概念:送達次數和處理次數 117

5.9 新概念:送達語義 118

5.10 選擇正確的語義 119

5.11 至多一次送達 120

5.12 欺詐檢測作業 121

5.12.1 好的一面 121

5.12.2 壞的一面 121

5.12.3 希望 121

5.13 至少一次送達 122

5.14 用確認機制實現至少一次送達 123

5.15 跟蹤事件 124

5.16 應對事件處理時的失敗 125

5.17 追蹤提早結束處理的事件 126

5.18 組件中關於確認的代碼 127

5.19 新概念:檢查點 128

5.20 新概念:狀態 129

5.21 在系統使用率作業中為至少一次送達語義生成檢查點 130

5.22 生成檢查點和狀態操作函數 131

5.23 交易源組件中的狀態處理代碼 132

5.24 恰好一次還是實際一次 133

5.25 額外概念:冪等操作 134

5.26 恰好一次送達 135

5.27 系統使用率分析器組件中的狀態處理代碼 136

5.28 再次比較送達語義 137

5.29 小結 138

5.30 練習 138

5.31 接下來 139

第6章 流系統回顧與展望 141

6.1 流系統的基本概念 142

6.2 並行化和事件分組 143

6.3 有向無環圖和流作業 144

6.4 送達語義(送達保證) 145

6.5 在信用卡欺詐檢測系統中使用的送達語義 146

6.6 接下來是什麽 147

6.7 窗口計算簡介 148

6.8 實時Join數據 149

6.9 反壓簡介 150

6.10 無狀態計算和有狀態計算 151

第II部分 進階 153

第7章 窗口計算 155

7.1 對實時數據進行切分 156

7.2 詳細分解問題 157

7.3 繼續分解問題 158

7.4 兩種上下文 159

7.5 欺詐檢測中的窗口處理 160

7.6 窗口究竟是什麽 161

7.7 進一步瞭解窗口 162

7.8 新概念:窗口策略 163

7.9 固定窗口 164

7.10 距離分析器中的固定窗口 165

7.11 用固定時間窗口檢測欺詐行為 166

7.12 固定窗口:時間與數量 167

7.13 滑動窗口 168

7.14 滑動窗口與距離分析器 169

7.15 用滑動窗口檢測欺詐行為 170

7.16 會話窗口 171

7.17 會話窗口(續) 172

7.18 使用會話窗口檢測欺詐行為 173

7.19 窗口化策略的總結 174

7.20 將事件流切成數據集 175

7.21 窗口:概念與實現 176

7.22 回顧 177

7.23 鍵值存儲入門 178

7.24 實現窗口化距離分析器 179

7.25 事件時間和事件的其他時間 180

7.26 窗口水位 181

7.27 遲到事件 182

7.28 小結 183

7.29 練習 184

第8章 Join 操作 185

8.1 即時 Join 排放量數據 186

8.2 排放量作業初版 187

8.3 排放量解析器 188

8.4 準確性是個問題 189

8.5 排放量作業增強版 190

8.6 聚焦 Join 191

8.7 到底什麽是 Join 192

8.8 流 Join是如何工作的 193

8.9 流式 Join 是一種不同的扇入方式 194

8.10 車輛事件與溫度事件 195

8.11 表:流的物化視圖 196

8.12 物化車輛事件更低效 197

8.13 數據完整性問題 198

8.14 這個 Join 算子的問題出在哪 199

8.15 Inner Join 200

8.16 Outer Join 201

8.17 Inner Join 與 Outer Join 202

8.18 不同類型的 Join 203

8.19 流系統中的 Outer Join 204

8.20 新問題:網絡連接 205

8.21 窗口 Join 206

8.22 兩表 Join 而不是流表 Join 207

8.23 重新審視物化視圖 208

8.24 小結 209

第9章 反壓 211

9.1 可靠性很關鍵 212

9.2 回顧系統 213

9.3 精簡的流作業 214

9.4 新概念:容量、利用率和空餘率 215

9.5 進一步瞭解利用率與空餘率 216

9.6 新概念:反壓 217

9.7 測量容量利用率 218

9.8  Streamwork引擎中的反壓 219

10.18 有狀態組件與無狀態組件 253

10.19 手動管理實例狀態 254

10.20 Lambda架構 255

10.21 小結 256

10.22 練習 257

第11章 總結:流系統中的高級概念 259

11.1 真的結束了嗎 260

11.2 窗口計算回顧 261

11.3 主要窗口類型回顧 262

11.3.1 固定窗口 262

11.3.2 滑動窗口 262

11.3.3 會話窗口 262

11.4 實時 Join 數據回顧 263

11.5 SQL與流式 Join回顧 264

11.6 Inner Join 和 Outer Join回顧 265

11.7 流系統中的意外情況 266

11.8 反壓:減慢數據源或上游組件的速度 267

11.8.1 停止數據源 267

11.8.2 停止上游組件 267

11.9 另一種處理滯後實例的方法:丟棄事件 268

11.10 反壓可能只是內部問題的表象 269

11.10.1 實例停止工作,所以反壓不會得到緩解 269

11.10.2 實例無法趕上進度,反壓將反復觸發:抖動 269

11.11 帶有檢查點的有狀態組件 270

11.12 基於事件的計時 271

11.13 有狀態組件與無狀態組件回顧 272

11.14 你做到了 273

11.14.1 挑選一個開源項目來學習 273

11.14.2 開始寫博客,傳授你所學的知識 273

11.14.3 參加聚會和會議 273

11.14.4 參與開源項目 273

11.14.5 永不放棄 273