说明
底本为 Designing Data-Intensive Applications(Martin Kleppmann);版权归原作者与出版社;本文为个人学习笔记,转载请注明出处。
本文覆盖 第 10–12 章:批处理、流处理、数据系统的未来。
系列总览与导航:《DDIA》读书笔记系列 · 仅目录页
第10章:批处理
10.1 系统类型对比
| 类型 | 特点 | 示例 |
|---|---|---|
| 在线服务 | 请求-响应模式,低延迟 | Web 服务、API |
| 批处理系统 | 处理大量数据,高吞吐 | MapReduce、Spark |
| 流处理系统 | 实时处理数据流 | Kafka Streams、Flink |
10.2 Unix 工具的批处理
1 | # 找出访问量最高的 URL |
Unix 哲学:
- 每个程序做好一件事
- 输出可以成为另一个程序的输入
- 快速原型开发
10.3 MapReduce
词频统计示例
1 | # Map 函数 |
10.4 Join 策略
| 策略 | 特点 | 适用场景 |
|---|---|---|
| 排序-合并 Join | 两边都排序后合并 | Reduce 端 Join |
| 广播 Join | 小表广播到所有节点 | 一边数据量小 |
| 分区 Join | 按相同键分区 | 两边都很大 |
10.5 现代批处理框架
| 框架 | 特点 |
|---|---|
| Spark | 内存计算,比 MapReduce 快 10-100x |
| Flink | 统一批流处理 |
| Presto/Trino | 交互式 SQL 查询 |
第11章:流处理
11.1 批处理 vs 流处理
| 方面 | 批处理 | 流处理 |
|---|---|---|
| 数据 | 有界,静态 | 无界,持续到达 |
| 延迟 | 分钟~小时 | 毫秒~秒 |
| 触发 | 定时/手动 | 事件驱动 |
| 结果 | 一次性输出 | 持续更新 |
11.2 消息系统
传统消息队列
代表:RabbitMQ, ActiveMQ, Amazon SQS
日志型消息系统(Kafka)
特点:
- 消息持久化,可重放
- 保序(分区内)
- 多消费者组可独立消费
11.3 Kafka 架构
11.4 变更数据捕获(CDC)
捕获数据库的变更,将其转换为事件流
应用场景:
- 同步搜索索引、缓存
- 微服务间数据同步
- 实时 ETL
11.5 事件溯源(Event Sourcing)
11.6 时间语义
| 时间类型 | 定义 | 用途 |
|---|---|---|
| 事件时间 | 事件实际发生的时间 | 业务逻辑 |
| 处理时间 | 事件到达处理系统的时间 | 系统监控 |
| 摄入时间 | 事件进入流处理系统的时间 | 折中方案 |
11.7 窗口操作
| 窗口类型 | 特点 |
|---|---|
| 滚动窗口 | 固定大小,不重叠 |
| 滑动窗口 | 固定大小,可重叠 |
| 会话窗口 | 按活动间隙分割 |
第12章:数据系统的未来
12.1 数据集成
将多个系统的数据统一管理
12.2 Lambda 架构
问题:需要维护两套代码
12.3 Kappa 架构
统一批流处理:重放日志即可重新计算
12.4 解绑数据库
将数据库的各个功能分解为独立组件
| 功能 | 传统数据库 | 解绑后 |
|---|---|---|
| 存储 | B-Tree | 分布式文件系统 |
| 事务 | 内置 | 独立事务管理器 |
| 索引 | 内置 | 外部搜索引擎 |
| 缓存 | 内置 | Redis |
12.5 端到端论证
某些功能只能在端到端层面正确实现
示例:exactly-once 消息传递
- 中间件可能声称 exactly-once
- 但网络可能中断
- 真正的 exactly-once 需要应用层去重
12.6 数据流系统设计原则
- 不可变性:日志是追加的,事件不可修改
- 可重放性:可以从日志重建状态
- 分离计算和存储:计算层无状态
- 模式演化:支持模式向前/向后兼容
本章关键要点
- 批处理适合高吞吐的离线计算
- MapReduce 是分布式批处理的基础范式
- 流处理适合低延迟的实时计算
- Kafka 是现代流处理的核心组件
- CDC 连接传统数据库和事件流
- 事件溯源将状态变更作为事件序列存储
- 时间语义在流处理中至关重要
- Lambda/Kappa 架构是批流融合的尝试
- 解绑数据库提供更大的灵活性
延伸阅读
- 《Streaming Systems》:流处理权威指南
- 《Kafka: The Definitive Guide》:Kafka 权威指南
- 《Designing Data-Intensive Applications》原书