grokking Streaming Systems
作者: Josh Fischer and Ning Wang
语言: 英文
出版年份: 2022
下载链接:
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。

书籍摘要

Grokking Streaming Systems: Real-time event processing

书籍定位

《Grokking Streaming Systems: Real-time event processing》是一本由Manning出版社出版的流处理系统入门指南,专为希望掌握实时数据处理技术的开发者设计。本书作者Josh Fischer和Ning Wang都是Apache Heron项目的核心贡献者和项目管理委员会成员,在流处理领域有丰富的实践经验。本书采用独特的图解教学方式,通过大量精心设计的图表和实际案例,帮助读者深入理解流处理系统的核心概念和工作原理。与大多数技术书籍不同,本书采用框架无关的方式教学,让读者能够掌握通用概念,从而轻松适应任何流处理框架。

核心内容

第一部分:流处理入门(第1-6章)

第一部分建立了流处理系统的基础知识体系。第1章从宏观角度介绍了流处理系统,通过对比应用程序、后端服务、批处理系统和流处理系统的不同架构,帮助读者理解流处理系统的独特价值。作者使用生动的比喻(如邮局系统vs装配线)来解释批处理与流处理的区别。

第2章是流处理的"Hello World",通过一个简单的收费站案例,引导读者构建第一个流处理作业。本章介绍了Streamwork框架(本书专门设计的简化流处理框架)的基本概念,包括源(Source)、算子(Operator)、汇(Sink)等核心组件,以及事件在系统中的流动过程。

第3章深入讲解并行化和数据分组,这是流处理系统扩展性的关键。本章介绍了数据并行性和任务并行性的区别,以及如何通过并行化组件来提高系统吞吐量。作者详细解释了洗牌分组(Shuffle grouping)和字段分组(Fields grouping)两种主要的数据分组策略,以及它们对事件顺序和系统性能的影响。

第4章专注于流图(Stream graph)概念,展示了流处理作业如何表示为有向无环图(DAG)。通过一个信用卡欺诈检测系统的案例,作者解释了流扇出(fan-out)和流扇入(fan-in)的概念,以及如何通过多个通道(channels)实现复杂的数据流模式。

第5章讨论交付语义(Delivery semantics),这是流处理系统可靠性的核心。本章详细讲解了三种主要的交付语义:至多一次(at-most-once)、至少一次(at-least-once)和恰好一次(exactly-once)。作者通过实际案例展示了如何通过确认机制(acknowledging)和检查点(checkpointing)来实现不同的交付保证。

第6章回顾了第一部分的核心概念,并为第二部分的高级主题做了铺垫。

第二部分:高级主题(第7-11章)

第二部分深入探讨流处理系统的高级概念和实践。第7章讲解窗口计算(Windowed computations),这是流处理中处理无限数据流的关键技术。本章详细介绍了三种主要的窗口策略:固定窗口(Fixed windows)、滑动窗口(Sliding windows)和会话窗口(Session windows),以及它们在欺诈检测等实际场景中的应用。

第8章专注于连接操作(Join operations),这是将多个数据流合并处理的重要技术。通过一个车辆排放监测系统的案例,作者展示了如何在流处理中实现内连接(inner join)和外连接(outer join),以及窗口连接(windowed join)的特殊考虑。本章还讨论了物化视图(materialized view)在流处理中的应用。

第9章讨论背压(Backpressure)机制,这是流处理系统处理负载不平衡的关键技术。作者解释了容量(capacity)、利用率(utilization)和余量(headroom)的概念,以及当系统组件处理速度不匹配时如何通过背压机制来防止数据丢失或系统崩溃。

第10章深入有状态计算(Stateful computation),这是实现复杂流处理逻辑的基础。本章详细讲解了状态(state)的概念、状态与临时数据的区别、检查点的创建和加载机制,以及事件驱动的时间管理(event-based timing)。

第11章总结了全书的高级概念,并为读者提供了进一步学习的方向。

适用读者

主要目标群体

  1. 中级到高级开发者:已经有一定开发经验(2年以上),熟悉Web开发、API设计或批处理作业,希望扩展技能到实时数据处理领域。
  2. 数据工程师:需要构建实时数据管道和处理大规模事件流的专业人士。
  3. 系统架构师:需要评估和设计实时数据处理解决方案的技术决策者。
  4. 计算机科学学生:希望了解现代分布式系统设计原理的学生。

预备知识要求

  • 编程基础:熟悉至少一种编程语言(本书示例使用Java)
  • 基本系统概念:了解进程、线程、网络通信等基本计算机系统概念
  • 数据存储知识:对数据库或数据存储有基本了解
  • 分布式系统基础:对分布式系统的基本挑战(如容错、一致性)有初步认识

价值亮点

1. 独特的图解教学方法

本书最大的特色是大量精心设计的图表。作者从最初的手绘草图开始,经过多次迭代,最终创建了清晰、直观的视觉化解释。这些图表不仅美观,更重要的是能够帮助读者直观理解复杂的流处理概念,这是纯文字描述难以达到的效果。

2. 框架无关的教学理念

与大多数专注于特定框架(如Apache Flink、Apache Kafka Streams、Apache Spark Streaming)的书籍不同,本书采用框架无关的方式教学。作者专门设计了简化的Streamwork框架来演示核心概念,确保读者掌握的是通用原理,而不是特定框架的API。这种教学方法让读者能够轻松适应任何流处理框架。

3. 渐进式的学习路径

本书采用"从简单到复杂"的渐进式教学方法。从最基本的流处理概念开始,逐步引入更高级的主题。每个新概念都通过实际案例进行讲解,确保读者能够理解概念的实际应用场景。

4. 实际案例驱动

全书贯穿多个实际案例,包括收费站监控、信用卡欺诈检测、车辆排放监测、系统使用情况分析等。这些案例不仅展示了流处理技术的实际应用,还帮助读者理解如何将理论知识转化为实际解决方案。

5. 作者实践经验丰富

两位作者都是Apache Heron项目的核心贡献者,在Twitter和Amplitude等公司有丰富的流处理系统实践经验。他们不仅理解理论概念,更重要的是知道这些概念在实际生产环境中的应用和挑战。

阅读建议

学习路径建议

  1. 初学者:建议按顺序阅读全书,重点关注第1-6章的基础概念。完成所有代码示例,确保理解流处理系统的基本工作原理。
  2. 有经验的开发者:可以直接阅读第7-11章的高级主题,特别是窗口计算、连接操作和背压机制。这些章节涵盖了流处理系统设计中最具挑战性的问题。
  3. 实践导向的学习者:下载本书的配套代码(GitHub仓库),运行所有示例,并尝试修改和扩展这些示例。实践是掌握流处理技术的最佳方式。
  4. 团队学习:与团队成员一起学习和讨论书中的概念,特别是系统架构设计相关的章节。

实践建议

  1. 环境配置:按照附录的指导设置Java 11、Apache Maven 3.8.1和Netcat/NMap等必要工具。建议从本地环境开始学习。
  2. 代码实践:本书的代码仓库包含第2、3、4、5、7、8章的完整示例。建议跟随书中的示例进行实践,并尝试修改参数观察系统行为的变化。
  3. 概念映射:在学习过程中,尝试将书中的概念映射到你熟悉的流处理框架(如Apache Flink、Apache Kafka Streams等)。这有助于加深理解并提高实际应用能力。
  4. 项目应用:如果可能,将学到的知识应用到实际工作项目中。可以从一个小规模的实时数据处理任务开始,逐步扩展到更复杂的场景。

注意事项

  1. 技术选择:本书使用Java作为示例语言,但所有概念都适用于其他编程语言。重要的是理解概念,而不是具体的语法。
  2. 框架演进:流处理技术发展迅速,具体框架的API可能会发生变化。但本书教授的核心概念是相对稳定的,具有长期价值。
  3. 生产环境考虑:本书主要关注概念和原理,生产环境的流处理系统还需要考虑监控、运维、安全等额外因素。
  4. 资源需求:流处理系统通常需要分布式环境才能充分发挥其优势。学习阶段可以在本地运行,但理解分布式特性可能需要更复杂的环境。

总结

《Grokking Streaming Systems: Real-time event processing》是一本独特而实用的流处理入门指南。它通过精心设计的图表、渐进式的教学方法和框架无关的教学理念,帮助读者深入理解流处理系统的核心概念。无论你是希望将批处理系统迁移到实时处理,还是需要构建新的流处理解决方案,这本书都能提供宝贵的指导。通过本书的学习,读者将能够掌握流处理系统的基本原理,理解常见的设计模式和挑战,并为深入学习特定流处理框架打下坚实的基础。

期待您的支持
捐助本站