本書共11章。第1章介紹常見的流數據的來源、應用以及三個重要特性:持續交付、結構松散和高基數,并闡釋對流數據使用基礎架構和算法的重要性。第2~6章介紹實時流架構的各組件涉及的軟件、框架和方法。第2章概述實時流架構設計涉及的組件、特性、編程語言等。第3章介紹實時流架構的服務配置和協調,重點介紹協調服務器ZooKeeper。第4章闡述實時流架構中數據流程的管理,涉及用來管理數據流程的兩個軟件包Kafka和Flume。第5章分析流數據的處理,涉及如何用Storm或Samza來處理數據。第6章介紹流數據的存儲問題。第7~11章重點關注流數據架構的應用構建問題。第7章討論從流環境向最終用戶的數據交付問題。這是構建儀表板以及其他監控應用所使用的核心機制。第8章涵蓋流環境下的聚集計算問題,特別是對多分辨率時間序列數據的聚集計算問題。第9章簡要介紹統計學和概率論的基礎知識。第10章討論略圖,略圖通常具有更快的更新速度和更小的內存占用空間,特別適合流環境。第11章討論聚集計算之外能夠應用于流數據的一些更深入的話題。
目 錄
譯者序
前言
致謝
作者簡介
技術編輯簡介
第1章 流數據簡介1
1.1流數據的來源2
1.1.1運行監控2
1.1.2Web分析2
1.1.3在線廣告3
1.1.4社交媒體3
1.1.5移動數據和物聯網4
1.2流數據的特別之處5
1.2.1始終在線,持續流動5
1.2.2松散結構5
1.2.3高基數的存儲6
1.3基礎架構和算法6
1.4總結7
第一部分 流分析架構
第2章 實時流架構設計10
2.1實時架構的組件10
2.1.1數據采集11
2.1.2數據流程11
2.1.3數據處理13
2.1.4數據存儲13
2.1.5數據交付14
2.2實時架構的特性16
2.2.1高可用性16
2.2.2低延遲17
2.2.3水平可擴展性17
2.3實時編程語言18
2.3.1Java18
2.3.2Scala和Clojure19
2.3.3JavaScript19
2.3.4Go語言20
2.4實時架構概覽20
2.4.1數據采集20
2.4.2數據流程21
2.4.3數據處理21
2.4.4數據存儲21
2.4.5數據交付22
2.5總結22
第3章 服務配置和協調24
3.1 配置和協調系統的研發動機24
3.2 維護分布式狀態25
3.2.1不可靠的網絡連接25
3.2.2時鐘同步25
3.2.3不可靠環境下的一致性25
3.3Apache ZooKeeper26
3.3.1znode27
3.3.2監視和通知28
3.3.3保持一致性28
3.3.4創建ZooKeeper集群28
3.3.5ZooKeeper本地Java客戶端33
3.3.6Curator客戶端39
3.3.7Curator Recipes組件45
3.4總結50
第4章 流分析中的數據流程管理52
4.1分布式數據流程52
4.1.1至少交付一次52
4.1.2“n+1”問題53
4.2Apache Kafka:高吞吐量分布式消息機制54
4.2.1設計與實現54
4.2.2配置Kafka環境57
4.2.3與Kafka代理交互65
4.3Apache Flume:分布式日志采集系統 66
4.3.1Flume agent67
4.3.2配置agent68
4.3.3Flume數據模型68
4.3.4channel選擇器69
4.3.5Flume source71
4.3.6Flume sink78
4.3.7sink processor80
4.3.8Flume channel80
4.3.9Flume Interceptor81
4.3.10集成定制Flume組件83
4.3.11運行Flume agent83
4.4總結83
第5章 流數據的處理85
5.1分布式流數據處理85
5.1.1協調86
5.1.2分區和融合86
5.1.3事務86
5.2用Storm處理數據86
5.2.1Storm集群的組件87
5.2.2配置Storm集群88
5.2.3分布式集群89
5.2.4本地集群92
5.2.5Storm拓撲92
5.2.6實現bolt95
5.2.7實現并使用spout99
5.2.8分布式遠程過程調用104
5.2.9Trident:Storm的DSL105
5.3用Samza處理數據111
5.3.1Apache YARN111
5.3.2從YARN和Samza開始112
5.3.3將Samza集成進數據流程115
5.3.4Samza作業116
5.4總結122
第6章 流數據的存儲123
6.1一致性哈希123
6.2“NoSQL”存儲系統124
6.2.1Redis125
6.2.2MongoDB132
6.2.3Cassandra150
6.3其他存儲技術159
6.3.1關系數據庫160
6.3.2分布式內存數據網格160
6.4存儲技術的選擇160
6.4.1鍵-值存儲160
6.4.2文檔存儲160
6.4.3分布式哈希表存儲161
6.4.4內存網格161
6.4.5關系數據庫161
6.5數據倉庫161
6.5.1將Hadoop作為ETL和數據倉庫162
6.5.2Lambda架構166
6.6總結166
第二部分 流分析與可視化
第7章 流度量的交付168
7.1流Web應用168
7.1.1使用Node169
7.1.2用NPM管理Node項目171
7.1.3基于Node開發Web應用174
7.1.4 基本的流儀表板176
7.1.5 向Web應用加入流180
7.2 數據可視化190
7.2.1 HTML5 Canvas和內聯SVG190
7.2.2 數據驅動文檔:D3.js196
7.2.3 高層工具204
7.3 移動流應用208
7.4 總結209
第8章 精確的聚集計算和交付211
8.1 定時計數與求和214
8.1.1 基于Bolt的計數214
8.1.2 基于Trident的計數216
8.1.3 基于Samza的計數217
8.2 多分辨率時間序列的聚集計算218
8.3 隨機優化222
8.4 時間序列數據的交付223
8.4.1 用D3.js繪制帶狀圖224
8.4.2 高速Canvas圖225
8.4.3 地平線圖226
8.5 總結227
第9章 流數據的統計近似229
9.1 數值計算庫229
9.2 概率和分布230
9.2.1 期望和方差231
9.2.2 統計分布232
9.2.3 離散分布232
9.2.4 連續分布233
9.2.5 聯合分布235
9.3 參數估計236
9.3.1 參數推斷236
9.3.2 Delta方法237
9.3.3 分布不等式238
9.4 隨機數產生器238
9.5 抽樣過程242
9.5.1 從固定數據集中抽樣242
9.5.2 從流數據中抽樣243
9.5.3 有偏流抽樣244
9.6 總結245
第10章 使用略圖近似流數據246
10.1 寄存器和哈希函數246
10.1.1 寄存器247
10.1.2 哈希函數247
10.2 集合249
10.3 Bloom Filter251
10.3.1 算法251
10.3.2 Bloom Filter大小的選擇253
10.3.3 并集和交集253
10.3.4 基數估計254
10.3.5 有趣的變體255
10.4 Distinct Value略圖258
10.4.1 Min-Count算法258
10.4.2 HyperLogLog算法260
10.5 Count-Min略圖264
10.5.1 點查詢265
10.5.2 Count-Min略圖的實現265
10.5.3 Top-K和“Heavy Hitters”266
10.5.4 范圍查詢和分位數查詢268
10.6 其他應用270
10.7 總結271
第11章 流數據的應用272
11.1 實時數據模型273
11.1.1 簡單時間序列模型273
11.1.2 線性模型276
11.1.3 邏輯回歸280
11.1.4 神經網絡模型281
11.2 用模型預測289
11.2.1 指數平滑法289
11.2.2 回歸法291
11.2.3 神經網絡法293
11.3 監控294
11.3.1 離群點檢測294
11.3.2 變化檢測296
11.4 實時優化297
11.5 總結298