全书分为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生产者 …… 152
8.2.3 Kafka消费者 …… 154
8.2.4 将Kafka用于数据总线 …… 156
8.3 RabbitMQ …… 157
8.3.1 RabbitMQ架构 …… 157
8.3.2 RabbitMQ的使用 …… 158
8.3.3 将RabbitMQ用于配置总线 …… 160
8.4 Apache Camel …… 161
8.4.1 使用Apache Camel集成系统 …… 162
8.4.2 使用Apache Camel管理流数据路由 …… 163
8.5 本章小结 …… 166
第9章 数据存储 …… 167
9.1 存储的设计原则 …… 167
9.2 点查询 …… 169
9.2.1 数据灵活性 …… 170
9.2.2 MongoDB数据库 …… 171
9.2.3 数据过期和按时间分表 …… 172
9.3 Ad-Hoc查询 …… 174
9.3.1 倒排索引 …… 175
9.3.2 ElasticSearch …… 176
9.3.3 分索引存储 …… 177
9.4 离线分析 …… 178
9.4.1 存储 …… 179
9.4.2 处理和分析 …… 182
9.4.3 调度 …… 183
9.5 关系型数据库查询 …… 185
9.6 本章小结 …… 186
第10章 服务治理和配置管理 …… 188
10.1 服务治理 …… 188
10.1.1 流服务和微服务 …… 188
10.1.2 微服务框架Spring Cloud …… 190
10.2 面向配置编程 …… 195
10.2.1 面向配置编程思想 …… 195
10.2.2 更高级的配置:领域特定语言 …… 196
10.3 动态配置 …… 196
10.4 将前端配置与后端服务配置隔离开 …… 201
10.5 本章小结 …… 202
第11章 实时流计算应用案例 …… 204
11.1 实时流数据特征提取引擎 …… 204
11.1.1 流数据特征提取引擎DSL定义 …… 204
11.1.2 实现原理 …… 208
11.1.3 具体实现 …… 210
11.2 使用Flink实现风控引擎 …… 216
11.2.1 实现原理 …… 217
11.2.2 具体实现 …… 218
11.3 本章小结 …… 225