能力缺口与课程切入点

针对学习者普遍存在的 Spark Streaming 知识碎片化问题,特别是对核心编程模型理解不深、难以应对实际工程挑战的情况,本课程以 Spark 2.x 版本的流计算编程模型为切入点。多数学习者虽然能调用 `streamingContext` 创建 DStream,却对背后 `Receiver` 模式的数据拉取与广播机制、DStream 的转换为 RDD 的执行逻辑、以及 Checkpoint 机制如何保障状态一致性缺乏底层认知。这种认知断层导致在处理需要状态维护或容错保障的生产级流应用时,难以进行性能调优和故障排查。课程通过“Word Count”经典案例的深度剖析,直击 StreamingContext 的构建流程、DStream 转换的调度细节、以及 Receiver 的内存管理核心,旨在填补从 API 使用到模型理解的鸿沟,帮助学习者构建系统的实时流处理知识体系。

学习路径与核心输出

本课程适合具备 Scala 或 Java 基础语法、掌握 Spark Core 基础 RDD 操作(如 `map`、`flatMap`、`reduceByKey`)的学习者,但对 Spark Streaming 实际运行原理和编程模型的内在逻辑尚未深入。学习路径上,建议先完成 1-2 章节,熟悉 Spark Streaming 的环境配置和本地运行方式,为后续理解代码打下基础。核心章节 2-1 至 2-4 应重点理解:`Word Count` 程序中 DStream 的持续生成与更新过程,特别是数据如何在 `batchDuration` 内积累;StreamingContext 启动时 Checkpoint 的初始化作用及其对状态恢复的意义;DStream 的 `updateStateByKey` 等状态化转换函数与 Checkpoint 的协作机制。学完后,应能独立搭建一个包含数据源接入、文本解析、词频统计、以及 checkpoints 定位的全链路流处理程序,并解释 `receiver` 的内存占用与 `storageLevel` 设置的关联。关键能力输出包括:能够根据业务需求,选择合适的 `queueStreamSource` 或 `hdfsFileStreamSource` 并配置其参数,理解广播变量在 Receiver 端的必要性与潜在内存风险。

实践应用与资料配合

课程深入探讨了 StreamingContext 构建中 `batchDuration`、`microBatchDuration`、`slideDuration` 参数的内在联系及其对延迟与资源消耗的影响,揭示了实时计算中时间窗口选择的本质权衡,这是设计可扩展流应用的关键技能。掌握后,学习者能独立完成从实时数据源(如 Kafka)接入,到业务逻辑处理(如窗口聚合、实时异常检测),再到结果持久化(如 Elasticsearch)的端到端流处理系统搭建,并能通过 Spark UI 监控 `DStream` 的持久化状态和 `Receiver` 的数据堆积情况。资料配合方面,需结合 3-1 至 3-3 章节内容,实践 `QueueStreamSource` 的广播机制对性能的影响,以及 `hdfsFileStreamSource` 如何依赖 Checkpoint 进行状态恢复。建议通过修改 `SparkConf` 中的 `spark.executor.memory` 和 `spark.cores.max` 参数,观察 Receiver 模式下内存溢出和任务调度阻塞的具体表现,从而学习优化 Receiver 的数据处理能力。对 Scala 中的 `volatile` 关键字在广播变量应用场景进行实验,理解其在多线程环境下防止指令重排、保障数据可见性的作用机制,为处理高吞吐实时流提供参考。

课程目录

1-1 [课程内容] 本课程内容 (11:13)
1-2 [课程内容] 课程需要的环境 (02:53)
1-3 [课程内容] 本地运行Spark Streaming程序 (04:25)
2-1 [讲解word count程序] 细讲word count程序 (13:35)
2-2 [讲解word count程序] 监控Spark Streaming程序 (09:49)
2-3 [讲解word count程序] 讲解StreamingContext (06:17)
2-4 [讲解word count程序] 讲解DStream (15:49)
3-1 [接收数据源(Receiver)] Queue Streams Source (05:31)
3-2 [接收数据源(Receiver)] HDFS File Streams Source (13:19)
3-3 [接收数据源(Receiver)] 自定义数据接受者 (09:27)
4-1 [数据处理(Process)] Basic API (05:28)
4-2 [数据处理(Process)] Join相关API (04:31)
4-3 [数据处理(Process)] transform API (07:26)
4-4 [数据处理(Process)] window(窗口) API (08:14)
4-5 [数据处理(Process)] reduceByKeyAndWindow API (14:33)
4-6 [数据处理(Process)] 为什么需要checkpoint (09:26)
4-7 [数据处理(Process)] 其他window相关API (01:51)
4-8 [数据处理(Process)] updateStateByKey API (11:53)
4-9 [数据处理(Process)] mapWithState API (15:34)
4-10 [数据处理(Process)] Java版本的DStream的API (02:19)
5-1 [保存结果(Output)] 结果保存到HDFS (10:25)
5-2 [保存结果(Output)] 结果保存到Mysql讲解 (12:04)
5-3 [保存结果(Output)] 结果保存到Mysql演示 (07:25)
5-4 [保存结果(Output)] Spark Streaming结合Spark Sql (05:08)
6-1 [实例:网站流量的实时监控] Spark Streaming实际例子 (10:54)
6-2 [实例:网站流量的实时监控] Java编写Spark Streaming程序 (09:14)