商品簡介
全書分為11章。第1章介紹了實時流計算技術的產生背景、使用場景和通用架構。第2章通過實時流計算數據的採集,詳細分析了Java高性能編程的理論基礎。第3-6章通過從頭構造一個分布式實時流計算框架,詳細剖析了實時流計算中的幾個核心概念和技術重點,並通過多個開源流計算平臺的實現來驗證這些核心概念和技術重點。第7章談論了當實在做不到“實時”時,我們應該作出的備選方案。第8-10章闡述了構建一個完整實時流計算系統時,必要的周邊輔助系統。第11章給出實時流計算應用案例。
名人推薦
透過現象看本質,掌握高性能、高併發、實時系統設計與權衡之道
目次
前言
第1章 實時流計算 …… 1
1.1 大數據時代的新挑戰:實時流計算 …… 1
1.2 實時流計算使用場景 …… 2
1.3 實時流數據的特點 …… 4
1.4 實時流計算系統架構 …… 6
1.4.1 數據采集 …… 6
1.4.2 數據傳輸 …… 7
1.4.3 數據處理 …… 8
1.4.4 數據存儲 …… 8
1.4.5 數據展示 …… 9
1.5 本章小結 …… 10
第2章 數據采集 …… 11
2.1 設計數據采集的接口 …… 11
2.2 使用Spring Boot實現數據采集服務器 …… 12
2.3 BIO與NIO …… 14
2.3.1 BIO連接器 …… 14
2.3.2 NIO連接器 …… 17
2.4 NIO和異步 …… 19
2.4.1 CPU密集型任務 …… 19
2.4.2 I/O密集型任務 …… 20
2.4.3 I/O和CPU都密集型任務 …… 21
2.4.4 纖程 …… 22
2.4.5 Actor …… 24
2.4.6 NIO配合異步編程 …… 25
2.5 使用Netty實現數據采集服務器 …… 26
2.5.1 使用Netty實現數據采集API …… 27
2.5.2 異步編程 …… 29
2.5.3 流量控制和反向壓力 …… 31
2.5.4 實現反向壓力 …… 32
2.5.5 異步的不足之處 …… 36
2.6 本章小結 …… 36
第3章 實現單節點流計算應用 …… 38
3.1 自己動手寫實時流計算框架 …… 38
3.1.1 用DAG描述流計算過程 …… 38
3.1.2 造一個流計算框架的輪子 …… 39
3.1.3 實現特徵提取DAG節點 …… 42
3.1.4 實現特徵提取DAG拓撲 …… 45
3.2 CompletableFuture方法與原理 …… 46
3.2.1 常用的CompletableFuture類方法 …… 47
3.2.2 CompletableFuture的工作原理 …… 49
3.3 採用CompletableFuture實現單節點流處理 …… 51
3.3.1 基於CompletableFuture實現流計算應用 …… 51
3.3.2 反向壓力 …… 53
3.3.3 死鎖 …… 54
3.3.4 再論流與異步的關係 …… 55
3.4 流計算應用的性能調優 …… 56
3.4.1 優化機制 …… 56
3.4.2 優化工具 …… 56
3.4.3 線程狀態 …… 62
3.4.4 優化方向 …… 66
3.5 本章小結 …… 67
第4章 數據處理 …… 68
4.1 流計算到底在計算什麼 …… 68
4.2 流數據操作 …… 70
4.2.1 過濾 …… 70
4.2.2 映射 …… 70
4.2.3 展開映射 …… 71
4.2.4 聚合 …… 72
4.2.5 關聯 …… 73
4.2.6 分組 …… 75
4.2.7 遍歷 …… 75
4.3 時間維度聚合特徵計算 …… 76
4.4 關聯圖譜特徵計算 …… 78
4.4.1 一度關聯 …… 79
4.4.2 二度關聯 …… 81
4.5 事件序列分析 …… 85
4.5.1 CEP編程模式 …… 86
4.5.2 Flink CEP實例 …… 87
4.6 模型學習和預測 …… 89
4.6.1 統計學習模型 …… 90
4.6.2 P-value檢驗 …… 90
4.6.3 機器學習模型 …… 91
4.7 本章小結 …… 93
第5章 實時流計算的狀態管理 …… 94
5.1 流的狀態 …… 94
5.1.1 流數據狀態 …… 96
5.1.2 流信息狀態 …… 97
5.2 採用Redis實現流信息狀態管理 …… 98
5.2.1 時間維度聚合特徵計算 …… 98
5.2.2 一度關聯特徵計算 …… 99
5.3 採用Apache Ignite實現流信息狀態管理 …… 100
5.3.1 時間維度聚合分析 …… 101
5.3.2 一度關聯特徵計算 …… 103
5.4 擴展為集群 …… 105
5.4.1 基於Redis的狀態集群 …… 106
5.4.2 局部性原理 …… 106
5.4.3 批次請求處理 …… 108
5.4.4 基於Apache Ignite的狀態集群 …… 109
5.4.5 基於分布式文件系統的狀態管理集群 …… 109
5.5 本章小結 …… 110
第6章 開源流計算框架 …… 111
6.1 Apache Storm …… 112
6.1.1 系統架構 …… 112
6.1.2 流的描述 …… 113
6.1.3 流的執行 …… 113
6.1.4 流的狀態 …… 116
6.1.5 消息傳達可靠性保證 …… 116
6.2 Spark Streaming …… 117
6.2.1 系統架構 …… 117
6.2.2 流的描述 …… 117
6.2.3 流的執行 …… 118
6.2.4 流的狀態 …… 119
6.2.5 消息傳達可靠性保證 …… 120
6.3 Apache Samza …… 120
6.3.1 系統架構 …… 120
6.3.2 流的描述 …… 121
6.3.3 流的執行 …… 123
6.3.4 流的狀態 …… 126
6.3.5 消息傳達可靠性保證 …… 126
6.4 Apache Flink …… 127
6.4.1 系統架構 …… 127
6.4.2 流的描述 …… 128
6.4.3 流的執行 …… 128
6.4.4 流的狀態 …… 130
6.4.5 消息傳達可靠性 …… 131
6.5 本章小結 …… 132
第7章 當做不到實時 …… 133
7.1 做不到實時的原因 …… 133
7.2 Lambda架構 …… 134
7.2.1 數據系統和Lambda架構思想 …… 135
7.2.2 Lambda架構 …… 135
7.2.3 Lambda架構在實時流計算中的運用 …… 137
7.3 Kappa架構與架構實例 …… 138
7.3.1 Kappa架構 …… 138
7.3.2 Kappa架構實例 …… 140
7.4 本章小結 …… 143
第8章 數據傳輸 …… 144
8.1 消息中間件 …… 144
8.1.1 為什麼使用消息中間件 …… 145
8.1.2 消息中間件的工作模式 …… 146
8.1.3 消息模式 …… 147
8.1.4 使用消息中間件的注意事項 …… 149
8.2 Apache Kafka …… 150
8.2.1 Kafka架構 …… 150
8.2.2 Kafka生產者