阿里巴巴高级技术专家何沛 - APACHE BEAM流处理与批处理的统一编程框架

辜童童

2017/11/14 发布于 技术 分类

流数据集在当前的互联网应用中越来越常见。相应的,我们对于数据流水线的实时性、数据完全性、以及处理成本有着不同的要求。 Apache Beam对于流处理与批处理定义了一个全新的统一编程框架。在这个编程框架下,数据流水线的开发独立于执行引擎。它解决了流水线执行引擎的可移植性问题,用户既可以在流处理与批处理之间切换,也可以在不同的执行引擎之间切换。 现在,已经和Apache Beam集成的流水线引擎有:Apache Apex, Apache Flink, Apache Spark, Google Cloud Dataflow。

文字内容
1. Apache Beam: 流处理与批处理的统一编程框架 何沛 阿里巴巴-中间件-实时计算 Apache Beam committer Based on slides by Tyler Akidau & Frances Perry.
2. Apache Beam 定义了流处理与批处理统一的编程模型, 它生成的流水线具有很好的可移植性, 它在执行层面定义了高效的执行协议。
3. 1. Apache Beam 编程模型 • What Where When How 2. SDK 构建流水线 • Java • Python 3. 执行引擎 Runners • Apex • Spark • Flink • Google Cloud Dataflow Beam Java Other Languages Beam Python Beam Model: 构建流水线 Apache Apex Apache Cloud Apache Flink Dataflow Spark Beam Model: 执行用户方法 Execution Execution Execution
4. 1 流处理与批处理统一编程模型
5. 目标: 计算每个队的得分 支持流处理与批处理 https://commons.wikimedia.org/wiki/File:Globe_centered_in_the_Atlantic_Ocean_(green_and_grey_globe_scheme).svg
6. 数据...
7. …很多数据...
8. ...越来越多的数据... Thursday Wednesday Tuesday
9. … 无边界的流数据... 8:00 1:00 9:00 2:00 10:00 3:00 11:00 4:00 12:00 5:00 13:00 6:00 14:00 7:00
10. …无序、有延迟的流数据. 8:00 8:00 8:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00
11. 事件时间 (Event time) 与 处理时间 (Processing Time) What Where When
12. What 业务逻辑是什么? (ParDo, Combine) Where 在事件时间轴上对应哪里? (Windowing) When 何时输出结果?(Triggering) How 如何更新结果?(Accumulating)
13. What: 求和 (Sum) // Collection of raw log lines PCollection<String> raw = IO.read(...); // Element-wise transformation into team/score pairs PCollection<KV<String, Integer>> input = raw.apply(ParDo.of(new ParseFn()); // Composite transformation containing an aggregation PCollection<KV<String, Integer>> scores = input.apply(Sum.integersPerKey()); *All code snippets are pseudo-java -- details shortened or elided for clarity. What Where When
14. What: 求和 (Sum) What Where When
15. Where: 在事件时间轴上对应哪里? Windowing 可以将流数据划分为有边界的数据集 Fixed 234 Key 1 Key 2 Key 3 Sliding 123 Sessions 1 34 45 Time 2 What Where When
16. Where: 两分钟 固定窗口 PCollection<KV<String, Integer>> scores = input .apply(Window .into(FixedWindows.of(Duration.standardMinutes(2))) .apply(Sum.integersPerKey()); What Where When
17. Where: 两分钟 固定窗口 What Where When
18. 流数据处理: 引入Watermark的概念 Input Processing Time 10:00 Output Event Time 10:00 11:00 11:00 12:00 12:00 13:00 13:00 14:00 14:00 15:00 15:00
19. When: 何时输出计算结果? Triggers控制结果输出 triggering(AtWatermark()) What Where When
20. When: 按时输出(Triggering at the Watermark) PCollection<KV<String, Integer>> scores = input .apply(Window .into(FixedWindows.of(Duration.standardMinutes(2)) .triggering(AtWatermark())) .apply(Sum.integersPerKey()); What Where When
21. When: 按时输出(Triggering at the Watermark) What Where When
22. When: 提早输出(Early Firing) 和 迟到输出(Late Firing) PCollection<KV<String, Integer>> scores = input .apply(Window .into(FixedWindows.of(Duration.standardMinutes(2)) .triggering(AtWatermark() .withEarlyFirings(AtPeriod(Duration.standardMinutes(1)) .withLateFirings(AtCount(1)))) .apply(Sum.integersPerKey()); What Where When
23. When: 提早输出(Early Firing) 和 迟到输出(Late Firing) What Where When
24. How: 如何更新结果? • 同一个窗口的多次输出是如何累计的? • 取决于下游消费者 Firing Elements 提前输出 [3] 按时输出 [5, 1] 迟到输出 [2] Last Observed Total Observed Discarding 3 6 2 2 11 Accumulating 3 9 11 11 23 (Accumulating & Retracting not yet implemented.) Acc. & Retracting 3 (9, -3) (11, -9) 11 11 What Where When
25. How: 加上新的,减去旧的 PCollection<KV<String, Integer>> scores = input .apply(Window .into(Sessions.withGapDuration(Duration.standardMinutes(1))) .triggering(AtWatermark() .withEarlyFirings(AtPeriod(Duration.standardMinutes(1))) .withLateFirings(AtCount(1))) .accumulatingAndRetractingFiredPanes()) .apply(Sum.integersPerKey()); What Where When
26. How: 加上新的,减去旧的 What Where When
27. What When Where How 1.传统批处理 2. 支持Window 的批处理 3. 流数据处理 4. 支持Retractions的 流处理 What Where When
28. 2 Apache Beam流水线的可移植性
29. 数据流水线开发的权衡 1+1=2 完整性 实时性 $$$ 运维成本
30. Apache Beam流水线的可移植性 1. 编写 • 选择最熟悉的语言* 2. 执行 • 选择最适合的引擎 • 统一的语义便于引擎的切换 Beam Java Other Languages Beam Python Beam Model: 构建流水线 Apache Apex Apache Cloud Apache Flink Dataflow Spark Beam Model: 执行用户方法 Execution Execution Execution
31. 执行引擎对Beam功能的支持表 https://beam.apache.org/learn/runners/capability-matrix/
32. 3 Apache Beam的高效性
33. 4 Apache Beam与阿里巴巴
34. Growing the Community Apache Beam交流群 • 如果你有大数据APIs, 写一个Beam SDK 或者 DSL. • 如果你有一个存储系统、消息系统,写一 个Beam IO connector! • 如果你有一个分布式引擎,写一个Beam runner!
35. 谢谢!
36. Learn More! Apache Beam https://beam.apache.org Resources https://beam.apache.org/documentation/resources/ Join the Beam mailing lists! user-subscribe@beam.apache.org dev-subscribe@beam.apache.org