目录
序 1
前言 3
第一部分 Apache Spark 流处理的基本原理
第1 章 流处理概述 13
什么是流处理 14
批处理与流处理 15
流处理中的时间概念 15
不确定性因素 16
流处理案例 16
可扩展的数据处理能力 18
扩展性与容错性 19
分布式流处理 19
Apache Spark 概述 20
第一波浪潮:函数式API 20
第二波浪潮:SQL 21
统一的引擎21
Spark 组件 22
Spark Streaming 23
Structured Streaming 23
接下来? 24
第2 章 流处理模型 25
数据源与接收器 26
不可变流 27
转换与聚合 27
窗口聚合 28
滚动窗口 28
滑动窗口 29
无状态处理与有状态处理 29
有状态的流 30
案例:Scala 中的本地状态计算 31
无状态流,还是有状态流? 33
时间效应 33
带时间戳的事件计算 33
通过时间戳来定义时间概念 34
事件时间与处理时间 34
使用水位线计算 37
小结 39
第3 章 流处理架构 41
数据平台的组件 41
体系模型 43
在流处理应用中使用批处理组件 44
流处理架构参考 45
Lambda 架构 45
Kappa 架构 46
流处理算法与批处理算法 47
流处理算法有时候本质上与批处理算法完全不同 47
流处理算法难以保证比批处理算法表现更好 48
小结 50
第4 章 流处理引擎Apache Spark 51
两种API 的由来 51
Spark 的内存使用 52
故障恢复 53
惰性执行 53
缓存使用建议 53
延迟 54
面向吞吐的数据处理 55
Spark 的多语言API 55
快速实现数据分析 56
更多关于Spark 的内容 57
小结 57
第5 章 Spark 分布式处理模型 59
通过集群管理器来运行Apache Spark 59
Spark 的集群管理器 61
分布式系统的弹性与容错 62
故障恢复 63
集群管理器对容错的支持 63
数据交付语义 64
微批处理与一次处理一个 66
微批处理:整体同步处理应用案例 66
一次处理一个 68
微批与一次处理一个:权衡 68
微批处理与一次处理一个方式地结合 69
动态的批次间隔 69
Structured Streaming 处理模型 69
第6 章 Spark 弹性模型 71
Spark 中的弹性分布式数据集 71
Spark 组件 73
Spark 容错保证 75
Task 失败恢复 76
stage 失败恢复 77
Driver 失败恢复 77
小结 78
参考文献 81
第二部分 Structured Streaming
第7 章 Structured Streaming 概述 87
学习Structured Streaming 之前 88
批处理分析 89
流分析 92
连接Stream 93
准备流数据93
流式Dataset 操作 94
创建查询(Query) 95
启动流处理96
浏览数据 97
小结 97
第8 章 Structured Streaming 编程模型 99
初始化Spark 实例 100
source:接收流数据 100
流数据的转换 102
sink:输出结果数据 105
format 106
outputMode 107
queryName 107
option 108
options 108
trigger 108
start() 109
小结 109
第9 章 Structured Streaming 实战 111
消费流source 112
程序逻辑 114
写入流sink 114
小结 116
第10 章 Structured Streaming 的Source 117
source 概述 117
可靠的source 需要能够重放数据 118
source 需要提供schema 119
可用的source 121
文件source 122
指定文件格式 122
公共配置 123
常用的文本解析配置项(CSV、JSON) 124
JSON 文件source 125
CSV 文件source127
Parquet 文件source 128
文本文件source 128
Kafka source 129
创建Kafka source 130
选择订阅主题的方法 131
Kafka source 的配置项 132
Kafka 消费者的配置项 133
Socket source 134
配置 135
操作 136
Rate source 136
第11 章 Structured Streaming 的Sink 139
sink 概述 139
可用的sink 140
可靠的sink 140
实验型sink 141
sink API 141
深入学习sink 141
文件sink 142
在文件sink 中使用触发器 143
文件格式的通用配置项 145
常见的时间和日期格式化设置(CSV、JSON) 146
CSV 文件sink 146
JSON 文件sink 147
Parquet 文件sink 148
文本文件sink 148
Kafka sink 148
Kafka 发布模型 148
Kafka sink 的使用 149
内存sink 152
控制台sink 153
配置项 153
输出模式 153
Foreach sink 154
ForeachWriter 接口 154
TCP Writer sink: ForeachWriter 使用案例 155
案例总结 158
ForeachWriter 序列化问题排查 159
第12 章 基于事件时间的流处理 161
Structured Streaming 中的事件时间 161
事件时间 163
处理时间 164
水位线 164
基于时间的窗口聚合 165
基于时间的窗口定义 166
如何计算间隔 167
多维聚合 167
滚动窗口和滑动窗口 168
记录去重 170
小结 170
第13 章 高级状态操作 173
案例:车队管理 174
分组状态操作 174
使用MapGroupsWithState 176
使用FlatMapGroupsWithState 180
输出模式 182
管理状态的时变性 183
小结 186
第14 章 Structured Streaming 应用监控 187
Spark 指标子系统 188
StreamingQuery 实例 189
StreamingQueryListener 接口 192
第15 章 实验性模块:连续处理与机器学习 195
连续处理 195
连续处理介绍 195
使用连续处理 197
局限性 198
机器学习 199
学习与应用199
在流中使用机器学习模型 200
案例:利用环境传感器估计房间使用情况 201
在线训练 204
参考文献 207
第三部分 Spark Streaming
第16 章 Spark Streaming 概述 213
DStream 抽象 214
基于DStream 的编程模型 214
基于DStream 的执行模型 216
Spark Streaming 程序结构 216
创建Spark Streaming Context 217
定义DStream 218
定义输出操作 218
启动Spark Streaming Context 218
停止Streaming 进程 219
小结 219
第17 章 Spark Streaming 编程模型 221
RDD,DStream 的底层抽象 221
DStream 转换操作 224
元素级别的DStream 转换 226
RDD 级别的DStream 转换228
Count 操作 229
修改结构的转换操作 230
小结 231
第18 章 Spark Streaming 执行模型 233
整体同步架构 233
Receiver 模型 235
Receiver API 235
Receiver 工作流程 236
Receiver 数据流 237
内部的数据弹性 238
Receiver 的并行 239
资源平衡:Receiver 与处理核数 239
通过预写式日志(Write-Ahead Log)达到零数据丢失 240
无Receiver(Direct)模式 241
小结 242
第19 章 Spark Streaming 的Source 245
source 分类 245
基础source 246
基于Receiver 模式的source 246
基于Direct 模式的source 247
常用source 247
文件source 248
队列source 251
工作流程 252
使用队列source 进行单元测试 252
队列source 的简单替代方案:ConstantInputDStream 254
Socket source 256
Kafka source 258
使用Kafka source 260
工作流程 261
哪里有更多的source 262
第20 章 Spark Streaming 的Sink 263
输出操作 263
内置的输出操作 265
print 266
saveAs 系列 266
foreachRDD 268
使用foreachRDD 编写自定义sink 268
第三方输出操作 271
第21 章 基于时间的流处理 273
窗口聚合 273
滚动窗口 274
滑动窗口 275
滑动窗口与批次间隔 275
滑动窗口与滚动窗口 276
使用窗口还是较长的批次间隔 276
窗口上的reduce 操作 277
reduceByWindow 278
reduceByKeyAndWindow 278
countByWindow 278
countByValueAndWindow 279
可逆的窗口聚合操作 279
流的分片 281
小结 281
第22 章 任意有状态的流处理 283
流的状态性 283
updateStateByKey 284
updateStateByKey 的局限性 286
性能 286
内存占用 287
使用mapwithState 进行有状态的计算 287
使用mapWithState 289
使用mapWithState 进行基于事件时间的流计算 291
第23 章 使用Spark SQL 295
Spark SQL 296
在Spark Streaming 中使用Spark SQL 函数 297
静态数据处理 301
Join 优化 304
更新流处理程序中的参考数据集 307
小结 309
第24 章 checkpoint 机制 311
checkpoint 的使用 312
DStream 的checkpoint 机制 317
从checkpoint 中恢复 318
checkpoint 的代价 320
checkpoint 调优 320
第25 章 Spark Streaming 应用监控 323
Streaming UI 324
通过Streaming UI 了解作业性能 326
输入速率图326
调度延迟图327
处理时间图328
总延迟图 328
批次细节 329
监控REST API 331
监控REST API 的使用 331
监控REST API 详解 331
指标子系统 333
内部事件总线 335
小结 339
第26 章 性能调优 341
Spark Streaming 中的性能平衡 341
批次间隔与处理延迟的关系 342
作业是如何失败的 342
深入理解调度延迟和处理延迟 343
checkpoint 对处理时间的影响 344
影响作业性能的外部因素 345
如何提高性能 345
调整批次间隔 346
以固定速率对数据摄入限流 346
反压 347
动态限流 348
PID 反压调优 349
自定义速率估算器 349
另一种动态处理策略 350
缓存 350
推测执行 352
参考文献 353
第四部分 Spark Streaming 高级技巧
第27 章 流式近似与抽样算法 357
准确性、实时性与大数据 358
准确性 358
实时处理 358
大数据 359
准确性、实时性与大数据之间的三角关系 359
近似算法 362
哈希与素描 362
去重统计:HyperLogLog 363
角色扮演练习:假如我们是系统管理员 364
HyperLogLog 在Spark 中的实践 367
统计元素频率:Count-min Sketch 371
布隆过滤器概述 372
在Spark 中使用布隆过滤器 373
使用Count-min Sketch 统计频率 373
排名与分位数:T-Digest 算法 376
减少元素数量:抽样 378
随机抽样 379
分层抽样 380
第28 章 实时机器学习 381
利用朴素贝叶斯进行流分类 382
streamDM 介绍384
朴素贝叶斯实践案例 385
训练一个电影评论分类器 386
决策树介绍 387
Hoeffding 树 389
使用在线K-means 进行流聚类 392
K-means 聚类 392
在线数据与在线K-means 算法 393
聚类的衰退问题 394
使用Spark Streaming 运行流式K-means 396
参考文献 399
第五部分 Apache Spark 之外的世界
第29 章 其他分布式实时流处理系统 405
Apache Storm 405
编程模型 406
Storm 拓扑 406
Storm 集群 407
与Spark 相比 407
Apache Flink 408
流处理优先的框架 408
与Spark 相比 409
Kafka Streams 409
Kafka Streams 编程模型 410
与Spark 相比 410
云上的流处理系统 411
AWS 上的Amazon Kinesis 411
微软的Azure Stream Analytics 412
Apache Beam 和Google Cloud Dataflow 413
第30 章 展望 417
紧随Spark 项目 418
在Stack Overflow 上寻求帮助 418
在邮件列表中进行讨论 418
参加会议 419
参加交流会 419
贡献Apache Spark 项目 419
参考文献 421
作者介绍 423
封面介绍 423