第 2 章 流处理基础 流处理基础
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
到目前为止,您 已经看到了流处理如何解决传统批处理的一些局限性,以及如何实现新的应用和架构。您还了解了开源流处理领域的一些演变,以及 Flink 流应用程序的样子。在本章中,您将正式进入流处理领域。
本章旨在介绍流处理的基本概念及其框架要求。我们希望,读完本章后,你能对现代流处理系统的功能进行评估。
数据流编程入门
在 我们深入探讨流处理的基本原理之前,让我们先了解一下数据流编程的背景以及我们将在本书中使用的术语。
数据流图表
顾名思义,数据流程序描述了数据如何在操作之间流动。数据流程序通常表示为有向图,其中节点称为 运算符,表示计算,边表示 数据依赖关系。操作符是数据流应用程序的基本功能单元。它们从输入端消耗数据,对数据进行计算,并将数据输出到输出端,以便进一步处理。没有输入端口的操作符称为 数据源,没有输出端口的操作符称为 数据汇。数据流图必须至少有一个数据源和一个数据汇。图 2-1显示了一个数据流程序,该程序从输入的推文流中提取并统计标签。
图 2-1. 连续计数标签的逻辑数据流图(节点表示操作符,边表示数据依赖关系)
图 2-1中的数据流图之所以称为逻辑图,是因为它们传达了计算逻辑的高层视图。为了执行数据流程序,需要将逻辑图转换为物理数据流图,详细说明程序的执行方式。例如,如果我们使用的是分布式处理引擎,每个操作员可能有多个并行任务,运行在不同的物理机器上。图 2-2显示了图 2-1 逻辑图的物理数据流图。在逻辑数据流图中,节点代表操作符,而在物理数据流中,节点是任务。提取标签 "和 "计数 "操作符有两个并行的操作符任务,每个任务对输入数据的一个子集进行计算。
图 2-2. 计算标签的物理数据流计划(节点代表任务)
数据并行和任务并行
可以通过不同方式利用数据流图中的并行性。首先,可以对输入数据进行分区,让相同操作的任务在数据子集上并行执行。这种并行方式称为数据并行。数据并行非常有用,因为它可以处理大量数据,并将计算负荷分散到多个计算节点上。其次,可以让不同操作员的任务并行执行相同或不同数据的计算。这种并行方式称为任务并行。利用任务并行,可以更好地利用集群的计算资源。
数据交换策略
数据交换策略 定义了如何将数据项分配给物理数据流图中的任务。数据交换策略可以由执行引擎根据操作符的语义自动选择,也可以由数据流程序员明确施加。下面,我们简要回顾一些常见的数据交换策略,如图 2-3 所示。
-
转发策略将数据从任务发送到接收任务。如果两个任务位于同一台物理机上(任务调度程序通常会确保这一点),这种交换策略就能避免网络通信。
-
广播策略将每个数据项发送给操作员的所有并行任务。由于这种策略会复制数据并涉及网络通信,因此成本相当高。
-
基于关键字的策略通过关键字属性对数据进行分区,并保证具有相同关键字的数据项将由相同的任务处理。在图 2-2 中,"提取标签 "操作符的输出是按键(标签)划分的,这样计数操作符任务就能正确计算每个标签的出现次数。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access