译者序
前言
致谢
作者简介
技术编辑简介
第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
^ 收 起