From 38446d9cdb0fac8f6de834d87f7563aee4269dcf Mon Sep 17 00:00:00 2001 From: hainaweiben Date: Fri, 5 Jul 2024 17:57:11 +0800 Subject: [PATCH 1/3] Removed redundant section numbering, replaced some watermarked images, and changed the citation format for images. --- doc/_toc.yml | 2 +- doc/ch-big-data-intro/batch-stream.md | 8 +- doc/ch-big-data-intro/evolution.md | 8 +- .../exercise-stream-with-kafka.md | 2 +- .../{bigdata.md => sec-bigdata.md} | 18 +- .../stream-processing-basics.md | 18 +- doc/ch-big-data-intro/technologies.md | 20 +- doc/ch-datastream-api/data-types.md | 109 +++--- doc/ch-datastream-api/exercise-stock-basic.md | 32 +- doc/ch-datastream-api/img/filter.png | Bin 28780 -> 0 bytes doc/ch-datastream-api/img/filter.svg | 4 + doc/ch-datastream-api/img/flatmap.png | Bin 32361 -> 0 bytes doc/ch-datastream-api/img/flatmap.svg | 4 + .../img/type-inference-process.png | Bin 26911 -> 0 bytes .../img/type-inference-process.svg | 4 + doc/ch-datastream-api/skeleton.md | 65 ++-- doc/ch-datastream-api/transformations.md | 316 +++++++++++------- .../user-define-functions.md | 74 ++-- .../configuration-file.md | 138 ++++---- ...ent-job-coding-packaging-and-submission.md | 26 +- .../flink-command-line-interface-guide.md | 44 +-- .../flink-deployment-and-configuration.md | 139 +++++--- .../hadoop-flink.md | 38 +-- doc/ch-deployment-and-configuration/index.md | 4 +- .../operator-chaining-and-slot-sharing.md | 50 ++- .../Exactly-Once-guarantee.md | 50 ++- .../custom-source-and-sink.md | 201 ++++++----- .../exercise-stock-price-data-stream.md | 12 +- doc/ch-flink-connectors/flink-connector.md | 161 ++++----- doc/ch-flink-connectors/index.md | 4 +- .../exercise-Flink-development-environment.md | 40 +-- .../functional-programming.md | 8 +- .../inheritance-and-polymorphism.md | 6 +- doc/ch-state-checkpoint/checkpoint.md | 194 ++++++----- doc/ch-state-checkpoint/exercise-state.md | 18 +- doc/ch-state-checkpoint/savepoint.md | 226 +++++++------ doc/ch-state-checkpoint/state.md | 308 +++++++++-------- doc/ch-system-design/dataflow.md | 76 +++-- doc/ch-system-design/exercise-wordcount.md | 20 +- doc/ch-system-design/flink-core.md | 100 +++--- doc/ch-system-design/img/code.png | Bin 138903 -> 53743 bytes doc/ch-system-design/img/data-exchange.png | Bin 167086 -> 0 bytes doc/ch-system-design/img/data-exchange.svg | 4 + doc/ch-system-design/img/flink-component.png | Bin 158853 -> 0 bytes doc/ch-system-design/img/flink-component.svg | 4 + doc/ch-system-design/img/graph.png | Bin 293503 -> 0 bytes doc/ch-system-design/img/graph.svg | 4 + doc/ch-system-design/img/logical-view.png | Bin 121275 -> 0 bytes doc/ch-system-design/img/logical-view.svg | 4 + doc/ch-system-design/img/operator-chain.png | Bin 151970 -> 0 bytes doc/ch-system-design/img/operator-chain.svg | 4 + .../img/physical-execution.png | Bin 178231 -> 0 bytes .../img/physical-execution.svg | 4 + doc/ch-system-design/img/slot-parallelism.png | Bin 229461 -> 0 bytes doc/ch-system-design/img/slot-parallelism.svg | 4 + doc/ch-system-design/img/slot-sharing.png | Bin 161593 -> 0 bytes doc/ch-system-design/img/slot-sharing.svg | 4 + doc/ch-system-design/img/standalone-arch.png | Bin 120080 -> 0 bytes doc/ch-system-design/img/standalone-arch.svg | 4 + doc/ch-system-design/img/task-slot.png | Bin 153353 -> 0 bytes doc/ch-system-design/img/task-slot.svg | 4 + doc/ch-system-design/task-resource.md | 93 ++++-- doc/ch-table-sql/catalog-function.md | 105 +++--- doc/ch-table-sql/dynamic-table.md | 111 +++--- doc/ch-table-sql/exercise-iot.md | 48 +-- doc/ch-table-sql/index.md | 14 +- doc/ch-table-sql/sql-ddl.md | 152 ++++----- doc/ch-table-sql/sql-join.md | 134 +++++--- doc/ch-table-sql/sql-window.md | 190 ++++++----- doc/ch-table-sql/system-function.md | 154 ++++----- doc/ch-table-sql/table-overview.md | 210 ++++++------ doc/ch-time-window/exercise-stock.md | 10 +- doc/ch-time-window/join.md | 82 +++-- doc/ch-time-window/late-elements.md | 28 +- doc/ch-time-window/process-function.md | 98 +++--- doc/ch-time-window/time.md | 161 +++++---- doc/ch-time-window/window.md | 266 ++++++++------- 77 files changed, 2554 insertions(+), 1889 deletions(-) rename doc/ch-big-data-intro/{bigdata.md => sec-bigdata.md} (90%) delete mode 100644 doc/ch-datastream-api/img/filter.png create mode 100644 doc/ch-datastream-api/img/filter.svg delete mode 100644 doc/ch-datastream-api/img/flatmap.png create mode 100644 doc/ch-datastream-api/img/flatmap.svg delete mode 100644 doc/ch-datastream-api/img/type-inference-process.png create mode 100644 doc/ch-datastream-api/img/type-inference-process.svg delete mode 100644 doc/ch-system-design/img/data-exchange.png create mode 100644 doc/ch-system-design/img/data-exchange.svg delete mode 100644 doc/ch-system-design/img/flink-component.png create mode 100644 doc/ch-system-design/img/flink-component.svg delete mode 100644 doc/ch-system-design/img/graph.png create mode 100644 doc/ch-system-design/img/graph.svg delete mode 100644 doc/ch-system-design/img/logical-view.png create mode 100644 doc/ch-system-design/img/logical-view.svg delete mode 100644 doc/ch-system-design/img/operator-chain.png create mode 100644 doc/ch-system-design/img/operator-chain.svg delete mode 100644 doc/ch-system-design/img/physical-execution.png create mode 100644 doc/ch-system-design/img/physical-execution.svg delete mode 100644 doc/ch-system-design/img/slot-parallelism.png create mode 100644 doc/ch-system-design/img/slot-parallelism.svg delete mode 100644 doc/ch-system-design/img/slot-sharing.png create mode 100644 doc/ch-system-design/img/slot-sharing.svg delete mode 100644 doc/ch-system-design/img/standalone-arch.png create mode 100644 doc/ch-system-design/img/standalone-arch.svg delete mode 100644 doc/ch-system-design/img/task-slot.png create mode 100644 doc/ch-system-design/img/task-slot.svg diff --git a/doc/_toc.yml b/doc/_toc.yml index 7e9e2db..8a55a74 100644 --- a/doc/_toc.yml +++ b/doc/_toc.yml @@ -4,7 +4,7 @@ subtrees: entries: - file: ch-big-data-intro/index entries: - - file: ch-big-data-intro/bigdata + - file: ch-big-data-intro/sec-bigdata - file: ch-big-data-intro/batch-stream - file: ch-big-data-intro/technologies - file: ch-big-data-intro/evolution diff --git a/doc/ch-big-data-intro/batch-stream.md b/doc/ch-big-data-intro/batch-stream.md index f6f366c..f098cbd 100644 --- a/doc/ch-big-data-intro/batch-stream.md +++ b/doc/ch-big-data-intro/batch-stream.md @@ -3,12 +3,12 @@ ## 数据与数据流 -在大数据的 5 个 “V” 中我们已经提到,数据量大且产生速度快。从时间维度来讲,数据源源不断地产生,形成一个无界的数据流(Unbounded Data Stream)。如 {numref}`data-and-data-stream` 所示,单条数据被称为事件(Event),事件按照时序排列会形成一个数据流。例如,我们每时每刻的运动数据都会累积到手机传感器上,金融交易随时随地都在发生,物联网(Internet of Things,IoT)传感器会持续监控并生成数据。 +在大数据的 5 个 “V” 中我们已经提到,数据量大且产生速度快。从时间维度来讲,数据源源不断地产生,形成一个无界的数据流(Unbounded Data Stream)。如 {numref}`fig-data-and-data-stream` 所示,单条数据被称为事件(Event),事件按照时序排列会形成一个数据流。例如,我们每时每刻的运动数据都会累积到手机传感器上,金融交易随时随地都在发生,物联网(Internet of Things,IoT)传感器会持续监控并生成数据。 ```{figure} ./img/data-and-data-stream.png --- width: 60% -name: data-and-data-stream +name: fig-data-and-data-stream --- 数据和数据流 ``` @@ -39,12 +39,12 @@ name: data-and-data-stream ### 生产者 - 消费者模型 -处理流数据一般使用 “生产者 - 消费者”(Producer-Consumer)模型来解决问题。如 {numref}`producer-consumer` 所示,生产者生成数据,将数据发送到一个缓存区域(Buffer),消费者从缓存区域中消费数据。这里我们暂且不关心生产者如何生产数据,以及数据如何缓存,我们只关心如何实现消费者。 +处理流数据一般使用 “生产者 - 消费者”(Producer-Consumer)模型来解决问题。如 {numref}`fig-producer-consumer` 所示,生产者生成数据,将数据发送到一个缓存区域(Buffer),消费者从缓存区域中消费数据。这里我们暂且不关心生产者如何生产数据,以及数据如何缓存,我们只关心如何实现消费者。 ```{figure} ./img/producer-consumer.png --- width: 60% -name: producer-consumer +name: fig-producer-consumer --- 生产者 - 消费者模型 ``` diff --git a/doc/ch-big-data-intro/evolution.md b/doc/ch-big-data-intro/evolution.md index 1b4a19e..2e5e6b2 100644 --- a/doc/ch-big-data-intro/evolution.md +++ b/doc/ch-big-data-intro/evolution.md @@ -5,12 +5,12 @@ ## Lambda 架构 -当以 Storm 为代表的第一代流处理框架成熟后,一些互联网公司为了兼顾数据的实时性和准确性,采用 {numref}`lambda-architecture` 所示的 Lambda 架构来处理数据并提供在线服务。Lambda 架构主要分为 3 部分:批处理层、流处理层和在线服务层。其中数据流来自 Kafka 这样的消息队列。 +当以 Storm 为代表的第一代流处理框架成熟后,一些互联网公司为了兼顾数据的实时性和准确性,采用 {numref}`fig-lambda-architecture` 所示的 Lambda 架构来处理数据并提供在线服务。Lambda 架构主要分为 3 部分:批处理层、流处理层和在线服务层。其中数据流来自 Kafka 这样的消息队列。 ```{figure} ./img/lambda.png --- width: 60% -name: lambda-architecture +name: fig-lambda-architecture --- Lambda 架构 ``` @@ -43,12 +43,12 @@ Lambda 架构 ## Kappa 架构 -Kafka 的创始人杰•克雷普斯认为在很多场景下,维护一套 Lambda 架构的大数据处理平台耗时耗力,于是提出在某些场景下,没有必要维护一个批处理层,直接使用一个流处理层即可满足需求,即 {numref}`kappa-architecture` 所示的 Kappa 架构。 +Kafka 的创始人杰•克雷普斯认为在很多场景下,维护一套 Lambda 架构的大数据处理平台耗时耗力,于是提出在某些场景下,没有必要维护一个批处理层,直接使用一个流处理层即可满足需求,即 {numref}`fig-kappa-architecture` 所示的 Kappa 架构。 ```{figure} ./img/kappa.png --- width: 60% -name: kappa-architecture +name: fig-kappa-architecture --- Kappa 架构 ``` diff --git a/doc/ch-big-data-intro/exercise-stream-with-kafka.md b/doc/ch-big-data-intro/exercise-stream-with-kafka.md index f5ca86a..db924f0 100644 --- a/doc/ch-big-data-intro/exercise-stream-with-kafka.md +++ b/doc/ch-big-data-intro/exercise-stream-with-kafka.md @@ -7,7 +7,7 @@ ### 消息队列的功能 -消息队列一般使用{numref}`producer-consumer` 所示的 “生产者 - 消费者” 模型来解决问题:生产者生成数据,将数据发送到一个缓存区域,消费者从缓存区域中消费数据。消息队列可以解决以下问题: +消息队列一般使用{numref}`fig-producer-consumer` 所示的 “生产者 - 消费者” 模型来解决问题:生产者生成数据,将数据发送到一个缓存区域,消费者从缓存区域中消费数据。消息队列可以解决以下问题: - 系统解耦:很多企业内部有众多系统,一个 App 也包含众多模块,如果将所有的系统和模块都放在一起作为一个庞大的系统来开发,未来则会很难维护和扩展。如果将各个模块独立出来,模块之间通过消息队列来通信,未来可以轻松扩展每个独立模块。另外,假设没有消息队列,M 个生产者和 N 个消费者通信,会产生 M×N 个数据管道,消息队列将这个复杂度降到了 M+N。 - 异步处理:同步是指如果模块 A 向模块 B 发送消息,必须等待返回结果后才能执行接下来的业务逻辑。异步是消息发送方模块 A 无须等待返回结果即可继续执行,只需要向消息队列中发送消息,至于谁去处理这些消息、消息等待多长时间才能被处理等一系列问题,都由消费者负责。异步处理更像是发布通知,发送方不用关心谁去接收通知、如何对通知做出响应等问题。 diff --git a/doc/ch-big-data-intro/bigdata.md b/doc/ch-big-data-intro/sec-bigdata.md similarity index 90% rename from doc/ch-big-data-intro/bigdata.md rename to doc/ch-big-data-intro/sec-bigdata.md index ca99235..e17f228 100644 --- a/doc/ch-big-data-intro/bigdata.md +++ b/doc/ch-big-data-intro/sec-bigdata.md @@ -1,14 +1,14 @@ -(bigdata)= +(sec-bigdata)= # 什么是大数据 ## 大数据的 5 个 “V” -大数据,顾名思义,就是拥有庞大体量的数据。关于什么是大数据、如何定义大数据、如何使用大数据等一系列问题,拥有不同领域背景的读者的理解各不相同。通常,业界将大数据的特点归纳为 {numref}`5v` 所示的 5 个 “V”。 +大数据,顾名思义,就是拥有庞大体量的数据。关于什么是大数据、如何定义大数据、如何使用大数据等一系列问题,拥有不同领域背景的读者的理解各不相同。通常,业界将大数据的特点归纳为 {numref}`fig-5V` 所示的 5 个 “V”。 ```{figure} ./img/5V.png --- width: 60% -name: 5v +name: fig-5V --- 大数据的 5 个 "V" ``` @@ -31,12 +31,12 @@ name: 5v 计算机诞生之后,一般是在单台计算机上处理数据。大数据时代到来后,一些传统的数据处理方法无法满足大数据的处理需求。将一组计算机组织到一起形成一个集群,利用集群的力量来处理大数据的工程实践逐渐成为主流。这种使用集群进行计算的方式被称为分布式计算,当前几乎所有的大数据系统都在使用集群进行分布式计算。 -分布式计算的概念听起来很高深,其背后的思想却十分朴素,即分而治之,又称为分治法(Divide and Conquer)。如图 {numref}`divide-conquer` 所示,分治法是指将一个原始问题分解为多个子问题,多个子问题分别在多台计算机上求解,借助必要的数据交换和合并策略,将子结果汇总即可求出最终结果的方法。具体而言,不同的分布式系统使用的算法和策略根据所要解决的问题各有不同,但基本上都是将计算拆分,把子问题放到多台计算机上,分而治之地计算求解。分布式计算的每台计算机(物理机或虚拟机)又被称为一个节点。 +分布式计算的概念听起来很高深,其背后的思想却十分朴素,即分而治之,又称为分治法(Divide and Conquer)。如图 {numref}`fig-divide-conquer` 所示,分治法是指将一个原始问题分解为多个子问题,多个子问题分别在多台计算机上求解,借助必要的数据交换和合并策略,将子结果汇总即可求出最终结果的方法。具体而言,不同的分布式系统使用的算法和策略根据所要解决的问题各有不同,但基本上都是将计算拆分,把子问题放到多台计算机上,分而治之地计算求解。分布式计算的每台计算机(物理机或虚拟机)又被称为一个节点。 ```{figure} ./img/divide-conquer.png --- width: 60% -name: divide-conquer +name: fig-divide-conquer --- 分治法 ``` @@ -45,12 +45,12 @@ name: divide-conquer ### MPI -MPI 是一个 “老牌” 分布式计算框架,从 MPI 这个名字也可以看出,MPI 主要解决节点间数据通信的问题。在前 MapReduce 时代,MPI 是分布式计算的业界标准。MPI 现在依然广泛运用于全球各大超级计算中心、大学、研究机构中,许多物理、生物、化学、能源等基础学科的大规模分布式计算都依赖 MPI。{numref}`mpi`所示为使用 MPI 在 4 台服务器上并行计算的示意图。 +MPI 是一个 “老牌” 分布式计算框架,从 MPI 这个名字也可以看出,MPI 主要解决节点间数据通信的问题。在前 MapReduce 时代,MPI 是分布式计算的业界标准。MPI 现在依然广泛运用于全球各大超级计算中心、大学、研究机构中,许多物理、生物、化学、能源等基础学科的大规模分布式计算都依赖 MPI。{numref}`fig-mpi`所示为使用 MPI 在 4 台服务器上并行计算的示意图。 ```{figure} ./img/mpi.png --- width: 60% -name: mpi +name: fig-mpi --- 在 4 台服务器上使用 MPI 进行并行计算 ``` @@ -69,14 +69,14 @@ MPI 能够以很细的粒度控制数据的通信,这是它的优势,从某 比起 MPI,MapReduce 编程模型将更多的中间过程做了封装,程序员只需要将原始问题转化为更高层次的应用程序接口(Application Programming Interface,API),至于原始问题如何分解为更小的子问题、中间数据如何传输和交换、如何将计算扩展到多个节点等一系列细节问题可以交给大数据编程模型来解决。因此,MapReduce 相对来说学习门槛更低,使用更方便,编程开发速度更快。 -{numref}`mapreduce-sandwichs` 所示为使用 MapReduce 思想制作三明治的过程,读者可以通过这幅图更好的理解 MapReduce。 +{numref}`fig-mapreduce-sandwichs` 所示为使用 MapReduce 思想制作三明治的过程,读者可以通过这幅图更好的理解 MapReduce。 假设我们需要大批量地制作三明治,三明治的每种食材可以分别单独处理,Map 阶段将原材料在不同的节点上分别进行处理,生成一些中间食材,Shuffle/Group 阶段将不同的中间食材进行组合,Reduce 阶段最终将一组中间食材组合成三明治成品。可以看到,这种 Map + Shuffle/Group + Reduce 的方式就是分治法的一种实现。 ```{figure} ./img/mapreduce-sandwichs.jpeg --- width: 60% -name: mapreduce-sandwichs +name: fig-mapreduce-sandwichs --- 使用 MapReduce 制作三明治的过程 ``` diff --git a/doc/ch-big-data-intro/stream-processing-basics.md b/doc/ch-big-data-intro/stream-processing-basics.md index cd5e6fc..6fce3cf 100644 --- a/doc/ch-big-data-intro/stream-processing-basics.md +++ b/doc/ch-big-data-intro/stream-processing-basics.md @@ -29,19 +29,19 @@ 比起批处理,流处理对窗口(Window)和时间概念更为敏感。在批处理场景下,数据已经按照某个时间维度被分批次地存储了。一些公司经常将用户行为日志按天存储,一些开放数据集都会说明数据采集的时间始末。因此,对于批处理任务,处理一个数据集,其实就是对该数据集对应的时间窗口内的数据进行处理。在流处理场景下,数据以源源不断的流的形式存在,数据一直在产生,没有始末。我们要对数据进行处理时,往往需要明确一个时间窗口,比如,数据在 “每秒”“每小时”“每天” 的维度下的一些特性。窗口将数据流切分成多个数据块,很多数据分析都是在窗口上进行操作,比如连接、聚合以及其他时间相关的操作。 -{numref}`three-type-window` 展示了 3 种常见的窗口形式:滚动窗口、滑动窗口、会话窗口。 +{numref}`fig-three-type-window` 展示了 3 种常见的窗口形式:滚动窗口、滑动窗口、会话窗口。 ```{figure} ./img/three-type-window.png --- width: 60% -name: three-type-window +name: fig-three-type-window --- 3 种常见的窗口形式 ``` -- **滚动窗口(Tumbling Window)**:模式一般定义一个固定的窗口长度,长度是一个时间间隔,比如小时级的窗口或分钟级的窗口。窗口像车轮一样,滚动向前,任意两个窗口之间不会包含同样的数据。 -- **滑动窗口(Sliding Window)**:模式也设有一个固定的窗口长度。假如我们想每分钟开启一个窗口,统计 10 分钟内的股票价格波动,就使用滑动窗口模式。当窗口的长度大于滑动的间隔,可能会导致两个窗口之间包含同样的事件。其实,滚动窗口模式是滑动窗口模式的一个特例,滚动窗口模式中滑动的间隔正好等于窗口的大小。 -- **会话窗口(Session Window)**:模式的窗口长度不固定,而是通过一个间隔来确定窗口,这个间隔被称为会话间隔(Session Gap)。当两个事件之间的间隔大于会话间隔,则两个事件被划分到不同的窗口中;当事件之间的间隔小于会话间隔,则两个事件被划分到同一窗口。 +- 滚动窗口(Tumbling Window):模式一般定义一个固定的窗口长度,长度是一个时间间隔,比如小时级的窗口或分钟级的窗口。窗口像车轮一样,滚动向前,任意两个窗口之间不会包含同样的数据。 +- 滑动窗口(Sliding Window):模式也设有一个固定的窗口长度。假如我们想每分钟开启一个窗口,统计 10 分钟内的股票价格波动,就使用滑动窗口模式。当窗口的长度大于滑动的间隔,可能会导致两个窗口之间包含同样的事件。其实,滚动窗口模式是滑动窗口模式的一个特例,滚动窗口模式中滑动的间隔正好等于窗口的大小。 +- 会话窗口(Session Window):模式的窗口长度不固定,而是通过一个间隔来确定窗口,这个间隔被称为会话间隔(Session Gap)。当两个事件之间的间隔大于会话间隔,则两个事件被划分到不同的窗口中;当事件之间的间隔小于会话间隔,则两个事件被划分到同一窗口。 ### 时间语义 @@ -56,12 +56,12 @@ name: three-type-window #### “一分钟” 真的是一分钟吗? -在很多应用场景中,时间有着不同的语义,“一分钟” 真的是一分钟吗?很多手机游戏中多玩家在线实时竞技,假设我们在玩某款手机游戏,该游戏将数据实时发送给游戏服务器,服务器计算一分钟内玩家的一些操作,这些计算影响用户该局游戏的最终得分。当游戏正酣,我们进入了电梯,手机信号丢失,一分钟后才恢复信号;幸好手机在电梯期间缓存了掉线时的数据,并在信号恢复后将缓存数据传回了服务器,{numref}`data-transmission-signal-loss` 展示了这个场景的流处理过程。在丢失信号的这段时间,你的数据没有被计算进去,显然这样的计算不公平。当信号恢复时,数据重传到服务器,再根据 Event Time 重新计算一次,那就非常公平了。我们可以根据 Event Time 复现一个事件序列的实际顺序。因此,使用 Event Time 是最准确的。 +在很多应用场景中,时间有着不同的语义,“一分钟” 真的是一分钟吗?很多手机游戏中多玩家在线实时竞技,假设我们在玩某款手机游戏,该游戏将数据实时发送给游戏服务器,服务器计算一分钟内玩家的一些操作,这些计算影响用户该局游戏的最终得分。当游戏正酣,我们进入了电梯,手机信号丢失,一分钟后才恢复信号;幸好手机在电梯期间缓存了掉线时的数据,并在信号恢复后将缓存数据传回了服务器,{numref}`fig-data-transmission-signal-loss` 展示了这个场景的流处理过程。在丢失信号的这段时间,你的数据没有被计算进去,显然这样的计算不公平。当信号恢复时,数据重传到服务器,再根据 Event Time 重新计算一次,那就非常公平了。我们可以根据 Event Time 复现一个事件序列的实际顺序。因此,使用 Event Time 是最准确的。 ```{figure} ./img/signal.png --- width: 60% -name: data-transmission-signal-loss +name: fig-data-transmission-signal-loss --- 数据传输过程恰好遇到信号丢失 ``` @@ -76,12 +76,12 @@ Watermark 是一种折中解决方案,它假设某个时间点上,不会有 ## 状态与检查点 -状态是流处理区别于批处理的特有概念。如果我们对一个文本数据流进行处理,把英文大写字母都改成英文小写字母,这种处理是无状态的,即系统不需要记录额外的信息。如果我们想统计这个数据流一分钟内的单词出现次数,一方面要处理每一瞬间新流入的数据,另一方面要保存之前一分钟内已经进入系统的数据,额外保存的数据就是状态。{numref}`state-stateless` 展示了无状态和有状态两种不同类型的计算。 +状态是流处理区别于批处理的特有概念。如果我们对一个文本数据流进行处理,把英文大写字母都改成英文小写字母,这种处理是无状态的,即系统不需要记录额外的信息。如果我们想统计这个数据流一分钟内的单词出现次数,一方面要处理每一瞬间新流入的数据,另一方面要保存之前一分钟内已经进入系统的数据,额外保存的数据就是状态。{numref}`fig-state-stateless` 展示了无状态和有状态两种不同类型的计算。 ```{figure} ./img/state-stateless.png --- width: 60% -name: state-stateless +name: fig-state-stateless --- 无状态计算和有状态计算 ``` diff --git a/doc/ch-big-data-intro/technologies.md b/doc/ch-big-data-intro/technologies.md index bee749b..63c25d3 100644 --- a/doc/ch-big-data-intro/technologies.md +++ b/doc/ch-big-data-intro/technologies.md @@ -5,7 +5,7 @@ MapReduce 编程模型的提出为大数据分析和处理开创了一条先河 ## Hadoop -2004 年,Hadoop 的创始人道格·卡廷(Doug Cutting)和麦克·卡法雷拉(Mike Cafarella)受 MapReduce 编程模型和 Google File System 等技术的启发,对其中提及的思想进行了编程实现,Hadoop 的名字来源于道格 · 卡廷儿子的玩具大象。由于道格 · 卡廷后来加入了雅虎,并在雅虎工作期间做了大量 Hadoop 的研发工作,因此 Hadoop 也经常被认为是雅虎开源的一款大数据框架。时至今日,Hadoop 不仅是整个大数据领域的先行者和领航者,更形成了一套围绕 Hadoop 的生态圈,Hadoop 和它的生态圈是绝大多数企业首选的大数据解决方案。{numref}`hadoop-ecosystem` 展示了 Hadoop 生态圈一些流行组件。 +2004 年,Hadoop 的创始人道格·卡廷(Doug Cutting)和麦克·卡法雷拉(Mike Cafarella)受 MapReduce 编程模型和 Google File System 等技术的启发,对其中提及的思想进行了编程实现,Hadoop 的名字来源于道格 · 卡廷儿子的玩具大象。由于道格 · 卡廷后来加入了雅虎,并在雅虎工作期间做了大量 Hadoop 的研发工作,因此 Hadoop 也经常被认为是雅虎开源的一款大数据框架。时至今日,Hadoop 不仅是整个大数据领域的先行者和领航者,更形成了一套围绕 Hadoop 的生态圈,Hadoop 和它的生态圈是绝大多数企业首选的大数据解决方案。{numref}`fig-hadoop-ecosystem` 展示了 Hadoop 生态圈一些流行组件。 Hadoop 生态圈的核心组件主要有如下 3 个。 @@ -23,7 +23,7 @@ Hadoop 生态圈的核心组件主要有如下 3 个。 ```{figure} ./img/hadoop.png --- width: 60% -name: hadoop-ecosystem +name: fig-hadoop-ecosystem --- Hadoop 生态圈 ``` @@ -39,22 +39,22 @@ Spark 是一款大数据处理框架,其开发初衷是改良 Hadoop MapReduce Spark 的核心在于计算,主要目的在于优化 Hadoop MapReduce 计算部分,在计算层面提供更细致的服务。 -Spark 并不能完全取代 Hadoop,实际上,从 {numref}`hadoop-ecosystem` 可以看出,Spark 融入了 Hadoop 生态圈,成为其中的重要一员。一个 Spark 任务很可能依赖 HDFS 上的数据,向 YARN 申请计算资源,将结果输出到 HBase 上。当然,Spark 也可以不用依赖这些组件,独立地完成计算。 +Spark 并不能完全取代 Hadoop,实际上,从 {numref}`fig-hadoop-ecosystem` 可以看出,Spark 融入了 Hadoop 生态圈,成为其中的重要一员。一个 Spark 任务很可能依赖 HDFS 上的数据,向 YARN 申请计算资源,将结果输出到 HBase 上。当然,Spark 也可以不用依赖这些组件,独立地完成计算。 ```{figure} ./img/spark.png --- width: 60% -name: spark-ecosystem +name: fig-spark-ecosystem --- Spark 生态圈 ``` -Spark 主要面向批处理需求,因其优异的性能和易用的接口,Spark 已经是批处理界绝对的 “王者”。Spark 的子模块 Spark Streaming 提供了流处理的功能,它的流处理主要基于 mini-batch 的思想。如 {numref}`spark-streaming-mini-batch` 所示,Spark Streaming 将输入数据流切分成多个批次,每个批次使用批处理的方式进行计算。因此,Spark 是一款集批处理和流处理于一体的处理框架。 +Spark 主要面向批处理需求,因其优异的性能和易用的接口,Spark 已经是批处理界绝对的 “王者”。Spark 的子模块 Spark Streaming 提供了流处理的功能,它的流处理主要基于 mini-batch 的思想。如 {numref}`fig-spark-streaming-mini-batch` 所示,Spark Streaming 将输入数据流切分成多个批次,每个批次使用批处理的方式进行计算。因此,Spark 是一款集批处理和流处理于一体的处理框架。 ```{figure} ./img/spark-streaming-mini-batch.png --- width: 60% -name: spark-streaming-mini-batch +name: fig-spark-streaming-mini-batch --- Spark Streaming mini-batch 处理 ``` @@ -65,12 +65,12 @@ Spark Streaming mini-batch 处理 Kafka 也是一种面向大数据领域的消息队列框架。在大数据生态圈中,Hadoop 的 HDFS 或 Amazon S3 提供数据存储服务,Hadoop MapReduce、Spark 和 Flink 负责计算,Kafka 常常用来连接不同的应用系统。 -如 {numref}`kafka-multi-system` 所示,企业中不同的应用系统作为数据生产者会产生大量数据流,这些数据流还需要进入不同的数据消费者,Kafka 起到数据集成和系统解耦的作用。系统解耦是让某个应用系统专注于一个目标,以降低整个系统的维护难度。在实践上,一个企业经常拆分出很多不同的应用系统,系统之间需要建立数据流管道(Stream Pipeline)。假如没有 Kafka 的消息队列,M 个生产者和 N 个消费者之间要建立 M×N 个点对点的数据流管道,Kafka 就像一个中介,让数据管道的个数变为 M+N,大大减小了数据流管道的复杂程度。 +如 {numref}`fig-kafka-multi-system` 所示,企业中不同的应用系统作为数据生产者会产生大量数据流,这些数据流还需要进入不同的数据消费者,Kafka 起到数据集成和系统解耦的作用。系统解耦是让某个应用系统专注于一个目标,以降低整个系统的维护难度。在实践上,一个企业经常拆分出很多不同的应用系统,系统之间需要建立数据流管道(Stream Pipeline)。假如没有 Kafka 的消息队列,M 个生产者和 N 个消费者之间要建立 M×N 个点对点的数据流管道,Kafka 就像一个中介,让数据管道的个数变为 M+N,大大减小了数据流管道的复杂程度。 ```{figure} ./img/kafka.png --- width: 60% -name: kafka-multi-system +name: fig-kafka-multi-system --- Kafka 可以连接多个应用系统 ``` @@ -83,14 +83,14 @@ Kafka 可以连接多个应用系统 Flink 是由德国 3 所大学发起的的学术项目,后来不断发展壮大,并于 2014 年年末成为 Apache 顶级项目之一。在德语中,“flink” 表示快速、敏捷,以此来表征这款计算框架的特点。 -Flink 主要面向流处理,如果说 Spark 是批处理界的 “王者”,那么 Flink 就是流处理领域冉冉升起的 “新星”。流处理并不是一项全新的技术,在 Flink 之前,不乏流处理引擎,比较著名的有 Storm、Spark Streaming,{numref}`evolution-stream-frameworks` 展示了流处理框架经历的三代演进。 +Flink 主要面向流处理,如果说 Spark 是批处理界的 “王者”,那么 Flink 就是流处理领域冉冉升起的 “新星”。流处理并不是一项全新的技术,在 Flink 之前,不乏流处理引擎,比较著名的有 Storm、Spark Streaming,{numref}`fig-evolution-stream-frameworks` 展示了流处理框架经历的三代演进。 2011 年成熟的 Apache Strom(以下简称 Storm)是第一代被广泛采用的流处理引擎。它是以数据流中的事件为最小单位来进行计算的。以事件为单位的框架的优势是延迟非常低,可以提供毫秒级的延迟。流处理结果依赖事件到达的时序准确性,Storm 并不能保障处理结果的一致性和准确性。Storm 只支持至少一次(At-Least-Once)和至多一次(At-Most-Once),即数据流里的事件投递只能保证至少一次或至多一次,不能保证只有一次(Exactly-Once)。在多项基准测试中,Storm 的数据吞吐量和延迟都远逊于 Flink。对于很多对数据准确性要求较高的应用,Storm 有一定劣势。此外,Storm 不支持 SQL,不支持中间状态(State)。 ```{figure} ./img/evolution-stream-frameworks.png --- width: 60% -name: evolution-stream-frameworks +name: fig-evolution-stream-frameworks --- 流处理框架演进 ``` diff --git a/doc/ch-datastream-api/data-types.md b/doc/ch-datastream-api/data-types.md index b79a8a8..c0d3d97 100644 --- a/doc/ch-datastream-api/data-types.md +++ b/doc/ch-datastream-api/data-types.md @@ -3,36 +3,43 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -几乎所有的大数据框架都要面临分布式计算、数据传输和持久化问题。数据传输过程前后要进行数据的序列化和反序列化:序列化就是将一个内存对象转换成二进制串,形成可网络传输或者可持久化的数据流。反序列化将二进制串转换为内存对象,这样就可以直接在编程语言中读写和操作这个对象。一种最简单的序列化方法就是将复杂数据结构转化成JSON格式。序列化和反序列化是很多大数据框架必须考虑的问题,在Java和大数据生态圈中,已有不少序列化工具,比如Java自带的序列化工具、Kryo等。一些RPC框架也提供序列化功能,比如最初用于Hadoop的Apache Avro、Facebook开发的Apache Thrift和Google开发的Protobuf,这些工具在速度和压缩比等方面比JSON有明显的优势。 +几乎所有的大数据框架都要面临分布式计算、数据传输和持久化问题。数据传输过程前后要进行数据的序列化和反序列化:序列化就是将一个内存对象转换成二进制串,形成可网络传输或者可持久化的数据流。反序列化将二进制串转换为内存对象,这样就可以直接在编程语言中读写和操作这个对象。一种最简单的序列化方法就是将复杂数据结构转化成 JSON 格式。序列化和反序列化是很多大数据框架必须考虑的问题,在 Java 和大数据生态圈中,已有不少序列化工具,比如 Java 自带的序列化工具、Kryo 等。一些 RPC 框架也提供序列化功能,比如最初用于 Hadoop 的 Apache Avro、Facebook 开发的 Apache Thrift 和 Google 开发的 Protobuf,这些工具在速度和压缩比等方面比 JSON 有明显的优势。 -但是Flink依然选择了重新开发了自己的序列化框架,因为序列化和反序列化将关乎整个流处理框架各方面的性能,对数据类型了解越多,可以更早地完成数据类型检查,节省数据存储空间。 +但是 Flink 依然选择了重新开发了自己的序列化框架,因为序列化和反序列化将关乎整个流处理框架各方面的性能,对数据类型了解越多,可以更早地完成数据类型检查,节省数据存储空间。 -## Flink支持的数据类型 +## Flink 支持的数据类型 -![Flink支持的数据类型](./img/data-type.png) +```{figure} ./img/data-type.png +--- +name: flink-data-types +width: 80% +align: center +--- +Flink 支持的数据类型 +``` -Flink支持上图所示的几种数据类型:基础类型、数组、复合类型、辅助类型。其中,Kryo是最后的备选方案,如果能够优化,尽量不要使用Kryo,否则会有大量的性能损失。 +Flink 支持上图所示的几种数据类型:基础类型、数组、复合类型、辅助类型。其中,Kryo 是最后的备选方案,如果能够优化,尽量不要使用 Kryo,否则会有大量的性能损失。 ### 基础类型 -所有Java和Scala基础数据类型,诸如Int、Double、Long(包括Java原生类型int和装箱后的类型Integer)、String,以及Date、BigDecimal和BigInteger。 +所有 Java 和 Scala 基础数据类型,诸如 Int、Double、Long(包括 Java 原生类型 int 和装箱后的类型 Integer)、String,以及 Date、BigDecimal 和 BigInteger。 ### 数组 -基础类型或其他对象类型组成的数组,如`String[]`。 +基础类型或其他对象类型组成的数组,如 `String[]`。 ### 复合类型 #### Scala case class -Scala case class是Scala的特色,用这种方式定义一个数据结构非常简洁。例如股票价格的数据结构: +Scala case class 是 Scala 的特色,用这种方式定义一个数据结构非常简洁。例如股票价格的数据结构: ```scala case class StockPrice(symbol: String = "", @@ -40,7 +47,7 @@ case class StockPrice(symbol: String = "", ts: Long = 0) ``` -这样定义的数据结构,所有的子字段都是`public`,可以直接读取。另外,我们可以不用`new`即可获取一个新的对象。 +这样定义的数据结构,所有的子字段都是 `public`,可以直接读取。另外,我们可以不用 `new` 即可获取一个新的对象。 ```scala val stock = StockPrice("AAPL", 300d, 1582819200000L) @@ -48,14 +55,14 @@ val stock = StockPrice("AAPL", 300d, 1582819200000L) #### Java POJO -Java的话,需要定义POJO(Plain Old Java Object)类,定义POJO类有一些注意事项: +Java 的话,需要定义 POJO(Plain Old Java Object)类,定义 POJO 类有一些注意事项: -* 该类必须用`public`修饰。 -* 该类必须有一个`public`的无参数的构造函数。 -* 该类的所有非静态(non-static)、非瞬态(non-transient)字段必须是`public`,如果字段不是`public`则必须有标准的getter和setter方法,比如对于字段`A a`有`A getA()`和`setA(A a)`。 -* 所有子字段也必须是Flink支持的数据类型。 +* 该类必须用 `public` 修饰。 +* 该类必须有一个 `public` 的无参数的构造函数。 +* 该类的所有非静态(non-static)、非瞬态(non-transient)字段必须是 `public`,如果字段不是 `public` 则必须有标准的 getter 和 setter 方法,比如对于字段 `A a` 有 `A getA()` 和 `setA(A a)`。 +* 所有子字段也必须是 Flink 支持的数据类型。 -下面三个例子中,只有第一个是POJO,其他两个都不是POJO,非POJO类将使用Kryo序列化工具。 +下面三个例子中,只有第一个是 POJO,其他两个都不是 POJO,非 POJO 类将使用 Kryo 序列化工具。 ```java public class StockPrice { @@ -63,7 +70,7 @@ public class StockPrice { public double price; public long ts; - public StockPrice() {} + public StockPrice(){} public StockPrice(String symbol, Long timestamp, Double price){ this.symbol = symbol; this.ts = timestamp; @@ -74,14 +81,14 @@ public class StockPrice { // NOT POJO public class StockPriceNoGeterSeter { - // LOGGER 无getter和setter + // LOGGER 无 getter 和 setter private Logger LOGGER = LoggerFactory.getLogger(StockPriceNoGeterSeter.class); public String symbol; public double price; public long ts; - public StockPriceNoGeterSeter() {} + public StockPriceNoGeterSeter(){} public StockPriceNoGeterSeter(String symbol, long timestamp, Double price){ this.symbol = symbol; @@ -107,22 +114,22 @@ public class StockPriceNoConstructor { } ``` -如果不确定是否是POJO,可以使用下面的代码检查: +如果不确定是否是 POJO,可以使用下面的代码检查: ```java System.out.println(TypeInformation.of(StockPrice.class).createSerializer(new ExecutionConfig())); ``` -返回的结果中,如果这个类在使用`KryoSerializer`,说明不是POJO类。 +返回的结果中,如果这个类在使用 `KryoSerializer`,说明不是 POJO 类。 -此外,使用Avro生成的类可以被Flink识别为POJO。 +此外,使用 Avro 生成的类可以被 Flink 识别为 POJO。 #### Tuple -Tuple可被翻译为元组,比如我们可以将刚刚定义的股票价格抽象为一个三元组。Scala用括号来定义元组,比如一个三元组:`(String, Long, Double)`。 +Tuple 可被翻译为元组,比如我们可以将刚刚定义的股票价格抽象为一个三元组。Scala 用括号来定义元组,比如一个三元组:`(String, Long, Double)`。 :::info -Scala访问元组中的元素时,要使用下划线。与其他地方从0开始计数不同,这里是从1开始计数,_1为元组中的第一个元素。下面的代码是一个Scala Tuple的例子。 +Scala 访问元组中的元素时,要使用下划线。与其他地方从 0 开始计数不同,这里是从 1 开始计数,_1 为元组中的第一个元素。下面的代码是一个 Scala Tuple 的例子。 ::: ```scala @@ -141,7 +148,7 @@ def main(args: Array[String]): Unit = { } ``` -Flink为Java专门准备了元组类型,比如3元组为`Tuple3`,最多支持到25元组`Tuple25`。访问元组中的元素时,要使用Tuple类准备好的公共字段:`f0`、`f1`...或者使用`getField(int pos)`方法,并注意进行类型转换。这里的元组是从0开始计数。 +Flink 为 Java 专门准备了元组类型,比如 3 元组为 `Tuple3`,最多支持到 25 元组 `Tuple25`。访问元组中的元素时,要使用 Tuple 类准备好的公共字段:`f0`、`f1`... 或者使用 `getField(int pos)` 方法,并注意进行类型转换。这里的元组是从 0 开始计数。 ```java // Java Tuple Example @@ -164,11 +171,11 @@ public static void main(String[] args) throws Exception { } ``` -Scala的Tuple中所有元素都不可变,如果想改变元组中的值,一般需要创建一个新的对象并赋值。Java的Tuple中的元素是可以被更改和赋值的,因此在Java中使用Tuple可以充分利用这一特性,可以减少垃圾回收的压力。 +Scala 的 Tuple 中所有元素都不可变,如果想改变元组中的值,一般需要创建一个新的对象并赋值。Java 的 Tuple 中的元素是可以被更改和赋值的,因此在 Java 中使用 Tuple 可以充分利用这一特性,可以减少垃圾回收的压力。 ```java -// stock是一个Tuple3 -// 获取Tuple3中第三个位置的值 +// stock 是一个 Tuple3 +// 获取 Tuple3 中第三个位置的值 Double price = stock.getField(2); // 给第三个位置赋值 stock.setField(70, 2); @@ -176,30 +183,44 @@ stock.setField(70, 2); ### 辅助类型 -Flink还支持Java的`ArrayList`、`HashMap`和`Enum`,Scala的`Either`和`Option`。 +Flink 还支持 Java 的 `ArrayList`、`HashMap` 和 `Enum`,Scala 的 `Either` 和 `Option`。 ## 泛型和其他类型 -当以上任何一个类型均不满足时,Flink认为该数据结构是一种泛型(GenericType),使用Kryo来进行序列化和反序列化。但Kryo在有些流处理场景效率非常低,有可能造成流数据的积压。我们可以使用`senv.getConfig.disableGenericTypes()`来禁用Kryo,禁用后,Flink遇到无法处理的数据类型将抛出异常,这种方法对于调试非常有效。 +当以上任何一个类型均不满足时,Flink 认为该数据结构是一种泛型(GenericType),使用 Kryo 来进行序列化和反序列化。但 Kryo 在有些流处理场景效率非常低,有可能造成流数据的积压。我们可以使用 `senv.getConfig.disableGenericTypes()` 来禁用 Kryo,禁用后,Flink 遇到无法处理的数据类型将抛出异常,这种方法对于调试非常有效。 ## TypeInformation -以上如此多的类型,在Flink中,统一使用`TypeInformation`类表示。比如,POJO在Flink内部使用`PojoTypeInfo`来表示,`PojoTypeInfo`继承自`CompositeType`,`CompositeType`继承自`TypeInformation`。下图展示了`TypeInformation`的继承关系,可以看到,前面提到的诸多数据类型,在Flink中都有对应的类型。`TypeInformation`的一个重要的功能就是创建`TypeSerializer`序列化器,为该类型的数据做序列化。每种类型都有一个对应的序列化器来进行序列化。 +以上如此多的类型,在 Flink 中,统一使用 `TypeInformation` 类表示。比如,POJO 在 Flink 内部使用 `PojoTypeInfo` 来表示,`PojoTypeInfo` 继承自 `CompositeType`,`CompositeType` 继承自 `TypeInformation`。下图展示了 `TypeInformation` 的继承关系,可以看到,前面提到的诸多数据类型,在 Flink 中都有对应的类型。`TypeInformation` 的一个重要的功能就是创建 `TypeSerializer` 序列化器,为该类型的数据做序列化。每种类型都有一个对应的序列化器来进行序列化。 -![TypeInformation继承关系](./img/typeinformation.png)) +```{figure} ./img/typeinformation.png +--- +name: fig-typeinformation +width: 80% +align: center +--- +TypeInformation 继承关系 +``` -使用前面介绍的各类数据类型时,Flink会自动探测传入的数据类型,生成对应的`TypeInformation`,调用对应的序列化器,因此用户其实无需关心类型推测。比如,Flink的`map`函数Scala签名为:`def map[R: TypeInformation](fun: T => R): DataStream[R]`,传入`map`的数据类型是T,生成的数据类型是R,Flink会推测T和R的数据类型,并使用对应的序列化器进行序列化。 +使用前面介绍的各类数据类型时,Flink 会自动探测传入的数据类型,生成对应的 `TypeInformation`,调用对应的序列化器,因此用户其实无需关心类型推测。比如,Flink 的 `map` 函数 Scala 签名为:`def map[R: TypeInformation](fun: T => R): DataStream[R]`,传入 `map` 的数据类型是 T,生成的数据类型是 R,Flink 会推测 T 和 R 的数据类型,并使用对应的序列化器进行序列化。 -![Flink数据类型推断和序列化](./img/type-inference-process.png) +```{figure} ./img/type-inference-process.svg +--- +name: fig-type-inference-process +width: 80% +align: center +--- +Flink 数据类型推断和序列化 +``` -上图展示了Flink的类型推断和序列化过程,以一个字符串`String`类型为例,Flink首先推断出该类型,并生成对应的`TypeInformation`,然后在序列化时调用对应的序列化器,将一个内存对象写入内存块。 +{numref}`fig-type-inference-process` 展示了 Flink 的类型推断和序列化过程,以一个字符串 `String` 类型为例,Flink 首先推断出该类型,并生成对应的 `TypeInformation`,然后在序列化时调用对应的序列化器,将一个内存对象写入内存块。 ## 注册类 -如果传递给Flink算子的数据类型是父类,实际运行过程中使用的是子类,子类中有一些父类没有的数据结构和特性,将子类注册可以提高性能。在执行环境上调用`env.registerType(clazz) `来注册类。`registerType`方法的源码如下所示,其中`TypeExtractor`对数据类型进行推断,如果传入的类型是POJO,则可以被Flink识别和注册,否则将使用Kryo。 +如果传递给 Flink 算子的数据类型是父类,实际运行过程中使用的是子类,子类中有一些父类没有的数据结构和特性,将子类注册可以提高性能。在执行环境上调用 `env.registerType(clazz) ` 来注册类。`registerType` 方法的源码如下所示,其中 `TypeExtractor` 对数据类型进行推断,如果传入的类型是 POJO,则可以被 Flink 识别和注册,否则将使用 Kryo。 ```java -// Flink registerType java源码 +// Flink registerType java 源码 public void registerType(Class type) { if (type == null) { throw new NullPointerException("Cannot register null type class."); @@ -217,14 +238,14 @@ public void registerType(Class type) { ## 注册序列化器 -如果你的数据类型不是Flink支持的上述类型,这时Flink会使用Kryo序列化。我们需要对数据类型和序列化器进行注册,以便Flink对该数据类型进行序列化。 +如果你的数据类型不是 Flink 支持的上述类型,这时 Flink 会使用 Kryo 序列化。我们需要对数据类型和序列化器进行注册,以便 Flink 对该数据类型进行序列化。 ```java -// 使用对TestClassSerializer对TestClass进行序列化 +// 使用对 TestClassSerializer 对 TestClass 进行序列化 env.registerTypeWithKryoSerializer(TestClass.class, new TestClassSerializer()); ``` -其中`TestClassSerializer`要继承`com.esotericsoftware.kryo.Serializer`。下面的代码是一个序列化示意案例。 +其中 `TestClassSerializer` 要继承 `com.esotericsoftware.kryo.Serializer`。下面的代码是一个序列化示意案例。 ```java static class TestClassSerializer extends Serializer implements Serializable { @@ -243,7 +264,7 @@ static class TestClassSerializer extends Serializer implements Serial } ``` -相应的包需要添加到pom中: +相应的包需要添加到 pom 中: ``` @@ -253,7 +274,7 @@ static class TestClassSerializer extends Serializer implements Serial ``` -对于Apache Thrift和Protobuf的用户,已经有人将序列化器编写好,我们可以直接拿来使用: +对于 Apache Thrift 和 Protobuf 的用户,已经有人将序列化器编写好,我们可以直接拿来使用: ```java // Google Protobuf @@ -263,7 +284,7 @@ env.getConfig().registerTypeWithKryoSerializer(MyCustomType.class, ProtobufSeria env.getConfig().addDefaultKryoSerializer(MyCustomType.class, TBaseSerializer.class); ``` -Google Protobuf的pom: +Google Protobuf 的 pom: ``` @@ -284,7 +305,7 @@ Google Protobuf的pom: ``` -Apache Thrift的pom: +Apache Thrift 的 pom: ``` diff --git a/doc/ch-datastream-api/exercise-stock-basic.md b/doc/ch-datastream-api/exercise-stock-basic.md index 76f5a78..0bf072a 100644 --- a/doc/ch-datastream-api/exercise-stock-basic.md +++ b/doc/ch-datastream-api/exercise-stock-basic.md @@ -3,31 +3,31 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -经过本章的学习,读者应该对Flink的DataStream API有了初步的认识,本节以股票价格这个场景来实践所学内容。 +经过本章的学习,读者应该对 Flink 的 DataStream API 有了初步的认识,本节以股票价格这个场景来实践所学内容。 ## 实验目的 -针对具体的业务场景,学习如何定义相关数据结构,如何自定义Source,如何使用各类算子。 +针对具体的业务场景,学习如何定义相关数据结构,如何自定义 Source,如何使用各类算子。 ## 实验内容 -我们虚构了一个股票交易数据集,如下所示,该数据集中有每笔股票的交易时间、价格和交易量。数据集放置在了`src/main/resource/stock`文件夹里。 +我们虚构了一个股票交易数据集,如下所示,该数据集中有每笔股票的交易时间、价格和交易量。数据集放置在了 `src/main/resource/stock` 文件夹里。 ``` -股票代号,交易日期,交易时间(秒),价格,交易量 +股票代号, 交易日期, 交易时间(秒), 价格, 交易量 US2.AAPL,20200108,093003,297.260000000,100 US2.AAPL,20200108,093003,297.270000000,100 US2.AAPL,20200108,093003,297.310000000,100 ``` -在[数据类型和序列化](./data-types.md)章节,我们曾介绍Flink所支持的数据结构。对于这个股票价格的业务场景,首先要做的是对该业务进行建模,读者需要设计一个`StockPrice`类,能够表征一次交易数据。这个类至少包含以下字段: +在 [数据类型和序列化](./data-types.md) 章节,我们曾介绍 Flink 所支持的数据结构。对于这个股票价格的业务场景,首先要做的是对该业务进行建模,读者需要设计一个 `StockPrice` 类,能够表征一次交易数据。这个类至少包含以下字段: ```java /* @@ -38,12 +38,12 @@ US2.AAPL,20200108,093003,297.310000000,100 */ ``` -接下来,我们自定义Source,这个自定义的类继承`SourceFunction`,读取数据集中的元素,并将数据写入`DataStream`中。为了模拟不同交易之间的时间间隔,我们使用`Thread.sleep()`方法,等待一定的时间。下面的代码展示了如何自定义Source,读者可以直接拿来借鉴。 +接下来,我们自定义 Source,这个自定义的类继承 `SourceFunction`,读取数据集中的元素,并将数据写入 `DataStream` 中。为了模拟不同交易之间的时间间隔,我们使用 `Thread.sleep()` 方法,等待一定的时间。下面的代码展示了如何自定义 Source,读者可以直接拿来借鉴。 ```java public class StockSource implements SourceFunction { - // Source是否正在运行 + // Source 是否正在运行 private boolean isRunning = true; // 数据集文件名 private String path; @@ -54,11 +54,11 @@ public class StockSource implements SourceFunction { } // 读取数据集中的元素,每隔时间发送一次股票数据 - // 使用SourceContext.collect(T element)发送数据 + // 使用 SourceContext.collect(T element) 发送数据 @Override public void run(SourceContext sourceContext) throws Exception { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss"); - // 从项目的resources目录获取输入 + // 从项目的 resources 目录获取输入 streamSource = this.getClass().getClassLoader().getResourceAsStream(path); BufferedReader br = new BufferedReader(new InputStreamReader(streamSource)); String line; @@ -98,27 +98,27 @@ public class StockSource implements SourceFunction { } ``` -对于我们自定义的这个Source,我们可以使用下面的时间语义: +对于我们自定义的这个 Source,我们可以使用下面的时间语义: ```java env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime) ``` -接下来,基于DataStream API,按照股票代号分组,对股票数据流进行分析和处理。 +接下来,基于 DataStream API,按照股票代号分组,对股票数据流进行分析和处理。 ## 实验要求 完成数据结构定义和数据流处理部分的代码编写。其中数据流分析处理部分需要完成: -* 程序1:价格最大值 +* 程序 1:价格最大值 实时计算某支股票的价格最大值。 -* 程序2:汇率转换 +* 程序 2:汇率转换 -数据中股票价格以美元结算,假设美元和人民币的汇率为7,使用`map`进行汇率转换,折算成人民币。 +数据中股票价格以美元结算,假设美元和人民币的汇率为 7,使用 `map` 进行汇率转换,折算成人民币。 -* 程序3:大额交易过滤 +* 程序 3:大额交易过滤 数据集中有交易量字段,给定某个阈值,过滤出交易量大于该阈值的,生成一个大额交易数据流。 diff --git a/doc/ch-datastream-api/img/filter.png b/doc/ch-datastream-api/img/filter.png deleted file mode 100644 index ea2c53ac91afb8d655706a826675a137739a0463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28780 zcmY&=1z1yI+b|e(cO#=k8pePD>Oe{aL8YY`NH@p?l>|A3XD(-Z=M3vR^Zv^YNQ!-D8R0W86eY-uXt-Qq(5&`vXtyCyLvXR-*y! zB%2jh%wD5Oyk*312Nzr$U(t%aNOp*76Kt?yvLw<=LH<-vYVWTLjv`Tczc}ZM$rR_b zU_0DY0ErFFiS~ZuIEX>W8#s$`daZlA^~%ZSAW&Q9&38b+<=V;UoM}b=P!YH+eWJ=! zUU@&lz{u?p8x(pxM>|X47hS2?r$lqr*2Z# zzaZ)cAdg^&^Se0sH-&upKogIzq2T=1hR0H8*pGr5))&K!1g=5i%B;KI4-_J^k|FAL z?X=0w0$|}hk0~1IHnq{|)ISJNEJ=P?e)Z5L;9|Ey$V#v(k@?Xzya0;&i}kWxSmbyG zK9}p)>y_Oipym||>*j9gXN&8r*1o0!CqWU9eI_YIjwRkMU+W&QI2hV@Obw(FGjRw>mOXNDi8JRGsBd(7fE%<06!@~ORC-IHH4?sWu-zNba8s6Lb$dfCQHLihMw#D&C z9DPxBn7T<-&vT6*O~oTVxn8fKbDPE$b`2>^J&GXr!9Af@#aXiy|9*pxW9_=hjQn#2 zN$?s{S2yTE)n$3^BfH_qhnC6wS4#*}4qCoLU{|2$NOZmQoiNG`U0UY%itsCRc>h3| z^}+lr;m8t9#L6SBYhpN_CIk*<+f_Y(eordkntvqW)N3djSxBa!F9bAk|9Ue+6je?4 zKS!|ssk+*Afx_$Ugt1hJqzO1`n_Tfe^WVFoimIfaBA7GyQ<(p~`G||)5ccjSP4(E5 z7unapiG9v*Qm0vV)7|B_5QPJ$O=I;`3~s^NyAa%GI<31OLe(wkzEzS;eE;1(zC;gyo;YX@*#RLjwSat zYGL?&2c?FAgs6LYS-FTJLHx)2uZKMySYT0H@N>@Tv2VX~Qmyi@ckW0nmB%-8I4`ih zBUdeO>;~MqNNXj?f~9S>ck$(5o(6T1+v5n*@$e^5^@QO&c(R%0&FjRRuKCxjKy)pJ z8NYHjEgSx-;qq2%b|Hv*$mUR;Yv{5Rd-jn|<5Oli%&)`eo@?eo&aZqJ>^4os$iEjq z4p}_0Ie>fm-eY=ZLy@y|43;F5e*ZT8sk50#736)p;CNV+bO-23(hCK;R9gX>ezj{= z-nku0=gTtE;r+>rmE}_vmY~}>0{Q{+7vU@dvG@~8N@m4WHO0tGK&6P!8sYHWGTXL3 zM@8gXwvOHn3dPE~bu}x)zQku~pZX4&<%CK+%61Y7_&FbOQ?pF+exfnUW|aP;)H^be z26bBB#T7qLd+rst(Ko@|G39dcKikWOc=!{+kdCxxSu33u-gBTupQp) zU3R1M@C>hzry?Tpd2+Hs4Hg7cGP&R%2(sR1ayhbjbsE`6EMJH1)z-E5x{M=9kjr5d zJqrs9!+Cv#v<9&Dy7rr(FQi$Lia~n*n^PYiBkPFxEUo_W>V72AoDik$W(62a{)Z?Q z8cYoqb*y|~ueCia>z2l~mbsf2V)tSi=Q&w;^xwKZicR*F1uanJdOw$|)xUjz|7S{N zild9i&`rL!pCi9rTL!<+C3SW(n<@k{(>1x$Re3ao4!c#JYf8aAmD37#w;6u!9G9Fw zXbVUtqOD+wUnA^k+G#y6i_Z>}jDI|-v7Jo6x^RB|oRtM{SYv>tt(z9qX{ZBoSn+Q^?x+rk6VI%~ zZ4Qe{e&T#k5Bs&JXaAOrGDNZliUKD=nD4$PfBmvoQj?_FS+14A&eFKl+(!GLDMYEG+Okx`VTxXDIpUuP2ADN(0yN2??ZVW%@$TKfaEg~mwPTDfjo(C2HD-bMex zp31ZPDN^S2ez-5xGUqNG#{u+o?m_?0?}P34W|bk2Q<^^Wbqp`2rL2X;eg0JU@sqi} z{-1V1KzxZqNMlyXJToe7TplCwxMk8Vpf3{Ts1#38E@kbbA1A%#k;)NJ?uiReI&K3+ z{2b+Qs?EcmGRQ~S{F@aj&b9@Bd+p-=uud}g;-~aNkWh-i@9etQgt0>;sL}Ec0mY0U zyO8PJ{&ZeFIR0%KvKl~QmHsh5Na^htJ8JU4zzw19BH!qg8o!LUmHQ>)HG< z6dZuxwGymOOwJ4T1bnRgkHs`CfQ z3rKkFYfDZJ$#i`jes@SEPqNF$?4f2jg|u2A9MZ;*ByN3eZ*x%} zxfFp3;Zu#!3s6ersktcDe-U$m1YD?o130!0C7=9YO;QSp8OHQ$2CFs@@sW_Nq_4(?Ywq*U!fA zhR7;Dy7AC&`)S&&mL;A3?Q1tF9|vcRENl+jqB?ZHhYhTO z`m7Z4ou9;P1i~=x!|W91-0hGB<90u*RNhJb|#x5Zc_?Zxtw+jST z5W?Pl&8`2;j*bhfYf0>R`Q55wvme}#Gw<kzYinEikustJ)fwd@_3U=p+6VVLn~A!`hpOc!lj zbN>Eq7`oH&DP#rjT5jvL9bP?~{1^_y4-9N?M+a~je$gyGtL{t0PFByBOk_CN4Tz)d zwLd_^y77uC)kCxRn}Nu5XL8gB^t}KRzVb+H!N!mYV7I`cR-Q_Hg1{&F^9)$jJ+D3u zAHQ(ai1QoAcUV$?7ByXche za(JSK%UuQq=6++$%5_0r9FCt({>tyb1?AO$EunV(cx~TEAY+h)FgjzL>^Pp5ZT$w8 zvaRrZa0nm8$3Trxp*d6gO7+ZYLTsdSB-3C!Hbe%0nMcATy|C+}VIlWa#TZC5Ua@HJJ-aY?2H_CR z4e9_XXMfBcw-2?C&gur|`DEY1PcnNoTwPwK;u?A5sgim9;iv1}~Kg z&EOtWBh4&&*RJr&Atq6W`FqzX#qP5N7OOvjjC!zWn7N`g6om=8JJS_#m-}`6WP6-B za?p>kXA~Vw;?ltK!?{^Il3LrcH+w$Le3bShDOmELUe?8LqU=!!QE%pt4{Q7dWg>ZD ziSX#6l<{z!YfHq&{LDza0>>8!*9?rb&|x6bj3y$M9}Fz4W}!0{7VtD#2-HQ++(j*9 zIf#AGtOk-*DLGS5;3Fnc^ds*PF_MCevST^?uZgM>HAwCnqR`XvA}x?&DHG(ew@oUf zR3e|+9tDX(XkbEqM;wK=H^xY%v|uJLcz$FI?@jgT1$8{e0{vAP9*QXwL? zBalh=RfiQbllP|;eSbz;(}Co}`%64;RA98yJCB!EZ_wqWY-Rm~toKL+vxnW4eoL(B zeDRrIz!6vP%)f}^9#2J$l_Y2y#IC-YDBRJ zZxbE!w~v2NZ*Gkn1hUjXKk?c*I_7W1rIvk_n}pS5y_p(N`3^x%kILM3zsr5aW%Fxp zhb&K;X3aDOe`UfHbNf#*5 zbQnxA8?2lyQ4hX(h2lD?>{ATkp^aMWT@l(Z@81|H8MntFJ9x+%MDH+Iqd_w2uY?~t zeuL6T@zE8zeGx7~qAWdqi3bvoKf8!{mekeyXD!K$alQW4(+Kq#PDlEPMRbQ zONA>qhSX<&9t?u$uh}P%5A#uz+(eImBe%B1y?0O?75$6Qk+ge+PMH{pD5vhM`{aX^ zrm17d%9W^Y2Gw^q)=55V;Q&Qm<@WK(Kk_@?_~kT*|E!CQEPK>L?J%?c#Afitc9pfb zdy#gg?_9$~#^9T(LDBs1-rh-$9=xq(C90FRLaq3FT;>{zt{peKo6yys%igY4fb*Or&aL-@TJ= zZAHZw_d_k@I|Kc^9iBFIQ4w`!6i(CId-m2CGCK}h|JFu(zh%PCYT1FsKS~;fW+kH*~c$>+g2SiMJ&hR4RoURO&zD7aFDqJu$N}Gs)7qJAsf> zas*v*ln@FF;sXC&D$0e0C#oZYJzQb2>)PzH2{bdXuTw*im!^b9DWoWJ?CRGk#pQ}C zOnpQuWzrHb!$r&WO*ho*i)z31&D9MKDaU%_put=R2veqZhHr^C!mef{6GayfuO7)g z3JA0!=NLZoJ3o_`r>uWM$2e|AA;;Q4Z!-wqyr_7D+fVID&QoO_NnUL&o<#piU?{4} zT6W3a+zza;dwM>#wUoG`w|H{)W{&twY^I+r4F32sWF9lx^i8Nx;`j5|Uuf>R_S9`< z1o*|JaqFGvtyM_iUUuXy!%WhM^A#sBoeP>Pd-d_smM|q?|F|T)^9F_Z%{fuziM*)Q zI}FUzfFYXBRHC7i9*6v9-!LuXuMqVjkF=8gZPNPHik$2HQlgdU!k6WexYMT8`5P@` zyydI&d&Fl%IcY9qb_hum6uq!-+0oX?Z3hHJ)1eX9k-_>d4l^w17SbL%>PeTlB}{hc zv;JxjZ+pD_>y&-W@t4oHI@-;V^kGAC5jW@Z!rR+T`J9o6`!yKILNkKJyH?YpaK4wf z-+Uk<1bwq5V;=pht@jNDQoc)bn;EC;NNsMg(K}f7OFYh>%$Vu(!v z)sV975fH1mq~2J(uY{i4-?Lc%dwOK)^Fo3qXMV(w(R(YwVif=Qw25r_7_TMe@Nsjo zG$P4l8P0#BbX%^;N!8+Dbe|Y~^zJA-@=F96Z)Uk_53Lcs=;_67nzDqE%gmyZV{EaK zJKqj|cCa@YvgyA0rn7H{oWZQM?EM+39Oa?CHEiwV>fz2ev9FeVey`PM&}YJJuI8i4 z$4JBt@94vw4L6kDJMJ1IY#Dl(ig!497=&gp zx$ikJH4VkQwc`T2IJ$XlmRIvrb2GlD1<=3uS!ldQaHoyX~6pTW{*E-?9!l zTK&n??B^Gr<;R|L4=LJyeA`{*rCxfkBwHA&%oJXsw7d+BZJE586!?nz;ge%G2?tomMX`jHFobM zyTtvy)1xl(7q1GuX9YLT1SX`BN2p`#S4};!dsg(&(bg5=UBU!JT4`g5%jwF=Z5PCY zHz=hSCP<4X1a8Q`NgwGNTQgnfM>7V^qIJV#rJb@Sq<02r;XX0@_q%`jJkEC8@3sE| zh@W4Xws?1=#IGRJ9jW4R3m0NZFNmOqGuU;4k&!wV-PNcxvQ@^gQkvjsl_> zes1Q6b3}G=oE$y#f55+jTEjnzD}C{W4Ejx#X1{b}#B$1RbU_*yR~}bcNvgW)I2? zDe3Vpt-kn?r($~>6G5+^R}*z5^WpQi#jkmsO^kZ~!Kpf`#<5d0anU-A*>^rqV<%YN4EYo)u;o*$I9J-Ae z=U@M}n$Vl?<=+%MU0S64cl-eM)()_22s^%fo3iju=0&~V0~QmJdAE2Z=Ma(HnxRwk*G?@j>_g877WTKzI1S_YgRt#sCO##b-< zAgoXPWb(_OpZCA~dQ&RkdGZE<*2JA_S~4fC74~WjCEum@#?NU8**eKWWcc@;3N1eN zYq(l6#k?Ek}7ddC}e#s)-%h6n?(x@_VX>vwNn;k$MCzuPG9w zhb1e%k5V=6IX}Kz+rJGcY0ix%pI)WQkIl1FU9IGZ`D(=c{DgmXvn?Kqoa`n#mBoC0rbm=NEuK}#| zzx{V>#p;aB%cp!5)-+^?7_CNN=ez8h{1)?#FB<&XnXlL1YU|bq_fd%!BJ()tNntg5 z7RGYh*&+Ms3cHJQ_+jckkUr5hQa4cW9^YsQkVKJrwY&KoVn1Kou_OIEupO)O(H^Vr zf}8-mv)+xveUqK3=}~X#ypC z!o@qvN5|@b!6B`-4&?E*z(#cD8FLaA^fxP*_+5FKuK62!I*9t8^7N&0=UgTavzP2n z&pWKMKsn2iLVsCLvHycDHpctDtyc6Jj$zY7OU#~u1pm{I8i^EOQM9EBb=HwoMY~1z zf@#s-Q?e;^b5n35{RP?3mhdIB2iubOYfx)+wds(|;0~+F=J~Oho!7a%{7x;-IE~4H ze;$2~#u>pj>4f)Q&Qf>+IJTh5 z+Rm*FHn+f`(E!m)ySSXHl3pZb`;nog7H=N;NP(&~^j3&=tK>}g-%a711?IPD@cLhQ z%KfUbd^q#4b4v_KwGwIQD1kgs{qzEPWoJ zM)PdjX(@J|J&Qkco9BmqN?Yd;S)=EnNP?MJ9?^r(her>l&sAn+WqS9%7&ld9|E-!hpFY%bxu`^lO{EBH zbr*EzbN)`erSKgPr5*jklSW}fdLX3dMx88Bmv79$(Zy>G3JP{tGRp$Pv<^YWtEubm-BS7gpD-gNSga$n`F`Yu1_+6x6S=s@$NADE<5a zt8YGvY!jI9Q+m1Dx{EkNoWB!kF?-;RQhEpKkg?SrcDLC}8(P?-i%D2~pk6 z3v1Vs084nUXW03@_MhSz#G9+18<_>d!Cpj4Xp?j&u zAEjIa@tfK?XzjoFS+dVp*+!Z)Y@c^)rg->gOI>*fDyTepcfU<=#iaiMY1%N(@4MV5 zrO?Rv(wzBTsq9w3ku7{n;N4u^HAE9IhmJnjgW*R)QRNRt_5uYI-!|Ht8tt``k!F`E zU@oXQl!u->o7w1Oo~&6%<3lk~PZS=@PD0(2y}Z9_+y5uIxwGrThoQ>&jK7tvyVRJr zl?W<{mRs6FfQllx|s?QXp2VJe0GxalU~BxblmQ+B1H>Dyai z`qtK?UNLJW`tHvFp(xmkArQopeB5!qN4uT~iD|Wdgi75aLmh-L|oy#qLX9 z7j+t$W8}4NB;k6^mKO5v31%c+YyPhrY$m6YKC}KSK1Zh~$Nq?qXO{pqn%+f{%F;)yx7^3hdn_l}z)_vp3x zXyvbwIoz{3z;4X1weB{Z`JTTMl`l1I!h#-%PiJhb>Q)3{ye|Y3far*wN?j=~|DbSzd3x|qGxhpZ%B!dEw3%<~XRVcmH^^rXm z-9aP+z~8Jl*<1sMkU-w9vR0yekG~2WlkZJA*`BUbFuRX5v5^sGtjl%koqL_XlV~Yi zA{p`(qPj;qw`^)t)5Fm*!#A)mHH0~o_HZEDpjdi7F2Z?8kK}yG{zs~5Fp_$yR-8sO7Z-50N*S8|NGv4tG}(um-ALLT-aBGNwHWPovh`;zRw(;>~BFa1B0Zk>0>G1(5jK-;`6pUYDrNoAK6mc0^8 zwEtV;?o?)^&{E2Q65_U!-|lqFWlmn7?shlo4AE-b`aYWc-C?$H>c`8k>z8z9qq(ZV zcWE=+3!%Qzneh6|Tv*_r%u?}UNy9C-t#j^2Z%O9H?UjZwheomM_0dB0n?v^XR&?dw%s%n-(H(CfE7*0naqY5ri5*46Xzu7=1We#p)-KtT z0X3UvShDWs26R%PByy1B=LHrp^{?_I4bzw6GcYcW=3F8Dky*O5($^u^eUBXHM(@IR z{Z0AJ-`5anPC(>+3O}-bxwuC!AKO}DvfV@9b%5r;PK9nqs#OLgNfzl0(`= zg1(>)FPQLjOb#tdI`JjC(;=G^jICoisNZ_s64*^wN|I4rza>n&={CZi7}#zGS0j&b zlai!rY(0&f&ndloy`8$aYx0YpKc>3+oAck0Z^I^b-&|^4{uKIdG9m1}M2z+oa&0yM zswybwoV$|t_u4v4%|zTGXwvLq7Us`V-+bhySbn6P(%LM?|nh+WrpQ9tFoyuFP?Owsz)UZx1+U)aC41ML?)?WfZ`&1WF{HO7KO%!kIxL$NFxyKV9=HDbPn5tu9m~^#<9N|e6ei#_F_R59AZ%U zb7~KId3Leu@r(c^ivLw*z1n8IY4aM{_|MGGlVhEO1tfz)#U`vz);b zKYq)g2@XLLWQX>Aq1vHJ2wj>!ZEba`M3M*3mYt!~8<( z_3rHhyN3W$Iq99T9fPj=PWo+VEq@$5GSw#;8)inG-^S`$P^F-r$h#WRP4@hNUeA%< zY({*7M8h*QdkcH2PBFkNoBB@?QI@qvTT6U3e2rEA-iXB=ExR6x1kIDA9Tk* zbq>RSV*LCaVthKQ%|bNZ$$p_`KCS%#i!6c**Q=6wtN4^{gxp-;-VG8|cqE;<HcdzxR01fIQliNA}uY0~doFqgzC z|6O>ulIE@M5!+mCp6Kc7b?Fi?QxOk$UiqF})Er6VU-++)nY~P3+R6*e4TQ0Vl5yNo zbMK&P=!F(+e$orU`Z#|7vQ;;c5j(#n>~|<(gYLi5VxX#Q15}j_JLzky$akpE@Nh(1 z61?_=UM`Z^aRtcmLNOkGv9Wt=61Yc1Eqg>>s>E~usn3{@2BUu-{5}7=BOMXQM$Yjv zOIzN|!e%u0Nidj}C4+&5gi_4%TlA{l546TX`@VOOS3*k_6{*zayvf-H)Dt~=jehrw zJ)eB**F~h^H19D%YX`42%RZCIAUifPMNaPw2%Nz31arQAv@{XAGoyexE-WIkj)2+k zjimV)A%!#yXjZifG*ZdvYIvs~eRECytFrThgB&m;4tw8czfRFn2LW;NzBzA8^p(Ed z>n93D&pD9h{2DnpmO2CHU^G0X^KrZQog-7d@l86|cc%Vtu;zDsg*7k39C=UHo)q*Y z8kR+-lreU)LS^lYCkzY^$gW30FL)ZWaU8tyg9XwB$cE0lOUX_qP^DK|26SdtwMg*a zUoH!`UB~;>!RY6Qf6uFZ5_z+~|6)Mqh5zWzeV9!5oCT<0hzlSbDwwv>s7=D=u^<2N6Xr;FUbYlDSwVGslZtEYO`t~7V>WlXt>giRLyOd!GIyFrM z6hmsG{-)NUs133^B6O!-Ru6puRdDqfX*@^?3%m7_7zqZOQiIgOM23PW3`}Fk-#6vb zr{*}8o0XYvYU9IF#SfHE)a|tw`}X=Qc8RO3sVUR1hn1l$84{3>O38E~LUbVnqUdE6 zYBPxi1N*0IUOLiJvbSW@E?6oKZEmhtKA3iMPq-oZs^s`LlP|ROz8#n{{@Ydm*|IJ7 zN%YN#`!m$f)*yN;aXgyYW5av*#`)du`?!b%$vh z@pqrQCdrwoJ0nGut3)|bn}ejG0Su~WOH~SPF~|r9EQmMI+QD@6gY<~8d6xJecicdZ zcGhu8&3mBKhgZ;Sw3Z21{O)8A;bKb%htQ7j{f<}YHfqU2fUe@_s- z;n1X!&BZZD8QGVAHHlQ;&cd|r^0=2aoHT@nSy9!@?Dz18hv{OhnkpUyE#aX%_#-JOK6p%t@3xdX5#Wvjb*UV0YZ%yD3=2$m6Nha>x^ zrpl4)ipv>SBLcH34w|L-VTs1?L!|ogp6k91R0^cJt@$l*Q1mo&(e%ek5*aNK7vbUI z_chmt$>M4-q&n{;N9}q)CrBy=n0e@n9(%uf46PrY{lbB=m_z$~dHjnuLYAdWlMz31 z?#wxu3Ewh|x+7O3olZkD){?nz=baj_q9x%q+wO#t2~NQ2#@`8)Qm>aUMO1|_S?S8w z?q#eLn&2a4JV;E-L?=shJ)Fbh%px-zo`m&L6`cl!^^scI)cfHutmlI5_9n64hNa1k zDp4Gcu@cY48A!;mGt!NRKg7GH7PxEn1637M9v-p*=Q{ch?j^br_|!OMYevgy1A`O8 z1roni?c*^*KI`#9-FREBviKrgb^Yo(ja-poM%+M4KVFpVSm%uI(r-XF=E&`gQ@(Z` z_hp>Ygt*RZ_kn$uXbz`&HajQyIqIbsb5k4MqGS+>s(++SM|O zeB14eg}=pSS>Q6w|JK>zS#mK-p+F8R&@JqspB|V?SS9KnPL)yNKE#7gX9kaDFVe2% z@sqvQV`z}DX`q{79BJyJ^sOpm%wqQpqu?CmvAu0hsV{bOX#HGDNiqAaSvINP`R^o2 zoC~u{R5teLql8cP&4tUJNEqta32LZ&hL1oDO`Pz^BM3P+M+(&9$)3L_4pNEd&_r}7 z5Yin(f3{E9?>0TQ&Yh6BAFtU6_Vx_hdy)X#sp)4d%>40w)Wir*-NB)jAYqqBz)um` zm%#Wj9oQa9_TQJs^w3y8TK1(v2+o2(gU?WH)GySAjC+xeS&j^u!+kEPkBp_e&x15?ucyZ|ubm_Kiz~arbZsMrw?}UX(&`8WI zi58r`^J{#aT|8!3Qq#`mk=>$}y^8an*Zad=27mVG>^V@JAdp{fhIxE|z=`)^>78*J zFQB_DxgdMYivwM_z3}VoGQb357jPM8!bviAY%WhsLqC_`9jnk?YC*Z=zhajy&E(1N z)<(G@Jxvhoo$R5@vLTI;x0=8(Qf_Xa-QX0tpNgv7dOd*N_@c1n#RaN>_7rg=RoZBe z@A^4R1?q7;2eru_wQh^b_w;&aDWE3ybdMR>IlE16wnUp?Ef7)j%Z5Hu3PV_WM6k&M z@iFO#rbv?oR+yn6sy}y#!>LRiUNV&7;E8{mPSYy4S}2v=Ic@JKhp+qG~_#17f8rd zTkbPEht29;ocl;1MFFe))+;s@2jR_0WX-pEEPE!nuo*QNJ8v4Vb>@cPeJFpq{9UpcdHRGoZTA` z(w*X#K6I6h%qYa^0u}GifTZ-w{MlAFxhrnWp)~guh%nK8tu3h?W2KiT9dP%f&q-~x zwuj%ylz!Txg!aO8P%LFi5e~auMpg`FXfE%r@IvYxM*flPgh&dXk&-Zn-_AX_vTiBv zUD7VeCXlYa;sU+pN5s1*&S3L+TIY*KAI)t?#f$w|q4Ovu@NX@zeMFIqqWw^`!uMJ1 z0Ii+F2m4A51Xq^BRD&j^_Kc1b=S499M(N7()Zt{+B9OqJHH6dV)YbXXgK?` z0e9dkTS+Zb!lQs7{_hZq-_Zhdo}p%u&wZr_=X|U_fndMwKcs`EY$V zRdcEOl(e$o#K6nAO# z^1p-{nDZSR22&DdI5G3*;2gzzx5oMl9JY2FRy23PdDzYikE9n4%L9DZ8~(Vo#}&v` zgASv{7c4>{!HiPQp%$AutasmvNI*Dct0X;wu=QK3Z|p_JirgM$-*fq(H#vE3yftKF zY7{^DVVeXQ7bSCvuSZE(@%{oj^0>TDtxgIME<>(aR)x_Jc4u4^!YTJgC&v<9MRM+-i4=!0Lm52NMG70UyJJnRh^H1VS- zWM{J~{X@dOG%Q>|fk;)KaEtu}${=;;^0ZOc6GL9DFP`9#96N z?TeRenapuHZ*KeJ1S8i{> zJ)Y9tFI~bv@@kvMs6$Q8{ro77@a>HkXg_?>$wyE3eC)>kMrcJz)*~5eXJHeY^;~{_ zZ^$!vjlicN``3njL|(n*-&qPn#mSYZn!+ga5$^_;9kFBeB5u0)=Q~#@PJMt=qg3A5 z)>Qm0yk+Iq&dbrg<5s+d-jLU)7p*u)vUx_aZ#Yfr7VN&dJbEK?(>{QjNU=BMvG}ub zp#9V%)Vr?Z>dgV zSn8j?$1Z^&-y~CKmaa+bNCJJLb)Og^7YV9}_P7Nh{UJ#1B7cMT-6sjqHAF}a5CqgU z<=nZv5(L6J-`OP#+-BV4r_-Zw@7mV<9_Ovaxh2D8<5;;~^e#;?=_h|uElkiPFh@dX zOD0`PL6*q7nJ(*DRNgBuh=RJM32sv1QZ4g0&>b*l(0q&e8WvObB%5@oX!w0NER=$b z;~|#{wM8_awK=agWqta)i#?TGJ+6h_v+0V^GVQsgKjKD9v3tUAa~7FHWB&Z4x!eqX z72yjmc3nQ1T@0ALLQB~pp+dpg2^Ixqs~Dki;gco$@X%XclWemXw`Dmc`Vg^DOP(_Z zf_M&fBv>#b07d{yx|Q-OOv&=g`~OgRR)Jqu;fK7W&bfUdGVjcfbvx=xQ`Vs=0(uX! zEI@;u1C~IlZK>*u3Cr!2KP~yQJm<+|3!ZZSwQOM-iiv1Uf-rqb@%xTL3F11h|05yu1D#89knt$QY&D~t$u|dC>%eMrSAiXm@Cmi9}Oou?R!FG7_xP36t zu23{8y+tQU_6;>X)oD$}UD1~O z%O4ZlIyxs5sF*P03v90P#Xz4ZFomz}S#51ssZbz^luWDKZ|T4#$AA8<8OuCguWr3O z$)Nf@`>E`+$(4M&#tIPVB0snj1cJ4MlyY~Ppyzj5HGXASc=GwldKu@u;ZW!>VQ?Fh zk?w#5Rx&-|AIY-FGd}PJ^4KB=^QJa+3t2rqt`Nr)I>9H9`WgX%auYljEV>Xlq4INv z3lesh8e@g}wM0qy((ret!xMsXd9WJ2Pg^m(Mymg_Mc`K?EMAJ=7wq<=Oxk7C3KTq>Lk#kfryX7yXc2lH^^cd=qbsXMN2j|ib-PvR43MJ zVOUxJ)92w&@k3^;(2S0CS!0yrPkS9ShgVOMVOZEK*HzA{`=yH#{;bT_Ma|QG>{lLI z|CTZ^+EPUo4T5KX%^8I%nDLw#0kgjZft?&7GkMivDZa<3s% zqi8_`81tBZFqAvAsP*{Z6OhvX3=-_XL}{cNO7I}MF<}$ZnV)0y6)h#NvPq*{9%Z1; z(t$(w{E3{Q4YXR7uD^12Gwgd%bV_^f^t{8?*%4G$r}n3F5y{J`c2lGMwh$rsx+X(< zSf9q#)VXVL$8v~c6`UnjPOL+QA7$i%JP&tkB%?(^%hR<|cAkY&XPkGtn2qbR2btp& zRCcQC(9=hReF6VlImC{pnBz8f@Qi zlwg{``hh@_Z{>GFu_ncA5yCm3Bg+SrUq}mqw<&R0SW3(b?mWx}6^f+cI=c0&PLA74 z@4~)L-OZ%nl)+5a@ZRz&hyk>!H*hl3l$aP6LT?ktQBpz;0s;P=68E?EqI@VdeT}hV zf*`15!S*R8=wQ-93W)f|-n_D?=@U_uBVLiwIcWR57tra)_GDUIcb0J`!=Y0r;m1tsChqB2*{ZqDVwf)?X0%;QA(U@M9DGDUSzlZ=d?k>u zXd=OZ_jT_d#&d<&XK(zKYEM&+x}o$PNZ&OgmiuC)J)^~6WdkkP2%zl$;Y+3L-#@)H zs#Kg01BISX>je_5o0bnbnD@8*27y}g2!VgqV8)V>Ns6)8Sq^=-@gvi%o0hG-v2Cqj zl1pMNW5avBLtY#h5&rGyCR))2Rc3q-3+H5WQ;UxgpztDeLt<&el@xh^67DUvs7Za6rhsK}#z927RoV0?Go^$~Ob&j~5bpOvzii%Ivw!;$*# z(wHDBk2bT^+1b(@%Sw~xS&OHON$ZnBUC1P3IbM=7%^@8n5|^4Ht;_}o<QFbyiY&~2Nr#IiHca!#P{Yk2+KTNO(XCZLQ}l`7c*t;^p?lbWn2zvr8fo)L+dD1FNQZ_zfLtVyEBY5wb3o+YUBXp zTOhR*U7z$Q#{&>Z{I@(mNa_(8e7LlB)u7Hgo_C8dd8li}(`C1$d6@+4ae!fKuN$|| zC;U3qVF66e0>glneS09`vPUFkE+;60c&n^bZ)RlIGu3+_u|%MrwjA>R>U#5dD8KiA zoEEZ8#+GGlV;8byLR5@>7qVyHGBk`eqQV&aT4d}BDY7M7$-eJmEJ;ju$`Z=@Qxp^bIh> z>ZJhB`872JqPA1cgD;jIx7*CvBY4qy*Sa;Ft3jp;H92n?y&}9?TMaN;3Pe2(w-2Wl zDwiT`q_U085a{`O*&zrBmfp=DL`vRFb^2ruK7~v5SP4A?arCpMVsm>R4@4~8XarzH zamHlzf0~uhO=v2XwTh~y>f4ki0dY;c0Gs1>Vhdb1;`gjo3}Exh|JN^C`N?B1PhsmN zkwAs(tT9=1;;8lLDw%QhvVpDHd{D#@U$F2p`{ATA{*8Zq>Nj}xx+@4?IDAMSL~Sox zq?6>Y2PI>B7p5)+RRK%T@09o`L+qg&V7@kyDK0Y#Kz@srU4xUEda9}t+TfCVSQ(iY zMbWfg!Px42E4zdb@>bQ6bw8&hr-og^TCIP{QBB|)Z+$GmX!~tct|Q53(Yo#%w6!># z;!V(B3o3~CJ|P>biwtkDN8%?8!)0O>BLVoNi*YH&7)8$&fex<*v>eT9#Ga;mtMzsW zpv?S_l*a!XrjWH`vE@DQUV{)-eI$7WRT9@PRxFZ)?r=apAFITBL=fPsQ`UuT(4X~h zA1^v7>a08}n~HHvwBcJ`jYr8X`gR70!vEtbB|pKG>`>$uYQ`#jV5_{o7L#5kr8D8f zCsWsz)|n$S_@bE5n%|Lnu``?dLD_`I0OGTlLu%aeb65f?eTx z9*GlMEEVA zE{p^+p~)36=vrH{Dhc#|`nB3>CQwonS`14;b3HGL`#?I(n&Q9yM0k9zRYH7j=%75B zx#`=v|DyXY+LS9?ExNi=rVcFNww^R-deqWS4C@gJq$*`+*oStb0=+gS#sKHn2t)yf zKoK+HEyLW(aS1)&iYW|uqQWk)z|0)Z6qg^(ENj_1=g9r|4+97awAEUcH#|Y`EjW6M zyO1NhvS_z5ny0jQILi|=ZPLY+Eod-WeW@G~;8DBZ9?IO->4|V~Ga~wKY-jR<1U(SZ z0e7=600jP6hU_=V*Eb&Yxfo>+Pm3AYuOu@L3f8*BKKeXL?6J?3J--M5I^5wN)z5*YANcQA`~tVdjMyOqj}crF{twf0H=U>-SXMjeo~za z3+Vte5tw2rpl@|kOVv7sJE*AFqJJoIrB3DL4nq+ zP&$M>>R|7vPhXG5bvu({2s1rg#$0hZZt8Q;q1(Z;4?7WsZA|~+8FDISC3Ngx$wBxJwUxvqg)`M+q_u3fVQ!%B3t58?75R$b zjU)j4P<|iRSCQu(&RlnY-EM8-FEC$W^3Kias-8GUTp~Sg`Ns(8*-l~A772@mK|#z ziteVCjL;hSa*kGy-B;<)mo|+kO=CXQ_Z0O?+bc{#+TmBcS`Ubtv3mNe4wrl7 zPzljhdOpJQ3gdxadge8|lUnKRv(IU%JoqFCuey*KN1yzh-aFDj#vd^$uI*rW9wk^~ zx!zNaV7hA{5?`j0P`xSIyV9}nce_Vw=?UU;ktudfDqLUBS zWENB`-YUNTzQHn0C^;U*Icn0cY0S)x)Kh76b{jACGuPo^sW42FeYkPMiPRp~Dq1_0 z);+}+U4j|?ZcS8VNLg_U{F? z=UjEU*&dW!R@wD};F#!+AwuW{J0Mn;_k`dJj3oPm(~1;~A93GsThxutVi9pT3GKu# z#T6P8MH*dV!5UmE-hF_=0`4m^+8QVC_^_*i{$dW_8%;6z0taCACqIYs%DPog&vjGB{kJC1%W zfDB=>LZAJ}Hx1qV1guED{bEsEUHLJA64%$%Td_=@mvGk?9{JKaZ+FQ)nSYR7zLgr7 z#VwL9!PPe2p%%MsYy9-MA*#FbhFk;E?}0E@@hjMtTBI?Lw$kkQpAoE z3aEk727(l~*jS_%O#b1OCSAv=kXaX;#l95iyLOK7?xe~43~W!sQXL*I$g~o>f6UvV z4L@Z9kub0=I?QR)sC;_6efLD;Rtp!IZ8yd-p?T;R`Nh+fD$36nK#ND*H`54N;86kr zc#%?gP>x-iN%%5*{nLEiWTx#mL((Vb=-9sgu-%5<8sLjjt?$De3pGVu(MSl+zD)){ zuB>$Z`*@Bl<+$q$V`y-~~254;h8+B1X~aJ4Sa`HU8YQF3^}#Q z(YN@a>=fQNY}iP-L!%o-?R)Mwa+eNw`R8SSKr zB-FU{T|0tb?4|r$e3E#2otxFV@izJK)l;Xi)5CT7%qpCB%E520q2=%0XVgvMVIMXg zTBwE?q;kN?4`hzRUMNLe{pyl(`-2;|??8b=@y8Tx&zRRL{Phc0} z<=*C5Mg>3|i_8O{2mg; zx3!H!TAJTU4QDfLC9`#N$d%3tsmfh?QHvw>@PY@;?U~w zg_P|#SU>!XthkS>6!)K$+tWV}!UQ+zLVc%@^$Z9NK;|ob`(}ztpusrT8JEP`KD(5s zJi~9l5MDTwGaxV6m%^?1wpcrPqUxIY9pA(JQ;o3TR_ObkZ(ww|`?%iyuTk>-<)9m6 zVZj13@7YiazBV64q98{y)Nr1krHt5}xM#6xZz*1$7QCC0iBnHgql5r=KE#{BWa+@+$lW;OuMWJ%)yHJ_#F$ zdZCnd6-1%EVcmyOg)j5vw0!A(U71zQUny!BTpJ85z4Mfw#i}WG8Q?93HbGNYin;zo zkpZ7juMd17`N79PwkK!n5%KiT`VDz*;@*9_8|jyWwPc(TW4xdy%@JW86v(rpwxYTU3Z&?1szVNo$2B2Y- zHMLG>l$CwDt4b;J5%TAyX~*(z69v9=Hc~j~zC(P{67GucY2VEBc;UPJ+iI%inOisD zPY-gpUC9nzkHgZH(sW$AQ-qYGgs<)RBeeRNRWRYtaFF zfTJ+|hx~_vWY;{RM4ySq z#e>XN?baHTEB&)PsuBw!u|JQD6aUeY*$$tHb)Z(A!yMrZXi`gdsbQDCa2y}>arM5I z0ih+mTl~6fhM;0b$L8HksX{!ANm-7-lzt-qzRv7l*c{$R_rv$N&9alBp^w2_&1%}e zM#}!Lu^;%qL*#+C!zwoN#hh~FEs&@mTwlBw!d(O0`d7@L0iOG_`Lc^{^%{^mILN*NX z^-~!3G461rY5t-1w=FZ~Gu1H0L?gu60kHFev*n=q6JkbT<1vEl=KnR<{`T00EHwVi zeG2)q6dBIPwXKl5fC-5i+BphI=#mLm6%$kqG!#OWjAR&@!UPcJnUfjbHP*T~?ya!v z?!h~@D+fZS_iK+5L$uC@a$%Ug_XkH7$3p*igU*26NHRss{X2qdhD*@gC7=^6I&SE2jPOv2=wMw!t?L9&Uq^^z^SwjvU9+yH<+F#UPG^O`xD;6y z@nnZr_$m)~Ly%{Mw`(^Z>ZqOr8$u^%RSNvABcoVGE+Eip{5m22qWMX!3kyOBq&L3m z;0xoExcZqsx(&GXu?Wh@HR$c$U96|2***BjeWG+~Yyee@=H^yi;C5*H^ZfR=v)!AA z(aKMg+8*w5?=MH6wa0z#g2SszF23rf{(Je*>$J=HvI8w%MqmE*v(=~{Mp#5}O`vy$ z>Xw7bt4sEdWHR|4Eynf?5v%)&<-<0C?zv(M9)~)|=gC5|&ANa8Y|@Sm8~Y_s{yS{z zpwhM22Phh#IyWv8yrq0epqgq*zJM)I9~ zI5vRo>YOZwy*V=)V&VQVQPnH}J-3GrF*1n|+D02)IuB*SB?u>e9M^n)8Gjrs(&x--%-(CmCJMnFc$BjR95eoNJI&F8^c^L6l|@D{;mk&$}o610dx zG!BCocSzrv7T>CzNnAh#1SPDD7yjDKpod5y>eU>k(zmd}J5r}l&g+X*3|u{SWh&zO z^_wa*-6lb^x^4Hk3$y7j1ecB_mDqipwG|6AUFoAaX|clV{L#=Ny+|2RUvG4UX7#{7 z0X2swM~Z8cRLGbBJ-UwHNl|j|s*&2vBnVlYR4K?kT^)7EbtJ)^)#CgRnzSm*?0))F zuT|ohZlbIm^wN>kZ*7H8WBJ5Y7s*GynSRtnT&b^$Dv_jRm3(z%2}&sk${h0uwjs~1 zB>txzP^p|oV#-Bij9YWP<@=FL8NW9+IZXEAH6UM@4<<5^TFyi+e{q_gZ_pFbweKs5 zO6K#q__2_lP4ooe!CC5C{2BYw=sw7Lyd}xAmfyjjUn{p*xbSf*$NUXPLz*C}us{{J z=aDHc>g(Ib2u-HiyA}!exwyt;bCh6#^6{XGorL*>zjViM*}bI%Dp~fVF}m1Wp2L{r zf)TmFfy@eQUawROpWrD0I--GK>DT>w-H^LRTdFQx7smvakh2TFR_6b7k%?SsP^d`UN4 zeT4VU`ep1o@^X}RpmVrLFPxfFTdoF8hRmRK-{D`588_V*PM(j3}Deu(@R2!H6)OcAUxn;67ZWiKq5#@U5tz96}i_W-x9gWj}iB<5t}zB5OI`!|2E9 zc_|fe9qpcUkKYF`)dxd*AZAUUg|#C?`^1|O6i;h(0KS!d{OBjcr!H~q6@?m+QKzUG z#w&Mx}znNayK0Gdf9ZJl4!FmmltQp744xFriJUx^ZB zo;Iljm{jY=x%jFlqQRUb~; z)aB$!`aYP7N_WGqBIQeXR_KCiWhd4VnIKlC{22Y~tPxq&u_1Z9heF75?e1huYA5Hb zjG4A<49_QBsBDq)z6gf&B?*29L}ZG4rTi3XDpnlqFER3}Jrx^~vj2+4%NRJ;2B}np zvr&&O57o%K#P(-kP=@)kzAqdna19Bj{6Hkf0vN3mbrgd@3=^dqqYW)$Ig&=`mAT^> zqjIqH#_xy;>zfy{qwHyr=c4F2r%${(mZvv@Scde(YSqV5Ns^qmlmES=3V|ssdsKZgF@i0%;i@%3Ngo zS!&vuP@(@)z4>D$ZyzW1^gCl!RTh#yu%rBSxdke^{xqCBVC=lo#mgE5P$DB5+oxWC zwKZH;YHSg_psEGs)5v1|(UJ@iVVFH&Qort&$capoElsNgUPx~UeiKZRzoge~F1zJT zi|Mathpj2*b?)X^#qjE7NeY>)4AZniSP(2wvAe2Tsl2)l!*@4VF?{cgiQONj)T8zZ zWjAO&(pD>4#1}}rw;f&5h{dsA7HK%=^1gsz_fOz*8_kcr!CPpL5^u|lnRiA@aTEwn z71jlQTv7*oFldGA%BMD>{7%#0tGl$Z04~dDx$g|7_7_s^UyBa4Fl223Bs&*dRBlj4 zU4k<3OWsKpq?J|~WVRqQ+UNA?ZwBv(# zpbgCegeI$=!Sv;q)JBI6j~V?}A#iUTf6zoUBRnD=8Osht$zazF*HY zJDY1e?(TfrKb{!DDPGy_Ag!D>v?M{Ha5B1}S0dmV%+51G4)fTI*N0{x7&tpI6|iBu zTGV#S^pVUbjkHQv*!Lx=gP>Lsh^+pb;kDacyzLVidh)X>vkSGw_X%W_X)F3cFJv$j zGexbuoRjdz3scUvmSCH0PwI>agn96vUmb*VUlW?^(=>3aar_^LuQ`k%UjbJjN*t6)?!syWI?keBsS&kIpR79a;W7BX(ND1u=g1np) zVf;1}L_)g_fwWTzkq8Pswcc|mJ zmTz^=R}3}0Jy1(O50P7^ydR#go^5=$9cMR|uM#U*>k$j#=>FXr_s$!bZU*}%DK8h-JK+?J3v z;MI7xY!Uu)*_RBN)!3x_$bHfhh`+M{jNBJM0#}c+G1%Oa^B|H4;vQL}FsA#gYgs|m zf(|J9-3U+05^<9{JK;cT39(*ZMNCJ~Ru$4$o8XVW1a-!L^ocE@2DN-*CTXj#9&VF) zCpz`bQ3p9HnTmZOi5Y$bfo9m5rG9{I4CN*g`RnHY_vaS5#8XO?p;~QW%wd9j2gFvK4nFy?F#~zh> zo*;2e6`b$JE}-T++|@c<6sxq?7?8#(o#msFEwRT@6ZzzldkT{#<0vgD=`RBw_YS(m zdpr>jk%dG*dUW~nxm_%Oc-7VW3N?iF11_$6uDQmg zj%_8#r?Y8hT9xXlOL>#%DACt%hFD!R4ZR0sXJir}Z+rlyB1G9(2L6;@Kyf_yFrqrS zdv$*JM@92<4|id58qRZo6%vWZ)k760a>s>)Blx2w(11J?4cPMKs6d>!m`YvImlh+htUp>8w_mfj}DiQp8)z#?CZ8+o->%7^$u ze$j`~6-{^12b45eoD-slKK!Uc4j7L@;bkNM0~G)fB$G`Qs8)Z^D7zAS`O--HUU-#S zBx99o5YU~i!d4por&m#&vg z7G0%0YRrckYh`aY1SAqYG3j#oX}>DI?5jlwX_{4AZ*0B1+qYmg!rDxf?-$A3Ns)-^ z63Gsycyt0wid7TC^`7Y=H2foJDwU_l>I?ej00DjG6`*IHf@V6SK84PFj`S;$3VoM_{tZFq1RGmF0-uh{!d13fxz|c1^oTo= z2u?(&ME%w3A!x0~oI>Znj6(^aRcHVl?^7dUhD>RAq`yHVVPSvVVv2+%9ApO5$soE6 z%lV*O9N#j$B&Al{4Q)Fo27|4o$t`9icu3i%SuwqM+yZQH35dHhT!J`r8NFJ!ymzqY zfe>$y(Pl;nkHG+N7D;Vf8cG-BbKPcllw##>fqE7oEfH9Iua}Im`hHmvuk5Ro()b86 z)zD_rP+UOve~t4z^ngS$b?e1eu;QdC1pcT(J@q90xlWIAZB? z_&#swfEq;=S=lov6;3#SGR)pH?(L2CpfA}U*mf1<&6cUpXZh3uZWhH5nARwTlS;)h zQpIHu;{MGVSh3+AMu!+f7#9xCEVhZW&xWxeAR>sUN0)EPoR=`a;x&LcHa(wn2ZgI> zi7gcbi{CFsedTvS_0jWyNSI%M=EpqyRM%aK*zE7Gu$^0LxGJxAt2`2ALj zCw>jbOg?W2)zV*Dj)b6JqrQ~C5Rqg4c-B%qXV;-?G+%a$W!w$;V!XD&c zc^?F*r(g-}^9I$s;jK-{Q6VqT_V0DJQhUPNC3n2E_@o)6UYgXug8w;*$X&IkuldK2gq8BN!upk2uL=*yzr?>gSOB(|)YyaiY(nVFD z6UD{Q+{>ED!PeFmd1eJc(qiaLgsMYheqzni>d#ZcX3VWD{G%m%=Y@}w5 zstllGs{oSV<87fb4j?o8j`~EGvEGD=I?bA9j8-=0RhL(MNICK)wZ^!eB=@?Vw`Pjp zgq9v{Jrq%5wBP?@OMg>|wqlUYZ-`>B_#Kq3l*0eoYn=+^RIIE1que?#aJEX7^mvLM zG3BTE0TUyuzKA~R#S*#`xwS1QuyGpdSJZqn3;DdON$SJbX$1>7aD*Kq?6jq0P|jU2I`kLdB3c6eRg@6xx5VpwGC_p8q&#m!_A>F z)(y1lCe}|!7vgB&AqoG!r3l4VY`uA0)ZG4S)idAB#G4q? za+5#G;rN!U_(!mXV$K7^ma8K`n-{3sz6Hz%cCcW&Gx=47AlODBRTY6=F%&C{<7 z(8Zr;aO(PO8HnabSS*GfmSE*R z2F@9$(?Tds1e+}1r&a`bf8TIMYt{B7j!Paal`o=v(g*S_<|VC=g%7H4I79Prxc^Q9 zv3^O*kyGMfRG^6;YoV0;Oq?Nue$GgfwOO!v5zjB$z|5hN_5bi zc*?_805vT=V3R*ofs_NU+RD04{-U z-vFV_I{*4bZ6FoR0?rt^e9NFh-cQOp#g9GB`h>?4mI_zeUy)lMFR5qwElc2dqf#3c zdIj+=**RXplSez|cf@WkcW(Zj)E6H0HqZIC`bWGi!0`?5!Q?DA1XHbixsri)DSEQI zU#^W^7DPYKPd^{YFEF02d7;(ENOsgyJ(u_vg4T`qyNev6sm89R8}^?r^R+<)hFFFW zM?{Lo?;wM5ArYWn%T1nr0CUnn%>vKH*T&R+`MDkJZg$`vh1TQ-(=5osGw!Zi_N)Ox(tz4=esTQMgWuQQcY zEkF9)#>+M#1Z&oNZann%c?lWTt2w7`fHCEr?Fx5{3d*?f*$;_ptLoqYh^NK5&Tun{ zHihTO;+fg?Xa8Pz8x^ftdYLU}5DhQmFzyp>h6kvLSrBdhCCb+X>bg1ct*Nn2$ioNw z`2O^O7L-YG=cfu$7%g|*45j|>j_y5h$_nS@gdRPy&xBWq8qcWJv+sXhu`=33iScW# zzf1q;c>!9I$o|TL@0N)fYO((lqjj93#SntaGeL06>xyIeY})2^l$cj#(2wR*5;&qt zf%F2^yk3n(x*}otdF|?0EnmHt=mKU!!G^HDAe5zG(N3C4Fn5Xuz|6Tl_R0H zvqc)m=xCCKmgT3H>=vvm)t=srzz%K=3v?<31lq6d!@xt_NIX3;CT2QWa8LWzw~62} zX9E3q^He+lpyiNryI=#PpA`JV&b#7;*`!f==6R$XNGe$GTc=(M(k^##r@)JLp@#m3 zAai1hWjSEUFYEMtGnR$Xcfwihc|dWnpK}j53ok(sRz1c%2KIe9Ah8s#OoFI3DN(gh za2G1A6vsq_YIo}Ec)ch&7G6^*$WZ8#+?9u8^6UAa_M-OHbFRXMtp9X^b=|ddsgO81 ztt!$9=1X?Le40F-gT1%*UK#;W{0gGMllX9g?{EWuy?ac;Op%>tp$yr(*wpi?QG6R zg7Gb-P0S7%r0{Km|Ca-w{(J-mT^gjciPIKD^Ib&;%%i6hC!3ng^IW;tYGo0o`Ju|^g*Ib^#c$oQaUu5MtWZE%I$cZSZSNY zfszfs*p^TFaMnGJygY`^bX360t=nQ^c zY7AmiUKd(C!BPLY~HTvc^OJ{$%xJWE+idl#;tjmCpsLQ z4Ke$ZIi-&a3}ZJP!~K0S)eAg*3VvS<0RUxa6l6f5^$$R+pXvDwq9ulmc!;akz*)h~ zhMp8YKBpRzrxP!1^xyb-xB?O#m~FUObm#w0g~QE~%#GBqMet1Eo9_7k9T*0`@xK$m zNWTW3>K&X>CfPY%jrn434o=?_@KrPSb+Y$$R&exj27kz;C8Z_BC1u4W{{gyqINksN diff --git a/doc/ch-datastream-api/img/filter.svg b/doc/ch-datastream-api/img/filter.svg new file mode 100644 index 0000000..6fae45f --- /dev/null +++ b/doc/ch-datastream-api/img/filter.svg @@ -0,0 +1,4 @@ + + + +
算子
算子
IN
IN
OUT
OUT
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-datastream-api/img/flatmap.png b/doc/ch-datastream-api/img/flatmap.png deleted file mode 100644 index e350efae6ff83953f2f0e917ba04c9a0584250d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32361 zcmZ_01yq#L_C8D~NR70_fHE}FB@M#R3@L)rC7>WJEhsf~gA#*uNtc93Gjuo74bqLk z_X6I#es_KAKWn*MjJ)qTXYXe}`#JmUW1y%l$X zo4|o2Yv8YY=FefzQBX?4asC?J2Y!BHBBu^RL2+Y1LGkuQK{*G$@?JwhapFWl*)T*w z5&D9H^2j!+Mok3x2Q*_vSttrhUMMX$@DrA;+$#qZ6zZm%KdA5foy34IF&*V$(wIy4 zA7DO2dlDkvgM#9zD-V7C!ew&n(lyCyQ-93$BZA}rOfI-R-ArCRC#@Tqg8 zCli1x`f>8yK*%$g?y-Rrrt~%wdRWdwAMv&S6mC zW9sP}xVO)SNR@FO(Ic#0B(Ayn_I)hAykuQcC-1jUKR1*Er!BGdZifq^QGDRAcjS%n z8U`s<`1hp}oY-ez7LVUrD1SQ&nM|thgn9E0{;yJxDT9&f+dbp(k-t$bSSI0x6&A*e zx*N(6d#bx}*b9`SvGJ&j9oSCFN-WUXz*Y?ml3&PZByn08r0lnJ15oMJ^FQW6w>kaT z2?z)x{RAbV3C-T(t`RXxZ3Ufd4Wz1iXEuV>s;=mgIUx5pfW1{zhAgfKM~W zf!{+up5IJ{bO8lV;YDtLD;jHFd7!=asWr9_FfMEBVc17k(2m$4F#=DVQ=9OF6dbEo%F= zy>uF}Br-T6Vzf7Bb_@iJ&-$&K*(`w*TNlNj+Q}_G!BBfXM#u@n5 z*^yNMn)xG|e$=;1T9?Ct)35GK>#(7|6k{(TVQ-;oWHWyeE0C`A_?^rW1%-c(nCuJJ zhPZdn*q;TH*(Id!P}VrE^@1N0MJ}tZ5dxK0O2~mMUbCrH^K^^E-)p4Vx~(-7$oF z7*f%+tjCPXmLUX;-E#}ndXsc7|AK?2HG@5iZ=hk%D99_2>PK`c+AL;MTr085viHTf zfh<0>r}*VOXP996;NJ5Zk;Ry+7Jlx+@zLy>4Mw%4-a)ze8+a;-BGmA}uBAu^xhUjx zirG|*i_8d5)Usi5U?iOqMKHc7n8MLw2;E=`!@|M0$EP8V&6qAXwBCGeNMph!l4L*y zaq}8n5Zl{N?L#7TDlVzUdu#}erpM`!rH&|CeirGSIm4mUMsmIy)FC{nau*l46mJrz1rG~IQ^W@CnQok9=Um+G8j$RR6dM~kBqe`1F5kJ zCq%DP>q%`VBK(wJ0cr6h!gXf<`Kb)9i;%os46Y}O2|csET-gq`{DCc#z054huoWRO z;AJj+=?RE(kjZO=18#G2^Jnb0Wcy%~aM7UcycD@eVFf?l8>qfn8#sz7vwct|ZsKDs z9)R7BKrZ7OCCV;khdn2c5}8AtXlSD7V-EMrk00|5Gyp$4wCvY8(qOh{yu(}f+`SM7 zKY0!j&Au$T5t0P3B-qxguqJ@!*u~F9LOzr~`vqE|98p`1Mc<&l9^`3SKRvK?ZXYbT z)_h>*G~>Iomk!VUe|kS5VeKY82|SajVC^JEXL$H}sco{1{9YV7L8RFoSYCbEg9#+{ ztc3V)!lgpc)p07^!$lYBD=}Z7wbigLn9TR5!DLN%WAr+Ie3im17ebY?US#KFM z!Mx1#`4zZ$2S<+-FRvauIAZr+`AVpm4TL-6-<)Wc^C`yD6@+)UTwq}JihXwBdB0|3tLj#_kQVEi}Gx4h&57L z_gv31_348@7ba-!HMoLWzpOX%UC^Yr1@5@zD|SZP1`3*Xd5#-IDf*#Hw+Z6jbYs>$ zWpYrTo@8?mqzhr=6gNMtr9`XbVf8sR6(;`eM;)9s{?6@6MwM_^1`tJF413s-OYen9 zIyCWZ1DQ65Au-Fx^(x~5Z+i-Vka_){fDI+RAA2Na_T3tzQze2Tp01Dy#pI&!uh#Wx z^sX5j4J`Q9uYyGTm|}eF3aVbeh(b5;;7%IY2g^t99;S!Fr&;gjEC`*Tp%56=T;O_a z3pFWEiEqs64ct@;_{8D=RgrkWg;_GJ+(tKFWx#pmw1z7njD;*{`rmQ|$@Wb}bs&@& zNxSTQx!hNkooTJP@47n-3HGN48tYpyx;W@3_D5c94P~tgkwPR7AxWHl?D>{GxT%0(Y- zjU9dV@sSQev)P50+Z-%Jm}lTvVIW@n1b4Z%)!=#>bbzFiayCQSZex(a<46af68JQp zXRqbLz4sPY52B63*&v@%-s+e#xrPl}Mjexke@UTH3aQB#4UQ|iB#z7PBRSW~OJafq ztNr6psXzz`1wL6#6S!2?YJoQm-w1LjG8Q*pFS+*lUYk}+a~6=?;4}(hE3K~l{A@R9 z_=k9nP>0T8a-|2FAOd5AHT-9#%SNCsh;0&zCN=GWi}e;EHc@}!7fASqQ|P@~wy;s1 zGBob_yW5%&7%j`|N>$ubm}d;R{*#2I?GQ&H+=ZI= z?DTIS{2yJhu(HJTf5GoB zQc}`S2$4xBHV^4gO%-s${BAv1&lctW!aO7bHq^dXZUM(&oeU>pU2DNcyTm}L1Bz}csaJ6 zKNXL@uOu>%(NN>puoBX(m$svpXo@F8oWt&H1;!r6D(eC5sig*q(APZj8xO#EAz<#c zpx0!jk-jMOX5gD#Z$;Ip2L`Xl{e?v$22h);U$MD$0(=_xAIIPlfb8I*)+}J7a15t0 zS5l`=Q^xIavq&1MV#SxSCe&;{V5L&Ad8^9)TfULs@y~KMd!VMSys271VlZV5Q^IB- zWgaw%e5Vcf42Bn(UK|eYaeeTZqS0{_T!e2+dQ#ge3^}zhD7^2S61EOtEv2AX2h>2M zaCc*4mLDt;-?PbAo)B^1u#R8*V!c)-5tpsgv_q+mLGcq&U%7--A|rJC>jlvss&r?e zyMVTpC0Z(y;?{bR!uirZLOp7D5|lWJOk9Je9esQJ9TA2B{MIVod8%}LTw<*g>B`MS zBj8Dq=3<^zmlv^&rKkm*)owT@%{}8 zb_wh&BAePMoSPh*sE{i|a8AnL1QG|xS@LGc=EI2uL3>k&-V0t)6J>vQkpz3|_!EKb)#}bhe6tj(**uPu z3bQb#+Vek#;|orNK)QI>P8NEj(vZmusw**s*4-^{KVcN-9-zYXzY>_R+ApmQoWz82 zL?hIN#5zSMW6&q950XfAh|zqs;z813Yv=WkOtc~uO<}i@fqd;y$R}5xYb%Lm{-zPz zC$-U=Q@AA?L2eXYQ{?F3!~K=n-NtM@Q|0&A!(i&{7fg|~(jjF0H0KiWLU;Dt$BUdIJP`LV?d!0G8 zt2n$l+FP_17o^wAL`W+W!-UQ%IX2Ct>DE&J6oaEgO0ZzAW# zwAP4ZBwyBTOux&KjU?2Z9DgCWI7hMV0v#w59>w7>hT#XZtY%~@bMexR% zu{5E=g33iqv^WaA&Q^E5p5GVe2KTCMOF>`CFZKiaqx6kckjM&FcDnH+JcaTi7nJ}a z#L!*~DJCZ70~3NKBQle}3Q3$lr^}>2b+1u#;3~GqXX%@}AZhGygX5w<0CK67M!2Q$ zbPJBOx6Duk&@rkIPt}}$4e-D$F>oJRGM(^!e8`W%lXm%*N+p-3Rx0-lD|(5d8d+k`{tljnfpAX z5v-Fj9R{gMGT|B&h3l^TMwQ4YTIn_8o|qoN>|qajE?hiid6ncA^GI5izOs{1Z|qj` zXxiqjNIHeU-kgecE7paU2{UKbFG0xjyBMn=q)`ctGjGXhV_x?|^Y8KI#IViLcpR(? z^1r9E75$S;kD~Bv={Ri{K_9tGknv%zeecyUHFP{vdDf{r?YZAp42!=Mvp!8bGhR)) zllfJgzLJ+xB#q*yT{QaVP}A7kv}oG1rBM&3mhxvO39{<*3};zAbcN!sIjmsYfe4PP zW$$^FbJ2~r&ySZ~7N@qJh3uLli=_j?0Q|mvvqll;*{7DR^c4g;9(Sf`%F$!zN)&pS68K7@%w6IU}B=7|jikO;rCP#q>Q;`iM z7gifddxmdGN^jWceq2~z&%l9z-9E3yK!zeZB_&P(X9V5zpnGbXEW{H6cQ5~dO}zf& zr7Ssy<9aVHxLN&xWRi>(Q7WB;@v|h?k95ka?}thVW_hlgu|WV~HTgVqBZ$pl{gj1% z&_NjkH<~s;Dn(4sf6*S@Si&k*of1+ic4rhkD%EWJy;!Ljcj7m3GDWruUl}+)v|8G? zpw~Pyc?t4Id-z7?nUp`8-Xy{;0IydL=6PYN_DyM)M`1Kw$*m2eYla#MkJzOmiG*c% z-sEFbyvzxRe~+!z+xW3+6{EK7R`diBXHDjE7v<2&aY2I0z+Mvl?Z`I!KM1pdbV=8? zu-9D29)M()`3h_YUJ$$@xFZ0?6FDPqaM4}_)of0<0i4OQuS6`|(x8P-D(r94qO{rv zc^9;})K>DJxnp=!4{EWEykTD#SW=V;UeUlfhym`eAU1o1Eao$joc#fw;?;fLp;|lM z)ky<=-zn3oFC4S(!hn68YuENOw~?)zoe!`TgBf?m%ZrR4q=Lm=APtKZImo^L)CX@~ z>TqxS(yjdlcujU{D;vN)uqU>p^Sw! z*hB_v?_KR%L}<ozC551#XVs+mZ`5tT^zKlwVr>6xd&g32%fAt$S46~g&-B(MHtn{w=}?Z&IJ zWt)5n|6=p+`9;kB5a*~{*0YKs+&K`F)#yc*P`OMu_Ur%nDLRM<{Cp4_7LE}YR-}hkZ78d}|?bNyxSnLBH^oN#I-WSqRFbH{rhKK4wzE+@T|4 zv5-#Kze{*V}ClgSql>s;UPg+nro02;b+uWrO@5KlC%=Cscz-IKq29` z(6nd`DebsJ?H?x~?T@zdw;K-3d34_U#X5yLf{t09rKFg|DvS8?&h(G;`sq3Wdkcse za4dhT;*lhjKlUyS{1h;P6w>;mlJsWlMw?7MLlCDux0d630JHsjJ3&CW2SXi=mPsHX64!+T44l0{9wd8ci zzwCAmZ49lV)O##nGeuP(rD3-#T?(@5b?r70%cy91xgELx0u8LZo3B&{Q3y-o$eBno zFs@>Mpu$Au#b4&=5e6nDICeq4v%Ba7j)fTtk=T3~jz}WC$;4nz_i~FG zNU(IW1~-wobnn2oUc)U4A1NR1J;g(ZL~g3{!dko>ySDk^CnUy?;U!YW@_nK3@6Ya} zLS}_a6Q)RZh)-%?M`l~ZN`-Kx&|3>_p^x^0p>u|~4r^Ett%45vLTR4G{!-9*FS*Gal>^|a!^ zc749m0T|{y3hk6>itaC=rk8gzBNI2rL6VY(zoK`=u`Q=>WC=-hv=zUsx@@&T;$K(f zSl76cbe`Gy5gf5!=UKX@n(#_UAG*zbi`42EPAua>+GehdvP@;Jy49ytHUkMljU3Mr zF*c5Q&3hqeWQ_~N9wvJJq>PH-d7?K)fl zGi;iS6M2LbJ%;~-=cU0?EB6^C+%C(*IDrkKHyq!RWIW$;1%s#RYXX`}AICFim%!rS ztMAd@CcXWx2u1s64(X0as$dF`KR6uD=7c_{$6fzmB;~cx45a;~#QLep>v(L1i%+y3 zKNY0~2&ymd0ENwMMdYt`Pks+RHcnH&^l}HtKOD+m=i;$gsb=d<*H3ZJO6)24`N_9S zq)a=)b)fvwcguRdW{k_+B&xsY%{rf1l>jIlgRkmB9|c-De>na%>$I$6qO#$6(u*4I zlDswexC(BSwS4{ZhKP08q(3oWeLzP1D0%rX*EOhIr<^&Gk#9cep3aNhS~0s1YxdAV zjq{JxT$Pq;w90X4!jpfsp;>pz`6-uGWDCSDoycNgt3T_HWm)HXOFtiY^R3(YdyUj? zP^zDMv0^Nl;D@YoCJ5SXuCzB(gDA2k5o~#L>m`-MvDL&dmjI(ZaLtPmd0x=YMIMDy z^>~E_o%`9<4{6f_3)oHhN_V11mi|x%EC$+x>R!qxr&kpMkb-KQ_A<^y047C2H{^I2FVNuzP!c|Yv+#y z>}JlAO#@N9D}0SHD23@t$RC>|C|Wrsf(gcuv8gI%3hORJ+CnoczFELJkrlT^mB@E7 zZvx<(@WxbmyN=97A_Of>0zkI!luDK-UQf*R&zt572L~d5-&G67n4tW&xa*F&H`cu$ z6INu)znlP`LI9+mJ#oB)z;fnsIEFH_;!}TEDoImP`Qp>8VYBq z1Ce|~HY7K=F6zXr>kD{R`I=c7QO>wE4P8G~0^$xkGf)c%1|W$*KV8)IqRvyg#X*<0 z`*&_1Dv*!l=9{DwTxrCsNH7Y>%0_&H#d4Qq{yZxl&zAqq*Y-wjHDs%Wzl=D?Fq*y( zG(qY10lHN9>eU*z)-S*B)tdit7qmFOhowOCCTY?;ubCwSOx3LNHaq zC;qV#uS@Udv*C{k)*FRbp#TI{Ti|R3BT_1f9188Lfhs>Bt)dV&DLRN^#o#R0`SkvA z&9(~8k&}MyUj3$VJ9@nu5dD_eTIy6mf+xU#wM2rb;Igx^gSN(}0=^-SB;+&f5TN zHjKjlq3lj(cL&`+oZn=8Ab8(`KLs9`bF{WGwCT%MHf?FR7T^gM{AbDS9VJ}qXSl8@L_;~lr3DdxhXbHLc)tJ@Ayt6+} zlv`(P1@Nf2J^-AbKop3w5XX;a!I8YTQC9WRpUoK2^atb=_C|MX0qgN@5_ZVvxT#&a zM538Ykt5~xl0N|ky6-g7%UeX7SwV8AO>aEIikTs$;JfF?5jONgwtgB83nctzh`l6i zA95QaR;ykYg%Og?X~+`tLZ%rbNol=t#5$68VIvmM`UUir%n7gQ>a zRyE~H`KdQlgR<*n@4wrA_P}3^1OX$jq5#y8zL|rJXP}NK-2_8WXtVc&T9G-v4@Z@< z(3j9(o`3{-Ux8nnAwq-_kh%CX8tp=4alE2zOoSC9Np(Lo>t~EO0Y?3 z+9a4qg^AKu;ll#oqT8^mG8UydFY4fKOj6O4dN@)@odypurtlN~3dg_RJPCz-T1NXK zOWtrB=+h?ZhaI16F6O!E&xzb4(j>a83iDehx(D|_dSXjMN#T&O;CvnMyIK>1i3k5C z1`-6+HL#tQh@R9=vg6!3*oYy>vEGiXXZp@%x~8%J9o#(fI_@(^(?pVc7S%cVL=5OHN3%esJQ^dm`MXhJUR82s!#OH1bB|A_1-vg%)3$0@yqhn+@ zTvzHL+_ksNLN$wPFNn#NyZ#&h+?UaiN+4Zd7{`ag)PM{#dVBJPOy**JGf%zw8KaKaM!>?TFj~g5zo~aaN{?^lz;=XQ zX}vM&b`dvGmB4Z757|MU*8cufC8q^Gqf)CgneP}$%H)qJ6^flo7p+*`-WTPch2i%f7L`3q(|1oqi7LQHcqoixw)Z{#=A#xlbq+R09$kFn36>-P#5hc@XL@! zhTiT~?X$H3{bNuZ$ogX^b{F-qTZ+Q(-ifDK;myjfPMR^ zV*4*cTT)g-3C#8#5-%rWbfKEv2gR;tc|FY;pAn_GDRBOH1Pr1w@apuK@s*Ul zoqx7xovvi6J!{5?Ee6s+hsCxJh#-n#xRJTnR9$tltj?GhX_kV!!ca060us6>6sGMlI4e&gfVX4I}$8V?5E~+VV4S z%+a+spzyi|gg#g&|1r~MgtSad{OLx@dG=L7&2OxqYHP2*>mAw5e9)q*sZadXAuNF? zTIxC*AC7+?kTTbPh8gqe*{OzyaYx^%(1|t4rN)~2^_!|%eU9YK2Gq%6W(OG?;>wU6 zFlI3B)D}UaOE$xf>ft@s09Ko*nig%XfNSWGgJT2rLq_5p%$!}+%-~`RB8FyC_ZF=S zVh&T!k1vPCk5n#ooN9^O()%m4YXN8dDdcv%yf@o2)u7|?S)B94yn=tW&pEvC;;Dy~ zeBUrI4bA^EjePT=RJmmCg0GvEV92zI7f|KM7D@ec?phUC+V?J=%(B$A4f9ZR=zg=v zTw}{D(DdS}^q9;r64D2%juown|9_d|QBD1)9W=2{gQa}-fzj~YKOWepL>{Yzh-|0r zsg3jO{>-bM_s&1{g|w_CA|3L|zhvJlL5B*=UA3_JxqHNEOmDJV+1Du_6aL&hNXc;x za=;y5AkZNy%02Kk0Y@z{75`MD=k@^-OKQl^kO{^Qpu0czXSZ zWb%T)p4=t)mvh1L)6r_1{69bn1T^wOWN+V+~Sy8*|TC$0h|oZ~M-C>7i_Xgmrl7aUb?kT-10{pTy(3U}uWqPzCD$R%C_Q(_qQI7?sk;XVE=+-Vk0UZM87|#VEYoJkd0mA^VVH zMCJNL8@^MgMx{ttX+>kCBGi=MkG-0tKBegX6`HsUjNTtl9BF`3e@v0q44{YToDqTo z$`;Am$W>qC#MLCX2iu2BRmyumbt7K@?+a>3!NNqiw6?f$bL>0<5fp=4`1^jp2s1Us z10j&7>Fa(tcTVb2=J?C#abHU>l-Tr#mfBI9ExMycQ}sX8b45>!8v-I(1WPpZ{0NW8FcM3yP2Ms?%$|{S5#aHHW~_ z$7SO0ZMUC}Gj*VFK{HNLqa-!yChNgZCfXn;Wu~$o>JCAj^*s>d51-%OB1L*{$G)Rp z2fhV1f|yoC=j*zk|94DmOJvps#>@)aM?=e#Yt)$q>-zc8qkqmbuSeb&q_!2XoBT%8 zETzBLI30-t*^1bY9m;XA&#hu3J;Azg(@eALSO5e04MwZ?&torKT$g+7E%rcWeFMA!TRp5F7g@Eb+vlmm^!7j)8Loc6 z6_5T7CFzAY364XNrS02n-{&j-*H3csR+Tnr^-j4ZsP$iLs45)Y&nvMmi3m^vxcSB? zF#`l1uE2F!$*KXZdTF9p@H8eYJoJjcA!1dmsKg70HXe?&qF8^ObIZ#%Z!$J(&rCdG zt{u_CcMr~py#iENZCimE|NNgBZyd187M_~!Ju%#vadPeEsVOuxjh>6ZjQ=j4W4%bl+Q&~scIb@`S<1po*b+qx!e0eNh38? zhUmgKa4CrMfu(?~g&fz6RFdt>6yqW`af3l-23+B;+Qb5M^?BJUP*ZCQ*qG!kJZt~* z>7^_MBON}Pq)?7qX{<#5Efwt5TdglJxGvASgJ)0oFL_X(Yr7L&3#9|e07~&E4Ao58 z0MMKvD!DqHymDQaV0f+@zi#FDq62A|yL0RL-|snIK)$Tn_`rB5^RC8Jc!g-*^tJeWg+;%thvh>e{nix{1P=G}0s^xgYPp5^E+( zAlfd6g~2!7{lzquwJsgua4X<6WJ2{C_jI4qdap~i;QfbL{!}l>{%5J~GMl*6g;&c* zgD8m@j3SHT2LQWrtrD;Iw>LJ0Tw#JlSv-)!F{1Yu4902yJf)gl3Yp1E!6%5s%lt1x zm1aMpc8~}e4OMoslk1;{Uy`pDILwZgcqQoP+-5I^!0GP}GpVA-2XBc?;@#=k`Kd70 zhSKGOF<@?voC4loYeY-YO(#-{9Y!%l(ifSj9&7-tA(h7Y&Gks@cdZ{Sf8I^aKNqeA_dGUi+AHz;u z!f7|slgqo&9_NyM>lkVf{joqSr>_Cj8VS_aqCyXu=i+Bv@_#uF@2?!+P=|f3;JCzN zOiJ^xTn>NqCd3mnZ!y?L%z8i72whz_PK}YoS0W+Q*(n?*K>tcwj;N%<-`;j@C_{xxDjeSv0+l1Am-Ou*LdD~%6gcwqI<2^`mBeag zE5IN-?3{vM%PW$($VQPAF~nF2f#9g$%nkg*Yq4PFzqXnd!=o6s98AT-mATIjZqkMZ zMy5(Mk-Tqf9nVrY!Tuwh-b8^aY=$^8@~MBuhUvHnzO3@9&F{JynwSqPFTV7r+1;MR|Z(L&i#BQ;GL59ud{VhnVWJ3w@ zIvr()P}(=K5=yS|ax}8#K2hzX4ls6#=Eac0^+3(V_w9^Z!yNUr_3CIJSg3A; zC%4srV{F*7Lko2yn-P^lI8x@ec3k~IRGC>l-G|R^VGgJHx2X_VZBa}I>M_sKP0JdD z`=#E$tI^Pepe=%4DU8^Na6FxhKR`ssL!x!)V>sz$gI%TG+a!Gtz6OX&+;CosJ`f5( zZxJQ4axiHJ<@<{JsQJ|Vxi{PtIrXhq(0rJS2Yn2uc}{bci-Z~@L?+u6`dK64UTdMz zIJa-HT-1~2{!DiI!@M49w$1nul>jk5EiT*u<+=BIz@`I_!nfE?E-JmD65A4J;gw5O zuxUu=E3gs7RKKEjJQ8!XHI?++Yu7y4mDC2;F**wvj#~; zk=gBQ)0x-(u+d1hvkRF2EnF{Jtv{YAnJC7!zcfJubiryvP0^VhJ7j9wc@X<^{yLu6 z(^G4=0l}Xr75UJ@@C*{~tWr2<3GAI6o+v=R!7r$Fcym?Tv%(vJUg>*kQ7sQHJ{)3` zLYf6dRcd=%%A76G?tkDdP=zi<0sKq*vu&!b`O&Ox{til!wd1X46TkOy$(DOYV^di* zkxBa6d87IaAk|f|PEgI}Xx6=VqywYO8c?KC@Ih)%mME$cdLFN3Sr6CY`J&@k17P&H zd95e$=@}5etFr%rOJdhb2<=9F)E0{G_R26J31-ZhqN5j@v zE{Q3HVBJD}}hS%pyOX=D?fI{Pt-ix}I{PAxE3|XXh z2Q-gX_E&Sg#wMb_xl`THWRs4czMs@*knC2Uz>Sg%yR1b31=~>j+KZ|@1Zz`jk2|rR zu%X~M-FT+N8%YwW08)Cy{VOO4X(uqIa+GE@vs|73h=zJ^PR8r$H2da3S=v>u*T!t# zRB}IMdR|d!fC`K-9n%wsWtThk7Lo%p3Iqt*x1qj;|20-#AHQfss8Bd(0hXF ze4xlpx#5g*Z5Z~9XRLMQF^WOS-Ytn+A()EXAn~bL{$ zFLY|xB z6d?Dyl{^js#mMX!(ac#Y*1^9~MTCIl(zc!>@Ox3+RHb{(}U^s4elLAWB6KN!#{ zCZ1Hgzn_gxI)}fW{(Bb!UEUBql_iA|S<}?oC0D;MMM0^s=(60@{`oJ?rxA_aYvc1@ zvR~+}PWUoMyx=7uc*Oz`nfBvVyqOi*_ZbC`=dEYv7OT>3S)pezYb!x!%@7%>vr9h; zX{CuPvQO_}{u8Lh=MtVxEV#^^%Yrd`wf1lCG>C`8lRIsnAvMPy^>2mP!t0Ax+u3>JpXMw?C6V zCK@AFY*XbUfSNuzz~qf$jXEAdHac#?vu)Wf!79@UcdHGMN~~YiPU_CwHrs2c;_vED zmmGRji@|#uv3gj{DG^RIv;2jhpC8oh*<{6%w9lTB+0sy9Z1uzX;A#9;F2GZgiL@NU zw}ptV8St53%ADdSuf9hddjpr4ANh9s&c;8F-3WwSuSxK$8#Qn5Za-3ca)xVONDIQO z`?#*4nKBKh=Ip)G)@e7tlGs`AOU^P`j-64rxI^+3D)_C_Td?kRX`wD0awV zXjjRI)nS41lA8?Ug-e^eM?&BJtC>Yp-X=fBHaxil?_|xJ)_iAQzzaWime^+WjlcSb zAMo4kC07;Rd3CP;09+z^VaV2mZ%(;*A&>!W9(fbh;u~*^j=MIH8W0M5U^C&E_~4;S zGTR6%F+nvA;DNm>YWa_F8{N*Izak$)I%aEQ?`DWLb)de1U!(p7%Wm!FWIT<#(!Lvi zHA2*2AT)l~>&)vtC}KWB%08Ytl!zcw8X)eri{-zZyHtuy*n8Fl$5J#aA=;lB@Av+oOgc)DoFsRr^>I-YYG-LIGISjh=9?&v6b5#eP4bKb? z;62awdm2vmrfjTlk+xZ+f_xOQp;co7|8Dbnp_s{ECqYZ#Nw-LFD-~FhZekJdm|bs4 z3JPVH{pGy;@)W&cY@bSG8MDwV^mB9j8O_|qDSB1St*H{tOx8@u@F`-AQ;r-6jOTQC z?*DxHeUoDJiB5Y?^1mCs16qOxV|zn;jV-bwYM?5^}#01w64dSn$L}wD_!9e z)`F>Aw|4r-f?lsKkt~?oW1EC=_h-93;Y%aqrEywO`tP`>(!F|@4)6mEzo#Kgf-z^f)_qi!r*#cj zEFjO4OBktA0;Nl+fjF3GrMz6P{OtY;!@KGkyJMru zF02l(u9fi=-9aU@ayKkN$1d?cEkooPs>4YX1_jG86>bbNagY zSuYT6J2nX)>S{e4U(w{&TGLDHQ$IXpYFt&p)myx*;QDmo@EeA$_s`~%W1sJKUY-5- zcYptd&7kgk&>Qr&XVvf7o??AW@{%BT@eyxjjQeW^@XE^pallqUWu$8@P%1#9llL^G z_)LnYFRZkAlSnKmXP;R*q%7ZH*_W;h3wch#T+3?VfnEGOslt$1=Ra)a`{Gq z+1l$^*XxNKuY*GyD#=F;jAvX|?(61u4IK6xHl4`-dfa@@lVP4?`3BG?A3TeNe7x+`|Y1N-Rs;k z$Bi6%iSi2f*PHwKrgg`uH92r+-j36B(;lO{^{+CAi)sl#&*)9r1?fwhy|Ol{7e)0G z)uq%vuUGlNzazNDxKsdgGQ~QNVNzcvFhoTUA|9_f>|_Uul>-l^4af1@A%W6gs67)7 zb@R*pF_NM(=4!>1{CPE1=r#^eQ=D^Wgm~9o!+haS?E~RfOgAT8uM|C%U1f;Ot&-B( z333B7r_6uv_|k6tXfFoi@{^Zlbl@|DG^Q#>J1CdvIdcjOGeh^{nZkL6X9NhI_0 z&%A2NmOm!B8wAN0>bZ(J1@neQ+A&2KNwhsoYN$0a>h)^aAMpcJc~qExUI?hZ*`Qw?%Y(DXnsck!Z0JS-4x)!NmCER`V)2ANtK2bBSto4iSZNtbR z5O5Wg^0u*L^kooRRAGGHBaP#ghg|%cEQL%7n3d_WJU;x)1}SYk6xIa}AHR5g?=sX#+n`iS$Y{p;SrRXd*$jG! z{!H*VID&3nXUq&U%!!uX^B{#UyOHg3HB^H%k_anh=B5Ubw%7kEJ~^viRjhAcc?wlUHy7 zi?0tV7cBaLq#C%knxN1Y3`f51+Vf?b1!5N!` zV;xN&sJ-wCO&gbKFsp@BkhKq~lLGi9$GBDu&&gJ28BGd4 zW5HS=lZ*=bAybX}iaO%ekrx^PK{ezy5*)Hc=r>r{xo|nNMZWBDuk>dw2P&lsZlX+z ztdjr6I@rZiWsrp!ma}!yQfq+f+Ol8)JV4L3p~*mNRliF#VIC zsF1P9s*r$bb>A_bXfpsXrJJMG(qopT+`--N&KtH$pVwkG!K?=B*ybw=oBX5tqac`vifZyS2h|Nafm^N=IZecH%sEHTA*zrS%l#L;lAbQ~>A5a$c8K(Y_b zbA+e;v%g@#tED#$YDf%tRJKAZQSmuA67hPfPk7L5z>JgYfgrBHLbVOm7vKg)!$l!h zKy$2_bQB%>wiy#XZQGfzI=JzV)E5Ewt}>g66(zDj^QsB4`B`8b+F{oq>ms2o><|c_ zhMYeE?qc(QZYAYY7R^t>07oVQXU{a-6K~0C9Ler|j|KX#Vl>7S*ioc{&_8g|O{6UZ zo9gw-N8(w{;=c*!H4EZpm+6?k&!hicBshu@hA1z}@ds*;w+%oO_?FniYiF^kjwHYx`|Y&V4&`s{(()B4jv8R9rN!2jQRBz zfhKeeabYUTKo_Ol!dwKcw7<0^YVcPaku13}r*2fq3_-GBT@+Uq1WS-%js}F!VQ87t zNFCSt)Lv$YT1w!xJ{!b-^QONAi7|l<^k$|td@yt=L6#^Y=mHxSh|#I{gcuJ+Nigt8 zbwnV`)eH&=Ev>$-@x7}L^f-2?>^y;1u&QJ+eL&sg5gG+26}>i0Ngs$2{Y7U}DjO$f zxRkf&Dq=dvj4&cvi5Nr2b`&s0m+8W_4tnwa?}Whe$?n+cELy!o+vEA2{jZcek#P9E zftyRtRx#lF8@Rg5yjE|C1s~+dKNyYad(?O4E!tP82Lf4sn82F8?!u>s{dQIfCS)G` zB&vs%l33+J!%->b>1{4$f z`VQ|Qffs^Ves+JpE#pI)#e|6#HQ+zYe{rHTdqbE%*x1$>2L8g8_~OO+;gIH69OzmU zMb;yJH9=g-YAc^(IeXP=Gyim+(p?uYLikNb$oFJY{=h)m7vz;WK$pB%c|+Ih=!Z<_ zkVmGjavwIfF6OjJ(t5G%xSx^M>fg%~UlBT|Jd^(zL4**-LSo|POY3$@JsKj-4BcXwbmpusm7a^b94}m(^66}rT+dHDcu>gS zrqhz6sCy)cqczBS8`PanMO;K)3iiG!-*-NJg;KvOLmdrAT2~DAX9mHzIWBb~Ck~62 z_=|tEdmc|Ttvou7DH6EA0qS{9DnNryJKZX{gV|1@kLY>YmYq!)ayVuDLQFbsnzrK5 zeB%oT=3Kz(+qtU!KJSzzwr|Zv_veI94;l=XiqO0e;`lD{vw{_&>|Sq(tFL71Kdy(% zL6`V7jwAs+LL}@#W6+RjWn?0-WY}5lie1kZX07nTBNorcQNRJF0#;^awe<=^E^~f4 z6}`P-uLQ=arS`mfr|ey{n2&lYjN*aj?bYFR?<18Lg}2QDZNr#;TImA8udh4z=2C#` zU~t`mPMMmx3wye%z^ekJ)wx#bnNX5in!=88XG*i!LxwPNX`mT!f~XE)kFO@bzC+Bk zdL)4?TGY)4+)&xfbr$I5oQvT%nwYB4g zbh=V0Yu}r8_G)|l`1hvbS$*ze=-tr(U{67*7<{9#VF{^t2(vv=VF^;><{nv!novCt zX`+64Y>LBUmc&l&ejX@Sx#+S0cp(G5Qnh}@e9Kwy?7KjC+^cZ2oCq4ey-XI^CkiS68T{=c5bn$Z4C_9E;4NJaILN7U{1MR; zT5#0dBaWA@z&T(?X=^WD+?#86190##6=KUD|sVAvh06+)$5lu z9bXtGf`fxHCQ@895jEz|IDBAVv8RYSEy-%M>x1Hx1*uKGX7h5OA*7NvbSFQ_Oxg<3kBx2n1>(IztdP;Te zVZ82=m}5>zduVB_!bV}FF>mqR)L#nzx79_}*Lwe{yZj~LhwP8nvL3RC-3p?JOQI@P{yv!L1(TiUi6 z&Hd1L5L~?J5rFFSmS~givsA3Pi3Uz%gptj6l{bDIIRk8(%U-? zs5QjQYMG&_a&f1jN?akOu&*`m=-vX<^d|`V|JC)CQBi&2y8@EJC_SWtba#g`APpi? z(&d1F#DIXLbR!`Mj36!HzyL}}H%NmL0@6cCBPrfJ{{DB}dq3PyF4y9mIeYJSzx$2n zdG;zAcQ-;#JRzWPS+_R@vi^x_&zP_DvD)=C3vV~6C2kkDc*L&(F0CNM(|CFLeWvJx zq-gkG*4EBlT|pfXw6|f;GC=fJizd--ZO?@zO^_K>YgVd$HIix8m^P4U9&p8&p2p`_ zj5+J&uhM%1a8@F~c-2Nx2*s0hpZ3Nq$FnSf+!SQ$SCP6US2D7wf8V6BW4$!~A4o*1tnXKtjB9;mP3y201a6+H4<#R-FR_)5#FqkG=b|{pLZ% zsZl=d5Y!hWNjPO7Nds75@-eoa&0Eb5`5pR0eYZH*XGcJuR5qcG{l%d-)m&7DCNuI@w9$#PuWwl<8oW#WwK-) zZ0nk=I1s#DCxK?X?APwx0XhR2W7~X5^%oyra-7~zq38>~wk*jf zZds_Bib;PP1y`%;7za~LmrQHD&;@@3`)he6ZrNw#w!n?;AH#muKsp3m8c^-~JG+GP zrsOZCOk<OjA- z-x=nyjvdBK?yE2+m|LsuB?XU4L=xyqx9`cHsy18>zhUW>xrgYwGn!{)$N57kC2MBhVI8tJAK&rERR!wAC-bK%b=BW~Jzh;=s|k4-h*@Vn2% z9-J`J6iYqbqPP)7xjl*mSXmW1pA-0-hfC5ey@=nwPE??6#H6Ek3J6tW+v9~XtBzfN zweG)VyVxdp{<)FFaZ=&Qa0$*;)2E1@6EpmW%&3N~+TgZU@jtugJ2gYzraiJB59hvr zvaH?Gn_n(FyU5P@wVL3=zb8|7iUA(03PqaJL2LWqRmaE*{A_zF>K;<^6qhwyID}cT z2fm?GSKOs~iu(xV_=<*1p{p2vJ?oBip!5lG{Yxt;4Cc&gNqm@l&sPrfx2s8SFVj#) z;cJ<{T4H5|S@#VHM9;>qu9m~r45%vofS2{{E?8buY~MXbikpoeBW|EJlBXHPUUGQI z@(cQ43D7GErDKi8xvQ`5+B}RMmWbLQ*w_g=YkfABw>>nNq zk4)}(Ziq601fpO_HdU}Y$oYlOIJFi5@*un7ZTO->Bo59R$Q<^NpNk``!U8P5C_6g> zJRJybr4j{59{A6SH{Duz%jutLDg7A*N(O~u)*eduz0&e z{DPeHG)GRg`RTWtI?8q>Ar^{hv~~BuA-w|m>hWSfZ8lf8tNJ;2n}C5#osrxpaNbL@ zagEUb3O;@miLs;I$zkad(3Jx?u7eMrm$g1ax0|hGA}l3^FI#1w76O*y^W0OeH0Lj*;*wKxE6}7 ze$48@8&wZknWY<-V%eFp4+e~66xz$SwciG>jV#OS1T5RCTUeh^+%FoE1wqcCT;BFH zHd=t>W9&_5Wi`V=Lxp zs=P9!L4k-TGzfrqPI36^J+<<{*?fQJ5afJ+ixvXd{pdH{R$rk1h z9hCm0nTnzXrn=Jg5|wqs3=8A-h@{g!!_P`{JvR?ylm_JIoWp4QA8nNYG+wpt@nDMr z%{v4kw+uV4-9EI`@o$T(Qt76xJeSL<>v@Y6mHFAOO(^gXa1WA9;dK{k&IzLY?Q9Mf z6M}%#x9exER;4*7E5#)KX41py<7>#99*kC@cEW z+8thlv19vwARtsxUJ>xgIXUZNh&P4(bJQw~jP!DA(!c75bn9`WRM@S~&7(+7v(W-> zMG0PQ5_CUnI+^Wx(xF>1=wICP%&WCks=gXGl~(#LmJzqw4|2F9 z(}E7sd5m;1A_4{7Kug(+zNd3D3}Lcqp88gxY}+0{rcT14)06P&A@ z(bid3MHS_1m?kYIo#7D=#{c|``V*FJ=An5cy(pjks6aJq$852iWi>N+GLO#f9m`;X ztHGOGH7^@$l1N-oDgmsep$&E$qYycCu=tb0;Fws!RqoSLE{GJwKMtrye8q~(c<>(i z3`8PF+pVm*2C4b@Y&r#p#HMQSDq{8Sc)1iV3+mU&Q|@i7RC->nj6u~u1E>z+y`?nj z1hBZr*g()jv!-M*F7V^c_3@0YQZe#L&HG+T+@}Q<*Sf$2r?AGUWb^3_2b!ewGu`Ig z;fCF`(gzgjQn??rcReK}93j3^FSG!_o&%c&%u=|QqlHG12!nK$mwYtSN1Rl}L;_5T zZ=dLN*reBRE*KwyO+Eh_&(c^#?89{wj3K5B7E$K%GGd>Pm5*?rx1kUGAump#>Q z$6};tIsXynxYRE~gzmzF_=XcAewlNC+TcIV>~nmWL%Bnk^*wlh%@=p>$rrs5-#f>s z_Cde_;g8YR=;7qL9{12oszG_3q`CcJ_7fR}jsT0hh_hltFgr2WfcSYdv=1%J4x{u# zSy6g?^r+gK;C5!Rc$g9%`@F4|43laKf=U=qzg*@064nhWP0U=NdgXKO8!*0YX4Am7q;7EJ}*T_cKlw4mZR{#m^lS z<7Tj3mU@-s&hC)-ToqT;hM#pZiZ-k}u9BvyXl$PbFX4k0)2}LS4;cv?%&ohjES)SY zdE5KJlhfIc-1UGReEPSNC_svf z)uXIat*+l>0(vXM_f6aDBCmb**3JFpB^!T?Flprf6q=N0%pE z$ksgqJlKAhxF9lxMFHLALSN%9cj13O3yw@;Q%MzwAYh_Dsx(W14o*p7*^d8+glZchad)-C?auCRAFQC31{gC`?q-kbii~|C?sg`_z0lG zCKAFs)nBmiG-bQ{nHel#oKPh;pl*5WFq*N|&^d*1i%^J{{(Y)}uD06nfn~c`O2^Y0 z(Gvv6w>3|NZ{bIB`B533&c*;rIW{-#bNTQ zdHUE)^ve7sM{swuvWsP(AwWO{RBW)6v|fJ77hQLNIfe1{q2NX5 z*QH1;Z z`FlkVHTJW1NT}XOONf*c=Hsbx^Ut{^lmGWNr+P$y&3W8I@aWrryVW)+S4u)}q)5j4 zi%l(5Sc&w35&cWgwahVEcvcM1--%@HD`DX4@qNRiIsrAS*|f5zv@tHYtC9fFkUC(u z^8VXnUP=Y3rlcKi21d92Q0P3y9^1AOU6&#G=11EHxj-`mN5jrMe7%WOkEFoiVZQo} zj^JAm^*lB;${brHXhZzhZkbgg&$Io8$HcQeL~cb&PVrcEe_*6o8;<()SnnXU#0SX7 zB2!ouk2PYiyMNvogWrq7A-@CR$z%c6`_J|8r*eeQ#olvyiHN6Xk4~h1Tk9}jV0kOT z)||{}kqqx~$?LatKS(=DK+%u2HpP$w1f3eDLZ3^W=9?OnP-C4C^V zEC?R(|80%eDsR_Sa(!YYm?mS&`X=qo+xm*cPmGO_=6TKPueAHc{=u%J%2WT%Xe!-} zdyuC?Ndi#~zfU*Eixe?$XdFMw%evAnAZL&lVLw150uJ1-___CpP-oP zI5cn3`#DyA7|Z(d4f=yk9{n}9;|%G7{f__s{(YP6Jf;I36IN|(XKs1oFzjVMW#BT> zovYx@bRQODK71p#?O~C~iBAUDiodX7O4SsD1l-92wpDV+`qi;ic?@-O&2(a=y=II3+D^t8GNSB2rKixdrN-L2(vPLR@(< zmI(&>>5X-)gv%txRzjWmb;j1qNUGdemuMz}$5R>0GOu#mkju5V!P!cpzN03blVdF|ud(?_7o z%_g3!1P*rK+3eo2bBz>4x3yIcvy|X(5(y;)U*xQO zCAcuU-aG7Zy_NPrXyLNwQm(SA!o2U0N2EpJZ|3b~eYsq%R6@CxmId3!P1#+hK%A&O zQ{3Hy9A8?sgREfqg>ZXge zSNa*RxD-XsFPQ&w2IAi?92h>3`0MO>bh2lA`CD`L?6u|Y`FTqIP1vmJPqSmnJFJrc zBCc#VXp(JSP17XfPTml~E-ZrxM+wnAqeXx1E*kpIe(`WwcfUjO$T`|9eRu8RLC}Tk zDJoVxzJ>C1@^WYNbkfMJ`**wd74$YD;E&%~(6!sEmKEnLvAtssF9A-4%;OpZw6*>C znjoh}`=>6C#G$E(zLaov;MtyywJ0S9h5bE=mwS@5HMVG~8g#*O)m$7m@HacB1^VV3 zW#Ii7G?=kIF&?lQ-uF{x??Y}MFb_-T_Q$ip?Nh9^6)!?ugp}0Nu~2ptc<^6UD9ax*Bsau%&%r1-7f6)+C2P~-|}ab7~a^I z!}#Y{kck&u#SRafMe!MA=_@RZ`?m_)pXV>wRK9}PXYUF0q{oOJ#-u|OP85S{%j zvM-8Y7s<8;L8+Gbt(JzqKGV>gMe}P{q!n6n7zWj#z-QmyQ74i8a|%?Dk(H>MzL7u% zWYMavYbptcltzMmepxuaFy1>n%2r@!XCw!aXO$Y|WMC9IRCo?u^8-tCH$C$`m&f7! z?LTK_#mMRoyla8(|L3LGA?Dc!3SbWiu#i4&*Wd|-B?67ArkeSc9ti^psTvH4E@T=_ zQ44{5(%hyb*!y~VciTcp-F!m!y}?sBuBCJ9+NC9jvlwrc#XQ}gv(1TW1=?Uv zPop_=auYx7kv3W00mOBRqBAbi%e#VY69lARxu#ubQKI#RjJ}tg^dc9rO&T4^IFxB& z`zv}){OX8;Ij7glZ-4Qg^`=Q0MwdKE{m4&AdF6??@6ZL(`XaDR#`Z4;zC4m$hFY*+ zG4~?+CEYX84pN<$TUP6qGM;U&YfjfrFD`@9j-V>2;n2~X@tzky@fMEJj&=Xj5JBl> z71Ng0S$G8F(6F#}M%_BNE=U;laAAZx0hOqN?Cmm&U>>aBWTzK_k^-$?3dZCnCBZ8K zx@%W^V|l=0d=W>OWiVy*!ImQDJmNh8<7I(XtW~W4##=OGI|TK?O~*4{nZ_6>v}5+_ zi)fnyEc#D)yc%65&nHD$4uU&bo<4b?6tRBQB&_$4q~bv4gzKSI zETKQdwF(BUq0D3_xLZ{$Cyic zy?g?WFp8NTLy2)${=z)JSv{EuvjeWT?);zM`n0~!GE7$&_)+Fwa%5vaj<1q&{#-q& z`)A)?c|N7>eUb~dbP@DkA?c9u4T(4PC=&ezGKIvCdOs_=c6AsM;iRk~FTk3_<4EfYfOC6J=gxz!VQj8;W(`-KcrEczLal=kMeU&fFA zydwBZILX$*6Li7q5g;pT`}558K~Nz7Pe0*T-xuMhUit2*pVGEJ1#q9-irlRF0hBpQytoNLbU7;(@qe6xSiUA6)(VmgwH$rAWNdk1!`qQV@kcCb z_9+3nhyk4A<`SALMO~F@|_N;9)>w|2>YIM+jZ|I)Fut0N_`d;P>GKvgXM$QVY zRBk8DMPr-mQ>V={i0dIj4ihIvD7Pe;1g79t(i@Qn<2Qf^N^dta0QS&~hTEjz9c@^R zceiuIvFIEn``I2l3g6kv>bFX2w-IV6&Q)bFrDRrq+E1A9Li_3Io6CL!?b z0#LzBs<2cqk4@r_yv2WxQwCx}<&~G%klidPyp2A~%3)ofQL5mz3Qull{Cpo)5T+79ef5tSfYsOio83&RyGL@BtnRrx%>k-_5tSx z+i>+zi4fbVv*RMi9Sd_4nwmOVf0z#omB2gC7lmmF+;zGZN$)}`tG}$5!_k8r?WwOr zbrEw98_*E59ubqnbN*!L>44AsFQulY<6EMYwIU;vD!v~fMgU9akl(!LD)!55-s=fL zq`+{c)LWkf?WB`+5sT^(A<%YZ(k+N3FYXaIQ7b=pqy&f_QS6TJw+Ku3)vSd_k9)pz z5q^I^^cDf!xhu`2jyV^H9+|`{x{v(5ezoK0Eyc1-Y$Od)8*b77Wzzro2z-V}NWe=^ zH1rmWRv6bJoi(?{D}cYC>Y(*zbL;xfN=mJxru{a`LGQiNr1xMj0cIBQreBB=bwEr5 zJ|G4A0l|wqhGeBc#uwjNX-b)hoKrhtWDX0OZ^dfVxGb++<=kR*u4B0XSwq+|;(B2k$P!E|jNpz0mu@SR`PTiVn~;_%A0| z(b;kz;x;&kDrsetIs_}QZ#pB?MD`kC&I$6?jueE1u{e54%6*iqurMNP#`6iO!u9$T zmBYN>)(`)F{xDLMh(i$8TipdIF;Hv+X%yCUywhQ!tUY4Flqdc4aH!#RXGH7s))UHE z&Q7|ICH9iY(I$$p-q&n8G%z1No$zSNo`;QZH>Dbfa%J2NXv3y+@6!>grNFa3{`W>) z5T5nEv)5lH#-ND9t4*e;Hbkvtt(+Fw64myQG@+y9p`mo9X!|H~Rsf#lZdVp;Pm?Vw ztW$mWdx|`CF!(B!EWUch0oRmj>IIgKL!M*+suoGIrEQU^xZMRvbc=3gzYzw{`8RH0 zc*OKw?QjtwI<9;pOXwCL;L6dMuo{OIJx_5?x}*8^aBhC0B$mbx+7A5YaSAUOuq`kQ zyU>9zCi~kLM^Z&0@)G^Wc?Bxa(D3-sc&55{Xq+c<`NJSA1w(!s$-(qe>L|)e?G}s1 zfOwMoxovcE>%qrc)x{PmD{lR2pk)(Pj;&@mM=7Y3b30|ySRba^5}lOHtC-dcj&TQd;FcXks1%T1h&ZcVA zdDIUeP65c$Km~sK-oJM|Lt2j)X=GfocgM>hZF^I$J$c++L?aV6z5KefGnvM>N?9s5 zBB;SKoU5czYtu>JJ6s^L^2HqX1#0IbAdR?}h-ff2o{(zc>QSh`DVAG<%>yx1?Jj+4 zp|5Rm>ajG0jSmRE8vM8gZbD)7ORz|!(4L%xL`S!QN|*9?tQ4DbFa*dPX9u4LWiq0TDJz9kI*WG;*6=DcnK42yQaoFC>t%n7YH23&2 zQ+ty#=^9CeCx7?c%4-iEntG!?cB4FnMF0IDIn$&$8Iw+*F4GpzejGiJ2}8~(<>s1$Yd75b{g8`3O6DQv)T7|$glS{!s;`N3%CYq10i`KMG;cSv z@Fe-kgRb20?s|*a!{D%r80)O1u+kX$A*sBOP?a40`NgM4nECr%2k$= zqpc@k%4{9Mp;TT^bW!8@@-s0Cp)(_@@vZRwtij^&Yn#NIoY#3H*9Q)018IIdULRwM zy-$!OgJJX;`n0jn!g-{Mc>=)ldF?dnHl&jo(i4sk^V_W+=esv1szbQS&lN+k0;I2i zfs{*k2&goma5p2E0RZ3Z`t2-M_RRv{4si}D`z(rMV)R#zrI}!#dFHwNosw68Go{f+ zxm4PyJ10s#3KS6aA1Oy$;b{|yp@o~9r^2RJAC_Uap+qM3)p79|ynE1{(SjXtVMBph z8kFFJhfanJp7YR@*PM8l!eDDj6l76TSs?hjZzc*Y@L<_sIrr<+dmSfSkwLq9-3wO2 ztqoE=^4<0+OUz#~jj?CJ;?WZUR^G8C>2K1K)I-UfOLW3jB_0W|SWeJ{HE7N2n(oTB zfU$h;#s6$8_lb-at=W$FsFLy-{>vmYp#2rTghg1nbsysVyn@!xjdC5a5W8OOum7B1df-E969gM{e{Zr&|E~xJi`(d(U%!_ zH!j~N3H!nFtWt=Gue9DF*Zml)@;8XU3u}Y16QG<$nK@BR^~77VQhNY_%56vJtS7`% znbdHPdA@@u5pyvq&RRM(fB(bxIm)MqOr}OI@e&W|oQ+tU8uk6>ojL z@|v&!1N{Z4Ft4rC6ZcvvH^8gx5Fm2ujYl}RC4{!+_Mah*!l&=9{kZ*=p^neSuJ;sI zCo|xua7Xa(u(?l9W0Tl7iC@jNeoV|~JfJsKwpQ8$870f-DUA3$nNKwaC z8{ZUGPLQG=DiLaReZ8OUc5V>b;`oR`+rQ_Ja}p6rFu~#X6x90i<|J&?RN{WOkGc zC`qx_Vk_0NmCQY2g6%OXi6YVmqHx(ssbZ1bnZ?S?1%W>9mI=_8*FX9d?xnSpY~AyE zbyi<1U;g;=I#3KA?FKRcEDyp)3O_r5z$i%@+wqm`r!(O5rvvv74E1V}nY#>e>*vz? zq`|`cwuj5fp_t%OC$h=dn9vMO73LeUMDml5?>jvp_s3IKHRX~;!S7>7$_uVtNn)^f zI3;O0De+J!^znPsBe&>WLu+&kj(TH4L-!)U;JPf8;F&Sw&w1;oN_@y8Gq8LAtH4U~ zZJ8cY<*7&i?o8fl08fASi3!m45q(@@@hruTkaIz1a0ZN(T=L&yL;#K9 z7JqORLrHvBiG;3iPLEspm z$BGpI^jHSEz=t2VOWh@8Bo@MYvL`5njQzuaqRjbA}z!S>|hPm~N z9|Vbo@2Nz`;krZUUfU;9SuX_h$WO{g>Qf;QsX>Wo-7ax)w>l0!m6y4_6S*5afxEY| z5m|6BHT9ZDN##-Hoe&e&Y%~hTK3m^L=yzG)$VwOv%YnZ@#cQSjLouhAC9(U3%VY-G z_~oOSMGwXiY};ACfjj#bHu8Eb+~A^-z_WBbRd6Z2mnt?IyNj=@xBaM4PIWt`O0(Uo zb0oj+;r1qBIiBXr9iIRFSPH;{@6HQNwXrD2d_>QL3x-c|?npn^!}tR+LJrWu42C1j z$*d4Mbjz7$P-|7hXVB~G#CBv2JKd!0$-W7>bxo~mL!$A^$3>`m&x*JNz}+j$u^#f- zZgQ&l$_{SIJ>$!4CVw6Q8Da9<0bIPSytYKP_ylZ(u|kfJUY+T)ez$vb)g6XW9PA!! zPt(TLz<((#NyQ1Iwr}Nl6ar}QguH6Lvu=|Hu)G~07(i}9oW-j0j1;#+FN(^~nLJC_ zBem#WWWp9-BvAT6PKVx-CPBU`j4-?|4EuaBA+0){&SNzKR z#fuR0yt2S2U>fZBu}+YzT6#5%C!n18E({{!a)6lQ?}qR{LCMlRL#AZY&5%02@FmFh zc{*CG@s5IyqJY@i+IIZCd`wKj7D*OYr1LN-Ak4FRNdD(fxonEGx~d)YI8;3npte)_ z%ERK?qa%e%(d`2pfx<7iM@i~{5}} z%6X`bW9Tk(=`)b}MrmQanF1h1b#bH8RU(+285#L(w%ron7JD{=%lty6cYPKZ9IG52 z6^R3zLd;l=i#I2kq_-x0u47Sd@{G(4vk7bz6qL?;^BgsZ#XOSsiUyjArX zv#ApE3kZbX9&D6QPQcz10xo6AW0QVc9fTcyI(7=f6~JvdBLo03CV>7(6$whf5Iv<< zX606p+&~hFp>_ft0lA1{f@%&H^3!_z}?^m zYlnlY!SdZk*WOMP7R?QE_AAIL3kDLq=oP?*#lPF@uOd67cWbwR_CUNw&+xelT&=oC z|I*f+oA2e3TP4~p%8I<`Uh?)pd={`5fr;Z{_iY`XTI@I6b@Mxhk~lH;%H1aisLW~bB-y6;4H_-~0lsrfKopvn-cO%!`w-Gfd3l|a;DFps%W z4Uop>knCyT6LL<lPM$US#)|Ub-!1Cto-R_ZaD6hmOC`fxK$Ma`QXPKu7UvH zN(}jMK{9E?O+M}k_&VhExF7Lo$y;A@s!r6lxusC*k`h0{z!Vk&5;jI}yRcr`z^p^H zLv81mx#u#xXV{m2tktQ$Sz>IurlxmiQ?|C-aUsxr#}?3I-Q`r7bQ}b{${et7{e?|F z?b1^*QMsDYGZSU!jQcplQpLIs?Z#>N6F%*T8PTQKE(Kys=(C3fvPOHtjB$om@s>Yx zwfejUa(l>Cv;DfK4nJOrh)L&H*TBue0zU_gdUBjrAVWMWsWGwk7GUb=8TaE54f&;! zDZ3E!1YZ$r$@26N)!9G3|!aGk+! zDy%A-@=7~|Zg|Knf>}J~6&zf**?#dDj`~JF-HyJq=X&ZHLgP_uMf7 zJaW0+*Rp6-E}(e20h)W@t_Cbx3ofs7#@hs1J6mpR z(Tws5Tn#TeaVu4~awGHx_CF@j&wm`qfZwpKAo6>)RW(#pE`Z4KyC<{of$rG3aZ*BM zIJHNLusKNz7Qe*!jTXBHvD0Z6$D%r~-;2wb$(Z;idHpa|bhhQ5GeM_%HQ?PI&__Cx zcU@1=rVh9Zw~#dgs2i)S6*COvWWO}=lYNpsCpZ=T%lg5)lxJ&{?<>o_DDl&PLmN`3 zSryM4?k8OtV|n9AoUm-J#Zk3Kk@PA<(9@VoZ?2SFp~9Oq7h)gkQ8f;a*fgC{RZM<0 z>!&lnJ%rfQ{7AZbrt-JxCPiwb?&>UY{ME;<{>S&AKkp7mq^ye!?9bdqGQ%d9O{wD$tU-M2##1 z0w?mHh$8n()=TNv)2*`JR?t?r&-nb1W+sPlVHU4R=vgdke~#96_|r<;Mas@2TI-Ds z65X+)#X)RI!EDwdRBGDL#h2Ve zI0nONS-Cn%KCOnM;N7e#U<%Z(!P4aT8&IvwBLyHxdTZ_XbcKH2C5xGVc;V$cN)i37 z8#@mRwq|ZR11umC?`OSE>pN1Gg969VJk^}*G~BGT)HKED-pUSPpX^ZmDrf#i?i#T4 zv*zFg5^2-1+Bn@W4Y&S`C&2=-L94z)IoT}5zN;nC$BkPIE`rAmg!c;A-zlgOT6KqbZwFl(v3-YLG z9G7m)y6{#?sm7 zH)Br;+)M!9*H@k@Qs;N`?`=B>&o%M>QK;VKB^fKB^4VY3BR;lT`$sKvc@O1~`k%i) zzT{+cga{=p|IA<&uNhNn4IvO%mkstgu#r1cAl;1$OX2((zS~OKd`*`zP8nB>Z0>0I z<%qWN%-r+7muvF&p@az~-XWCM$d^NpYMvi^U6T)4H1T8w`5 z%V1X@y9-}We#}+bC*EOpH}*?DT8T3L%l8c-w!W_7R2;==LHWsV%TL$jpm7`HoUfBz zW(bSS_QIOzCHEOTH$3{nI4Y+95SH<&Co{_`3Z_10tdMxReh1_Q}#>W4lp#RW>mLCj?H2MOtMh|pKuaDN-3 zp05M6(kpm=_0zcdd-228d+0m9?{2}QR^$n9$P9qiRdS%V>Z^zKC>4WA(L^@&bIU&j zKenLXKDEF009UWGd#V_F+F5(r%h-C@gMY4x2#E;s3yJds%My~55t5b>7v&Wak`WTB kchYwLe;#mgwR3#x`~QESSK@dCJaA22MMoK>WEJwi00+00bN~PV diff --git a/doc/ch-datastream-api/img/flatmap.svg b/doc/ch-datastream-api/img/flatmap.svg new file mode 100644 index 0000000..99c30cc --- /dev/null +++ b/doc/ch-datastream-api/img/flatmap.svg @@ -0,0 +1,4 @@ + + + +
算子
算子
IN
IN
OUT
OUT
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-datastream-api/img/type-inference-process.png b/doc/ch-datastream-api/img/type-inference-process.png deleted file mode 100644 index 0cd689631236cb76110d33191624e9d42f821225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26911 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�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 NRnt|ieEj_Ne*q)VvRMEC diff --git a/doc/ch-datastream-api/img/type-inference-process.svg b/doc/ch-datastream-api/img/type-inference-process.svg new file mode 100644 index 0000000..12c06ca --- /dev/null +++ b/doc/ch-datastream-api/img/type-inference-process.svg @@ -0,0 +1,4 @@ + + + +
用户定义的数据类型
例如 String
用户定义的数据类型...
TypeInformation
例如 Types.STRING
TypeInformation...
TypeSerializer
例如 StringSerializer
TypeSerializer...
内存块
内存块
推断
推断
定义
定义
序列化
反序列化
序列化反序列化...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-datastream-api/skeleton.md b/doc/ch-datastream-api/skeleton.md index 8cd025e..6d1b87c 100644 --- a/doc/ch-datastream-api/skeleton.md +++ b/doc/ch-datastream-api/skeleton.md @@ -1,26 +1,26 @@ (skeleton)= -# Flink程序的骨架结构 +# Flink 程序的骨架结构 :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -在进行详细的API介绍前,我们先回顾一下WordCount的案例,通过WordCount的代码结构,读者可以了解一个Flink程序的骨架结构。 +在进行详细的 API 介绍前,我们先回顾一下 WordCount 的案例,通过 WordCount 的代码结构,读者可以了解一个 Flink 程序的骨架结构。 -我们知道,一个Java或Scala的程序入口一般是一个静态(static)的main函数。在main函数中,还需要定义下面几个核心步骤: +我们知道,一个 Java 或 Scala 的程序入口一般是一个静态(static)的 main 函数。在 main 函数中,还需要定义下面几个核心步骤: 1. 初始化运行环境。 -2. 读取一到多个数据源Source。 +2. 读取一到多个数据源 Source。 -3. 根据业务逻辑对数据流进行Transformation转换。 +3. 根据业务逻辑对数据流进行 Transformation 转换。 -4. 将结果输出到Sink。 +4. 将结果输出到 Sink。 5. 调用作业执行函数。 @@ -28,67 +28,74 @@ ## 设置执行环境 -一个Flink作业必须依赖一个执行环境: +一个 Flink 作业必须依赖一个执行环境: ```java -// 创建Flink执行环境 +// 创建 Flink 执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); ``` -这行代码可以获取一个Flink流处理执行环境。Flink一般运行在一个集群上,执行环境是Flink程序运行的上下文,它提供了一系列作业与集群交互的方法,比如作业如何与外部世界交互。当调用`getExecutionEnvironment()`方法时,假如我们是在一个集群上提交作业,则返回集群的上下文,假如我们是在本地执行,则返回本地的上下文。本例中我们是进行流处理,在批处理场景则要获取DataSet API中批处理执行环境。 +这行代码可以获取一个 Flink 流处理执行环境。Flink 一般运行在一个集群上,执行环境是 Flink 程序运行的上下文,它提供了一系列作业与集群交互的方法,比如作业如何与外部世界交互。当调用 `getExecutionEnvironment()` 方法时,假如我们是在一个集群上提交作业,则返回集群的上下文,假如我们是在本地执行,则返回本地的上下文。本例中我们是进行流处理,在批处理场景则要获取 DataSet API 中批处理执行环境。 :::info -本例中我们是进行流处理,在批处理场景则要获取DataSet API中批处理执行环境。流处理和批处理的执行环境不同,流处理的执行环境名为`org.apache.flink.streaming.api.environment.StreamExecutionEnvironment`,批处理的执行环境名为`org.apache.flink.api.java.ExecutionEnvironment`。 +本例中我们是进行流处理,在批处理场景则要获取 DataSet API 中批处理执行环境。流处理和批处理的执行环境不同,流处理的执行环境名为 `org.apache.flink.streaming.api.environment.StreamExecutionEnvironment`,批处理的执行环境名为 `org.apache.flink.api.java.ExecutionEnvironment`。 ::: -Scala和Java所需要引用的包也不相同,Scala需要调用`org.apache.flink.streaming.api.scala.StreamExecutionEnvironment`和`org.apache.flink.api.scala.ExecutionEnvironment`。 +Scala 和 Java 所需要引用的包也不相同,Scala 需要调用 `org.apache.flink.streaming.api.scala.StreamExecutionEnvironment` 和 `org.apache.flink.api.scala.ExecutionEnvironment`。 -下图是批处理和流处理两种场景下,Java和Scala两种编程语言所需要引用的包。刚刚接触Flink的朋友很可能因为错误地引用导致出现莫名其妙的错误,一定要注意是否引用正确的包。 +{numref}`fig-batch-streaming-api-import` 是批处理和流处理两种场景下,Java 和 Scala 两种编程语言所需要引用的包。刚刚接触 Flink 的朋友很可能因为错误地引用导致出现莫名其妙的错误,一定要注意是否引用正确的包。 -![流处理和批处理不同场景下,相关API的引用](./img/batch-streaming-api-import.png) +```{figure} ./img/batch-streaming-api-import.png +--- +name: fig-batch-streaming-api-import +width: 80% +align: center +--- +流处理和批处理不同场景下,相关 API 的引用 +``` -另外,使用Scala API时,应该按照下面的方式引用,否则会出现一些问题。 +另外,使用 Scala API 时,应该按照下面的方式引用,否则会出现一些问题。 ```scala import org.apache.flink.streaming.api.scala._ ``` -Scala中的`_`就像Java中的`*`,是一种通配符。在这里使用`_`会引用`org.apache.flink.streaming.api.scala`下面的所有内容。 +Scala 中的 `_` 就像 Java 中的 `*`,是一种通配符。在这里使用 `_` 会引用 `org.apache.flink.streaming.api.scala` 下面的所有内容。 -回到执行环境上,我们可以通过执行环境做很多设置。比如,`env.setParallelism(2)`告知执行环境整个作业的并行度为2;`env.disableOperatorChaining()`关闭算子链功能。 +回到执行环境上,我们可以通过执行环境做很多设置。比如,`env.setParallelism(2)` 告知执行环境整个作业的并行度为 2;`env.disableOperatorChaining()` 关闭算子链功能。 -使用下面的设置可以创建一个基于本地的执行环境,这样我们使用IntelliJ Idea运行程序时,可以直接打开浏览器进入Flink Web UI查看运行的任务,本地的调试。 +使用下面的设置可以创建一个基于本地的执行环境,这样我们使用 IntelliJ Idea 运行程序时,可以直接打开浏览器进入 Flink Web UI 查看运行的任务,本地的调试。 ```java Configuration conf = new Configuration(); -// 访问http://localhost:8082 可以看到Flink Web UI +// 访问 http://localhost:8082 可以看到 Flink Web UI conf.setInteger(RestOptions.PORT, 8082); -// 创建本地执行环境,并行度为2 +// 创建本地执行环境,并行度为 2 StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(2, conf); ``` -此外,我们还可以在执行环境中设置一些时间属性等,配置Checkpoint等,我们将在后续章节中介绍这些功能。总之,执行环境是开发者和Flink交互的一个重要入口。 +此外,我们还可以在执行环境中设置一些时间属性等,配置 Checkpoint 等,我们将在后续章节中介绍这些功能。总之,执行环境是开发者和 Flink 交互的一个重要入口。 ## 读取数据源 -接着我们需要使用执行环境提供的方法读取数据源,读取数据源的部分统称为Source。数据源一般是消息队列或文件,我们也可以根据业务需求重写数据源,比如定时爬取网络中某处的数据。在本例中,我们使用`DataStream stream = env.addSource(consumer);`来读取数据源,其中`consumer`是一个Kafka消费者,我们消费Kafka中的数据作为Flink的输入数据。绝大多数流处理实战场景可能都是消费其他消息队列作为Source。 +接着我们需要使用执行环境提供的方法读取数据源,读取数据源的部分统称为 Source。数据源一般是消息队列或文件,我们也可以根据业务需求重写数据源,比如定时爬取网络中某处的数据。在本例中,我们使用 `DataStream stream = env.addSource(consumer);` 来读取数据源,其中 `consumer` 是一个 Kafka 消费者,我们消费 Kafka 中的数据作为 Flink 的输入数据。绝大多数流处理实战场景可能都是消费其他消息队列作为 Source。 -我们将在第七章介绍如何使用各类Source。 +我们将在第七章介绍如何使用各类 Source。 ## 进行转换操作 -此时,我们已经获取了一个文本数据流,接下来我们就可以在数据流上进行有状态的计算了。我们一般调用Flink提供的各类算子,使用链式调用的方式,对一个数据流进行操作。经过各算子的处理,`DataStream`可能被转换为`KeyedStream`、`WindowedStream`、`JoinedStream`等不同的数据流结构。相比Spark RDD的数据结构,Flink的数据流结构确实更加复杂。 +此时,我们已经获取了一个文本数据流,接下来我们就可以在数据流上进行有状态的计算了。我们一般调用 Flink 提供的各类算子,使用链式调用的方式,对一个数据流进行操作。经过各算子的处理,`DataStream` 可能被转换为 `KeyedStream`、`WindowedStream`、`JoinedStream` 等不同的数据流结构。相比 Spark RDD 的数据结构,Flink 的数据流结构确实更加复杂。 -本例中,我们先对一行文本进行分词,形成`(word, 1)`这样的二元组,然后以单词为Key进行分组,并开启一个时间窗口,统计该窗口中某个单词出现的次数。在这个过程中,涉及到对数据流的分组、窗口和聚合操作。其中,窗口相关操作涉及到如何将数据流中的元素划分到不同的窗口,聚合操作涉及到使用一个状态来记录单词出现的次数,不断维护更新状态来对数据进行实时处理。本章我们重点介绍一些DataStream API,第五章将介绍时间上的操作,第六章将介绍如何使用状态以及如何做失败恢复。 +本例中,我们先对一行文本进行分词,形成 `(word, 1)` 这样的二元组,然后以单词为 Key 进行分组,并开启一个时间窗口,统计该窗口中某个单词出现的次数。在这个过程中,涉及到对数据流的分组、窗口和聚合操作。其中,窗口相关操作涉及到如何将数据流中的元素划分到不同的窗口,聚合操作涉及到使用一个状态来记录单词出现的次数,不断维护更新状态来对数据进行实时处理。本章我们重点介绍一些 DataStream API,第五章将介绍时间上的操作,第六章将介绍如何使用状态以及如何做失败恢复。 ## 结果输出 -然后我们需要将前面的计算结果输出到外部系统。目的地可能是一个消息队列、文件系统或数据库,或其他自定义的输出方式。输出结果的部分统称为Sink。 +然后我们需要将前面的计算结果输出到外部系统。目的地可能是一个消息队列、文件系统或数据库,或其他自定义的输出方式。输出结果的部分统称为 Sink。 -本例中,我们的结果是窗口内的词频统计,它是一个`DataStream>`的数据结构。我们调用`print`函数将这个数据流打印到标准输出(Standard Output)上。`print`主要是为调试使用的,在实战场景中,计算结果会输出到一个外部的数据库或下一个流处理作业。 +本例中,我们的结果是窗口内的词频统计,它是一个 `DataStream>` 的数据结构。我们调用 `print` 函数将这个数据流打印到标准输出(Standard Output)上。`print` 主要是为调试使用的,在实战场景中,计算结果会输出到一个外部的数据库或下一个流处理作业。 ## 执行 -当定义好程序的Source、Transformation和Sink的业务逻辑后,程序并不会立即执行这些计算,我们还需要调用执行环境`execute()`方法来明确通知Flink去执行。Flink是延迟执行(Lazy Evaluation)的,即当程序明确调用`execute()`方法时,Flink才会将数据流图转化为一个`JobGraph`,提交给JobManager,JobManager根据当前的执行环境来执行这个作业。如果没有`execute()`方法,我们无法得到输出结果。 +当定义好程序的 Source、Transformation 和 Sink 的业务逻辑后,程序并不会立即执行这些计算,我们还需要调用执行环境 `execute()` 方法来明确通知 Flink 去执行。Flink 是延迟执行(Lazy Evaluation)的,即当程序明确调用 `execute()` 方法时,Flink 才会将数据流图转化为一个 `JobGraph`,提交给 JobManager,JobManager 根据当前的执行环境来执行这个作业。如果没有 `execute()` 方法,我们无法得到输出结果。 -综上,一个Flink程序的核心业务逻辑主要包括:初始化执行环境、进行Source、Transformation和Sink操作,最后要调用执行环境的`execute()`方法。 \ No newline at end of file +综上,一个 Flink 程序的核心业务逻辑主要包括:初始化执行环境、进行 Source、Transformation 和 Sink 操作,最后要调用执行环境的 `execute()` 方法。 \ No newline at end of file diff --git a/doc/ch-datastream-api/transformations.md b/doc/ch-datastream-api/transformations.md index 5db9e61..df1e519 100644 --- a/doc/ch-datastream-api/transformations.md +++ b/doc/ch-datastream-api/transformations.md @@ -3,20 +3,27 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -Flink的Transformation转换主要包括四种:单数据流基本转换、基于Key的分组转换、多数据流转换和数据重分布转换。Transformation各算子可以对Flink数据流进行处理和转化,多个Transformation算子共同组成一个数据流图,DataStream Transformation是Flink流处理非常核心的API。下图展示了数据流上的几类操作,本章主要介绍四种Transformation:单数据流转换、基于Key的分组转换、多数据流转换和数据重分布转换,时间窗口部分将在第五章介绍。 +Flink 的 Transformation 转换主要包括四种:单数据流基本转换、基于 Key 的分组转换、多数据流转换和数据重分布转换。Transformation 各算子可以对 Flink 数据流进行处理和转化,多个 Transformation 算子共同组成一个数据流图,DataStream Transformation 是 Flink 流处理非常核心的 API。下图展示了数据流上的几类操作,本章主要介绍四种 Transformation:单数据流转换、基于 Key 的分组转换、多数据流转换和数据重分布转换,时间窗口部分将在第五章介绍。 -![DataStream上的Transformaton操作分类](./img/transformations.png) +```{figure} ./img/transformations.png +--- +name: fig-transformations +width: 80% +align: center +--- +DataStream 上的 Transformation 操作分类 +``` -Flink的Transformation是对数据流进行操作,其中数据流涉及到的最常用数据结构是`DataStream`,`DataStream`由多个相同的元素组成,每个元素是一个单独的事件。在Java中,我们使用泛型`DataStream`来定义这种组成关系,在Scala中,这种泛型对应的数据结构为`DataStream[T]`,`T`是数据流中每个元素的数据类型。在WordCount的例子中,数据流中每个元素的类型是字符串`String`,整个数据流的数据类型为`DataStream`。 +Flink 的 Transformation 是对数据流进行操作,其中数据流涉及到的最常用数据结构是 `DataStream`,`DataStream` 由多个相同的元素组成,每个元素是一个单独的事件。在 Java 中,我们使用泛型 `DataStream` 来定义这种组成关系,在 Scala 中,这种泛型对应的数据结构为 `DataStream[T]`,`T` 是数据流中每个元素的数据类型。在 WordCount 的例子中,数据流中每个元素的类型是字符串 `String`,整个数据流的数据类型为 `DataStream`。 -在使用这些算子时,需要在算子上进行用户自定义操作,一般使用Lambda表达式或者继承类并重写函数两种方式完成这个用户自定义的过程。接下来,我们将对Flink Transformation中各算子进行详细介绍,并使用大量例子展示具体使用方法。 +在使用这些算子时,需要在算子上进行用户自定义操作,一般使用 Lambda 表达式或者继承类并重写函数两种方式完成这个用户自定义的过程。接下来,我们将对 Flink Transformation 中各算子进行详细介绍,并使用大量例子展示具体使用方法。 ## 单数据流转换 @@ -24,18 +31,25 @@ Flink的Transformation是对数据流进行操作,其中数据流涉及到的 ### map -`map`算子对一个`DataStream`中的每个元素使用用户自定义的Mapper函数进行处理,每个输入元素对应一个输出元素,最终整个数据流被转换成一个新的`DataStream`。输出的数据流`DataStream`类型可能和输入的数据流`DataStream`不同。 +`map` 算子对一个 `DataStream` 中的每个元素使用用户自定义的 Mapper 函数进行处理,每个输入元素对应一个输出元素,最终整个数据流被转换成一个新的 `DataStream`。输出的数据流 `DataStream` 类型可能和输入的数据流 `DataStream` 不同。 -![map](./img/map.png) +```{figure} ./img/map.png +--- +name: fig-map-transformation +width: 80% +align: center +--- +Map Transformation 操作示例 +``` -我们可以重写`MapFunction`或`RichMapFunction`来自定义map函数,`MapFunction`在源码的定义为:`MapFunction`,其内部有一个`map`虚函数,我们需要对这个虚函数重写。下面的代码重写了`MapFunction`中的`map`函数,将输入结果乘以2,转化为字符串后输出。 +我们可以重写 `MapFunction` 或 `RichMapFunction` 来自定义 map 函数,`MapFunction` 在源码的定义为:`MapFunction`,其内部有一个 `map` 虚函数,我们需要对这个虚函数重写。下面的代码重写了 `MapFunction` 中的 `map` 函数,将输入结果乘以 2,转化为字符串后输出。 ```java // 函数式接口类 -// T为输入类型,O为输出类型 +// T 为输入类型,O 为输出类型 @FunctionalInterface public interface MapFunction extends Function, Serializable { - // 调用这个API就是继承并实现这个虚函数 + // 调用这个 API 就是继承并实现这个虚函数 O map(T value) throws Exception; } ``` @@ -43,7 +57,7 @@ public interface MapFunction extends Function, Serializable { 第二章中我们曾介绍过,对于这样一个虚函数,可以继承接口类并实现虚函数: ```java -// 继承并实现MapFunction +// 继承并实现 MapFunction // 第一个泛型是输入类型,第二个泛型是输出类型 public static class DoubleMapFunction implements MapFunction { @Override @@ -59,7 +73,7 @@ public static class DoubleMapFunction implements MapFunction { DataStream functionDataStream = dataStream.map(new DoubleMapFunction()); ``` -这段的代码清单重写了`MapFunction`中的`map`函数,将输入结果乘以2,转化为字符串后输出。我们也可以不用显式定义`DoubleMapFunction`这个类,而是像下面的代码一样使用匿名类: +这段的代码清单重写了 `MapFunction` 中的 `map` 函数,将输入结果乘以 2,转化为字符串后输出。我们也可以不用显式定义 `DoubleMapFunction` 这个类,而是像下面的代码一样使用匿名类: ```java // 匿名类 @@ -71,50 +85,57 @@ DataStream anonymousDataStream = dataStream.map(new MapFunction lambdaStream = dataStream .map(input -> "lambda input : " + input + ", output : " + (input * 2)); ``` -Scala的API相对更加灵活,可以使用下划线来构造Lambda表达式: +Scala 的 API 相对更加灵活,可以使用下划线来构造 Lambda 表达式: ```scala -// 使用 _ 构造Lambda表达式 -val lambda2 = dataStream.map { _.toDouble * 2 } +// 使用 _ 构造 Lambda 表达式 +val lambda2 = dataStream.map {_.toDouble * 2} ``` :::info -使用Scala时,Lambda表达式可以可以放在圆括号()中,也可以使用花括号{}中。使用Java时,只能使用圆括号。 +使用 Scala 时,Lambda 表达式可以可以放在圆括号 ()中,也可以使用花括号 {} 中。使用 Java 时,只能使用圆括号。 ::: -对上面的几种方式比较可见,Lambda表达式更为简洁。重写函数的方式代码更为臃肿,但定义更清晰。 +对上面的几种方式比较可见,Lambda 表达式更为简洁。重写函数的方式代码更为臃肿,但定义更清晰。 -此外,`RichMapFunction`是一种RichFunction,它除了`MapFunction`的基础功能外,还提供了一系列其他方法,包括`open`、`close`、`getRuntimeContext`和`setRuntimeContext`等虚函数方法,重写这些方法可以创建状态数据、对数据进行广播,获取累加器和计数器等,这部分内容将在后面介绍。 +此外,`RichMapFunction` 是一种 RichFunction,它除了 `MapFunction` 的基础功能外,还提供了一系列其他方法,包括 `open`、`close`、`getRuntimeContext` 和 `setRuntimeContext` 等虚函数方法,重写这些方法可以创建状态数据、对数据进行广播,获取累加器和计数器等,这部分内容将在后面介绍。 ### filter -`filter`算子对每个元素进行过滤,过滤的过程使用一个Filter函数进行逻辑判断。对于输入的每个元素,如果filter函数返回True,则保留,如果返回False,则丢弃,如下图所示。 +`filter` 算子对每个元素进行过滤,过滤的过程使用一个 Filter 函数进行逻辑判断。对于输入的每个元素,如果 filter 函数返回 True,则保留,如果返回 False,则丢弃,如 {numref}`fig-filter-transformation` 所示。 -![filter](./img/filter.png) +```{figure} ./img/filter.svg +--- +name: fig-filter-transformation +width: 80% +align: center +--- +Filter Transformation 操作示例 +``` -我们可以使用Lambda表达式过滤掉小于等于0的元素: +我们可以使用 Lambda 表达式过滤掉小于等于 0 的元素: ```java DataStream dataStream = senv.fromElements(1, 2, -3, 0, 5, -9, 8); -// 使用 -> 构造Lambda表达式 -DataStream lambda = dataStream.filter ( input -> input > 0 ); +// 使用 -> 构造 Lambda 表达式 +DataStream lambda = dataStream.filter (input -> input > 0); ``` -也可以继承`FilterFunction`或`RichFilterFunction`,然后重写`filter`方法,我们还可以将参数传递给继承后的类。如下面的代码所示,`MyFilterFunction`增加一个构造函数参数`limit`,并在`filter`方法中使用这个参数。 +也可以继承 `FilterFunction` 或 `RichFilterFunction`,然后重写 `filter` 方法,我们还可以将参数传递给继承后的类。如下面的代码所示,`MyFilterFunction` 增加一个构造函数参数 `limit`,并在 `filter` 方法中使用这个参数。 ```java public static class MyFilterFunction extends RichFilterFunction { - // limit参数可以从外部传入 + // limit 参数可以从外部传入 private Integer limit; public MyFilterFunction(Integer limit) { @@ -127,30 +148,37 @@ public static class MyFilterFunction extends RichFilterFunction { } } -// 继承RichFilterFunction +// 继承 RichFilterFunction DataStream richFunctionDataStream = dataStream.filter(new MyFilterFunction(2)); ``` ### flatMap -`flatMap`算子和`map`有些相似,输入都是数据流中的每个元素,与之不同的是,`flatMap`的输出可以是零个、一个或多个元素,当输出元素是一个列表时,`flatMap`会将列表展平。如下图所示,输入是包含圆形或正方形的列表,`flatMap`过滤掉圆形,正方形列表被展平,以单个元素的形式输出。 +`flatMap` 算子和 `map` 有些相似,输入都是数据流中的每个元素,与之不同的是,`flatMap` 的输出可以是零个、一个或多个元素,当输出元素是一个列表时,`flatMap` 会将列表展平。如下图所示,输入是包含圆形或正方形的列表,`flatMap` 过滤掉圆形,正方形列表被展平,以单个元素的形式输出。 -![flatMap](./img/flatmap.png) +```{figure} ./img/flatmap.svg +--- +name: fig-flatmap-transformation +width: 80% +align: center +--- +FlatMap Transformation 操作示例 +``` -我们可以用切水果的例子来理解map和flatMap的区别。map会对每个输入元素生成一个对应的输出元素: +我们可以用切水果的例子来理解 map 和 flatMap 的区别。map 会对每个输入元素生成一个对应的输出元素: ``` {苹果,梨,香蕉}.map(去皮) => {去皮苹果, 去皮梨,去皮香蕉} ``` -`flatMap`先对每个元素进行相应的操作,生成一个相应的集合,再将集合展平: +`flatMap` 先对每个元素进行相应的操作,生成一个相应的集合,再将集合展平: ``` {苹果,梨,香蕉}.flMap(切碎) => -{[苹果碎片1, 苹果碎片2], [梨碎片1,梨碎片2, 梨碎片3],[香蕉碎片1]} +{[苹果碎片 1, 苹果碎片 2], [梨碎片 1,梨碎片 2, 梨碎片 3],[香蕉碎片 1]} => -{苹果碎片1, 苹果碎片2, 梨碎片1,梨碎片2, 梨碎片3,香蕉碎片1} +{苹果碎片 1, 苹果碎片 2, 梨碎片 1,梨碎片 2, 梨碎片 3,香蕉碎片 1} ``` 下面的代码对字符串进行切词处理: @@ -159,8 +187,8 @@ DataStream richFunctionDataStream = dataStream.filter(new MyFilterFunct DataStream dataStream = senv.fromElements("Hello World", "Hello this is Flink"); -// split函数的输入为 "Hello World" 输出为 "Hello" 和 "World" 组成的列表 ["Hello", "World"] -// flatMap将列表中每个元素提取出来 +// split 函数的输入为 "Hello World" 输出为 "Hello" 和 "World" 组成的列表 ["Hello", "World"] +// flatMap 将列表中每个元素提取出来 // 最后输出为 ["Hello", "World", "Hello", "this", "is", "Flink"] DataStream words = dataStream.flatMap ( (String input, Collector collector) -> { @@ -170,10 +198,10 @@ DataStream words = dataStream.flatMap ( }).returns(Types.STRING); ``` -因为`flatMap`可以输出零到多个元素,我们可以将其看做是`map`和`filter`更一般的形式。如果我们只想对长度大于15的句子进行处理,可以先在程序判断处理,再输出,如下所示。 +因为 `flatMap` 可以输出零到多个元素,我们可以将其看做是 `map` 和 `filter` 更一般的形式。如果我们只想对长度大于 15 的句子进行处理,可以先在程序判断处理,再输出,如下所示。 ```java -// 只对字符串数量大于15的句子进行处理 +// 只对字符串数量大于 15 的句子进行处理 // 使用匿名函数 DataStream longSentenceWords = dataStream.flatMap(new FlatMapFunction() { @Override @@ -187,10 +215,10 @@ DataStream longSentenceWords = dataStream.flatMap(new FlatMapFunction input.split(" ") ) val words2 = dataStream.map { _.split(" ") } ``` -## 基于Key的分组转换 +## 基于 Key 的分组转换 -对数据分组主要是为了进行后续的聚合操作,即对同组数据进行聚合分析。如下图所示,`keyBy`会将一个`DataStream`转化为一个`KeyedStream`,聚合操作会将`KeyedStream`转化为`DataStream`。如果聚合前每个元素数据类型是T,聚合后的数据类型仍为T。 +对数据分组主要是为了进行后续的聚合操作,即对同组数据进行聚合分析。如下图所示,`keyBy` 会将一个 `DataStream` 转化为一个 `KeyedStream`,聚合操作会将 `KeyedStream` 转化为 `DataStream`。如果聚合前每个元素数据类型是 T,聚合后的数据类型仍为 T。 -![DataStream和KeyedStream的转换关系](./img/keyedstream-datastream.png) +```{figure} ./img/keyedstream-datastream.png +--- +name: fig-keyedstream-datastream +width: 80% +align: center +--- +DataStream 和 KeyedStream 的转换关系 +``` ### keyBy -绝大多数情况,我们要根据事件的某种属性或数据的某个字段进行分组,然后对一个分组内的数据进行处理。如下图所示,`keyBy`算子根据元素的形状对数据进行分组,相同形状的元素被分到了一起,可被后续算子统一处理。比如,对股票数据流处理时,可以根据股票代号进行分组,然后对同一支股票统计其价格变动。又如,电商用户行为日志把所有用户的行为都记录了下来,如果要分析某一个用户行为,需要先按用户ID进行分组。 +绝大多数情况,我们要根据事件的某种属性或数据的某个字段进行分组,然后对一个分组内的数据进行处理。如下图所示,`keyBy` 算子根据元素的形状对数据进行分组,相同形状的元素被分到了一起,可被后续算子统一处理。比如,对股票数据流处理时,可以根据股票代号进行分组,然后对同一支股票统计其价格变动。又如,电商用户行为日志把所有用户的行为都记录了下来,如果要分析某一个用户行为,需要先按用户 ID 进行分组。 -`keyBy`算子将`DataStream`转换成一个`KeyedStream`。`KeyedStream`是一种特殊的`DataStream`,事实上,`KeyedStream`继承了`DataStream`,`DataStream`的各元素随机分布在各算子实例中,`KeyedStream`的各元素按照Key分组,相同Key的数据会被分配到同一算子实例中。我们需要向`keyBy`算子传递一个参数,以告知Flink以什么作为Key进行分组。 +`keyBy` 算子将 `DataStream` 转换成一个 `KeyedStream`。`KeyedStream` 是一种特殊的 `DataStream`,事实上,`KeyedStream` 继承了 `DataStream`,`DataStream` 的各元素随机分布在各算子实例中,`KeyedStream` 的各元素按照 Key 分组,相同 Key 的数据会被分配到同一算子实例中。我们需要向 `keyBy` 算子传递一个参数,以告知 Flink 以什么作为 Key 进行分组。 -![keyBy](./img/keyBy.png) +```{figure} ./img/keyBy.png +--- +name: fig-keyBy-transformation +width: 80% +align: center +--- +KeyBy Transformation 操作示例 +``` -我们可以使用数字位置来指定Key: +我们可以使用数字位置来指定 Key: ```java DataStream> dataStream = senv.fromElements( Tuple2.of(1, 1.0), Tuple2.of(2, 3.2), Tuple2.of(1, 5.5), Tuple2.of(3, 10.0), Tuple2.of(3, 12.5)); -// 使用数字位置定义Key 按照第一个字段进行分组 +// 使用数字位置定义 Key 按照第一个字段进行分组 DataStream> keyedStream = dataStream.keyBy(0).sum(1); ``` -也可以使用字段名来指定Key。比如,我们有一个`Word`类: +也可以使用字段名来指定 Key。比如,我们有一个 `Word` 类: ```java public class Word { @@ -234,7 +276,7 @@ public class Word { public String word; public int count; - public Word() {} + public Word(){} public Word(String word, int count) { this.word = word; @@ -251,27 +293,27 @@ public class Word { } } ``` -我们可以直接用`Word`中的字段名`word`来选择Key。 +我们可以直接用 `Word` 中的字段名 `word` 来选择 Key。 ```java DataStream fieldNameStream = wordStream.keyBy("word").sum("count"); ``` :::info -这种方法只适用于[数据类型和序列化](data-types.md#composite-types)章节中提到的Scala case class或Java POJO类型的数据。 +这种方法只适用于 [数据类型和序列化](data-types.md#composite-types) 章节中提到的 Scala case class 或 Java POJO 类型的数据。 ::: -指定Key本质上是实现一个`KeySelector`,在Flink源码中,它是这么定义的: +指定 Key 本质上是实现一个 `KeySelector`,在 Flink 源码中,它是这么定义的: ```java -// IN为数据流元素,KEY为所选择的Key +// IN 为数据流元素,KEY 为所选择的 Key @FunctionalInterface public interface KeySelector extends Function, Serializable { - // 选择一个字段作为Key + // 选择一个字段作为 Key KEY getKey(IN value) throws Exception; } ``` -我们可以重写`getKey()`方法,如下所示: +我们可以重写 `getKey()` 方法,如下所示: ```java DataStream wordStream = senv.fromElements( @@ -279,7 +321,7 @@ DataStream wordStream = senv.fromElements( Word.of("Hello", 2), Word.of("Flink", 2) ); -// 使用KeySelector +// 使用 KeySelector DataStream keySelectorStream = wordStream.keyBy(new KeySelector () { @Override public String getKey(Word in) { @@ -288,15 +330,15 @@ DataStream keySelectorStream = wordStream.keyBy(new KeySelector> tupleStream = @@ -314,10 +356,10 @@ DataStream> tupleStream = DataStream> sumStream = tupleStream.keyBy(0).sum(1); ``` -`max`算子对该字段求最大值,并将结果保存在该字段上。对于其他字段,该操作并不能保证其数值的计算结果。下面的例子对第三个字段求最大值,第二个字段是不确定的。 +`max` 算子对该字段求最大值,并将结果保存在该字段上。对于其他字段,该操作并不能保证其数值的计算结果。下面的例子对第三个字段求最大值,第二个字段是不确定的。 ```java -// 按第一个字段分组,对第三个字段求最大值max,打印出来的结果如下: +// 按第一个字段分组,对第三个字段求最大值 max,打印出来的结果如下: // (0,0,0) // (0,0,1) // (0,0,2) @@ -327,10 +369,10 @@ DataStream> sumStream = tupleStream.keyBy(0).s DataStream> maxStream = tupleStream.keyBy(0).max(2); ``` -`maxBy`算子对该字段求最大值,`maxBy`与`max`的区别在于,`maxBy`同时保留其他字段的数值,即`maxBy`返回数据流中最大的整个元素,包括其他字段。以下面的输入中Key为1的数据为例,我们要求第三个字段的最大值,Flink首先接收到`(1,0,6)`,当接收到`(1,1,7)`时,最大值发生变化,Flink将`(1,1,7)`这整个元组返回,当`(1,0,8)`到达时,最大值再次发生变化,Flink将`(1,0,8)`这整个元组返回。反观`max`,它只负责所求的字段,其他字段概不负责,无法保证其他字段的结果。因此,`maxBy`保证的是最大值的整个元素,`max`只保证最大值的字段。 +`maxBy` 算子对该字段求最大值,`maxBy` 与 `max` 的区别在于,`maxBy` 同时保留其他字段的数值,即 `maxBy` 返回数据流中最大的整个元素,包括其他字段。以下面的输入中 Key 为 1 的数据为例,我们要求第三个字段的最大值,Flink 首先接收到 `(1,0,6)`,当接收到 `(1,1,7)` 时,最大值发生变化,Flink 将 `(1,1,7)` 这整个元组返回,当 `(1,0,8)` 到达时,最大值再次发生变化,Flink 将 `(1,0,8)` 这整个元组返回。反观 `max`,它只负责所求的字段,其他字段概不负责,无法保证其他字段的结果。因此,`maxBy` 保证的是最大值的整个元素,`max` 只保证最大值的字段。 ```java -// 按第一个字段分组,对第三个字段求最大值maxBy,打印出来的结果如下: +// 按第一个字段分组,对第三个字段求最大值 maxBy,打印出来的结果如下: // (0,0,0) // (0,1,1) // (0,2,2) @@ -340,21 +382,28 @@ DataStream> maxStream = tupleStream.keyBy(0).m DataStream> maxByStream = tupleStream.keyBy(0).maxBy(2); ``` -同样,`min`和`minBy`的区别在于,`min`算子对某字段求最小值,`minBy`返回具有最小值的整个元素。 +同样,`min` 和 `minBy` 的区别在于,`min` 算子对某字段求最小值,`minBy` 返回具有最小值的整个元素。 -其实,这些聚合操作里已经使用了状态数据,比如,`sum`算子内部记录了当前的和,`max`算子内部记录了当前的最大值。算子的计算过程其实就是不断更新状态数据的过程。由于内部使用了状态数据,而且状态数据并不会被清理,因此一定要慎重地在一个无限数据流上使用这些聚合操作。 +其实,这些聚合操作里已经使用了状态数据,比如,`sum` 算子内部记录了当前的和,`max` 算子内部记录了当前的最大值。算子的计算过程其实就是不断更新状态数据的过程。由于内部使用了状态数据,而且状态数据并不会被清理,因此一定要慎重地在一个无限数据流上使用这些聚合操作。 :::info -对于一个`KeyedStream`,一次只能使用一个Aggregation聚合操作,无法链式使用多个。 +对于一个 `KeyedStream`, 一次只能使用一个 Aggregation 聚合操作,无法链式使用多个。 ::: ### reduce -前面几个Aggregation是几个较为常用的操作,对分组数据进行处理更为通用的方法是使用`reduce`算子。 +前面几个 Aggregation 是几个较为常用的操作,对分组数据进行处理更为通用的方法是使用 `reduce` 算子。 -![reduce](./img/reduce.png) +```{figure} ./img/reduce.png +--- +name: fig-reduce-transformation +width: 80% +align: center +--- +Reduce Transformation 操作示例 +``` -上图展示了`reduce`算子的原理:`reduce`在分组的数据流上生效,它接受两个输入,生成一个输出,即两两合一地进行汇总操作,生成一个同类型的新元素。 +{numref}`fig-reduce-transformation` 展示了 `reduce` 算子的原理:`reduce` 在分组的数据流上生效,它接受两个输入,生成一个输出,即两两合一地进行汇总操作,生成一个同类型的新元素。 例如,我们定义一个学生分数类: @@ -383,7 +432,7 @@ public static class Score { } ``` -在这个类上进行`reduce`: +在这个类上进行 `reduce`: ```java DataStream dataStream = senv.fromElements( @@ -391,13 +440,13 @@ DataStream dataStream = senv.fromElements( Score.of("Li", "Math", 85), Score.of("Wang", "Math", 92), Score.of("Liu", "Math", 91), Score.of("Liu", "English", 87)); -// 实现ReduceFunction +// 实现 ReduceFunction DataStream sumReduceFunctionStream = dataStream .keyBy("name") .reduce(new MyReduceFunction()); ``` -其中`MyReduceFunction`继承并实现了`ReduceFunction`: +其中 `MyReduceFunction` 继承并实现了 `ReduceFunction`: ```java public static class MyReduceFunction implements ReduceFunction { @@ -408,7 +457,7 @@ public static class MyReduceFunction implements ReduceFunction { } ``` -使用Lambda表达式更简洁一些: +使用 Lambda 表达式更简洁一些: ```java // 使用 Lambda 表达式 @@ -423,9 +472,16 @@ DataStream sumLambdaStream = dataStream ### union -在`DataStream`上使用`union`算子可以合并多个同类型的数据流,或者说,可以将多个`DataStream`合并为一个新的`DataStream`。数据将按照先进先出(First In First Out)的模式合并,且不去重。下图中,`union`对白色和深色两个数据流进行合并,生成一个数据流。 +在 `DataStream` 上使用 `union` 算子可以合并多个同类型的数据流,或者说,可以将多个 `DataStream` 合并为一个新的 `DataStream`。数据将按照先进先出(First In First Out)的模式合并,且不去重。下图中,`union` 对白色和深色两个数据流进行合并,生成一个数据流。 -![union示意图](./img/union.png) +```{figure} ./img/union.png +--- +name: fig-union-transformation +width: 80% +align: center +--- +Union Transformation 操作示例 +``` 假设股票价格数据流来自不同的交易所,我们将其合并成一个数据流: @@ -438,22 +494,29 @@ DataStream unionStockStream = shenzhenStockStream.union(hongkongStoc ### connect -`union`虽然可以合并多个数据流,但有一个限制:多个数据流的数据类型必须相同。`connect`提供了和`union`类似的功能,用来连接两个数据流,它与`union`的区别在于: +`union` 虽然可以合并多个数据流,但有一个限制:多个数据流的数据类型必须相同。`connect` 提供了和 `union` 类似的功能,用来连接两个数据流,它与 `union` 的区别在于: -1. `connect`只能连接两个数据流,`union`可以连接多个数据流。 -2. `connect`所连接的两个数据流的数据类型可以不一致,`union`所连接的两个数据流的数据类型必须一致。 -3. 两个`DataStream`经过`connect`之后被转化为`ConnectedStreams`,`ConnectedStreams`会对两个流的数据应用不同的处理方法,且双流之间可以共享状态。 +1. `connect` 只能连接两个数据流,`union` 可以连接多个数据流。 +2. `connect` 所连接的两个数据流的数据类型可以不一致,`union` 所连接的两个数据流的数据类型必须一致。 +3. 两个 `DataStream` 经过 `connect` 之后被转化为 `ConnectedStreams`,`ConnectedStreams` 会对两个流的数据应用不同的处理方法,且双流之间可以共享状态。 -如下图所示,`connect`经常被应用在使用控制流对数据流进行控制处理的场景上。控制流可以是阈值、规则、机器学习模型或其他参数。 +如 {numref}`fig-connect-control` 所示,`connect` 经常被应用在使用控制流对数据流进行控制处理的场景上。控制流可以是阈值、规则、机器学习模型或其他参数。 -![对一个数据流进行控制处理](./img/connect-control.png) +```{figure} ./img/connect-control.png +--- +name: fig-connect-control +width: 80% +align: center +--- +对一个数据流进行控制处理 +``` -两个`DataStream`经过`connect`之后被转化为`ConnectedStreams`。对于`ConnectedStreams`,我们需要重写`CoMapFunction`或`CoFlatMapFunction`。这两个接口都提供了三个泛型,这三个泛型分别对应第一个输入流的数据类型、第二个输入流的数据类型和输出流的数据类型。在重写函数时,对于`CoMapFunction`,`map1`处理第一个流的数据,`map2`处理第二个流的数据;对于`CoFlatMapFunction`,`flatMap1`处理第一个流的数据,`flatMap2`处理第二个流的数据。下面是`CoFlatMapFunction`在源码中的签名。 +两个 `DataStream` 经过 `connect` 之后被转化为 `ConnectedStreams`。对于 `ConnectedStreams`,我们需要重写 `CoMapFunction` 或 `CoFlatMapFunction`。这两个接口都提供了三个泛型,这三个泛型分别对应第一个输入流的数据类型、第二个输入流的数据类型和输出流的数据类型。在重写函数时,对于 `CoMapFunction`,`map1` 处理第一个流的数据,`map2` 处理第二个流的数据;对于 `CoFlatMapFunction`,`flatMap1` 处理第一个流的数据,`flatMap2` 处理第二个流的数据。下面是 `CoFlatMapFunction` 在源码中的签名。 ```java -// IN1为第一个输入流的数据类型 -// IN2为第二个输入流的数据类型 -// OUT为输出类型 +// IN1 为第一个输入流的数据类型 +// IN2 为第二个输入流的数据类型 +// OUT 为输出类型 public interface CoFlatMapFunction extends Function, Serializable { // 处理第一个流的数据 @@ -464,7 +527,7 @@ public interface CoFlatMapFunction extends Function, Serializable } ``` -Flink并不能保证两个函数调用顺序,两个函数的调用依赖于两个数据流中数据的流入先后顺序,即第一个数据流有数据到达时,`map1`或`flatMap1`会被调用,第二个数据流有数据到达时,`map2`或`flatMap2`会被调用。下面的代码对一个整数流和一个字符串流进行了`connect`操作。 +Flink 并不能保证两个函数调用顺序,两个函数的调用依赖于两个数据流中数据的流入先后顺序,即第一个数据流有数据到达时,`map1` 或 `flatMap1` 会被调用,第二个数据流有数据到达时,`map2` 或 `flatMap2` 会被调用。下面的代码对一个整数流和一个字符串流进行了 `connect` 操作。 ```java DataStream intStream = senv.fromElements(1, 0, 9, 2, 3, 6); @@ -473,7 +536,7 @@ DataStream stringStream = senv.fromElements("LOW", "HIGH", "LOW", "LOW" ConnectedStreams connectedStream = intStream.connect(stringStream); DataStream mapResult = connectedStream.map(new MyCoMapFunction()); -// CoMapFunction三个泛型分别对应第一个流的输入、第二个流的输入,map之后的输出 +// CoMapFunction 三个泛型分别对应第一个流的输入、第二个流的输入,map 之后的输出 public static class MyCoMapFunction implements CoMapFunction { @Override public String map1(Integer input1) { @@ -487,15 +550,15 @@ public static class MyCoMapFunction implements CoMapFunction { @@ -588,18 +672,18 @@ public class DataStream { } ``` -下面为`Partitioner`的源码,`partition`函数的返回一个整数,表示该元素将被路由到下游第几个实例。 +下面为 `Partitioner` 的源码,`partition` 函数的返回一个整数,表示该元素将被路由到下游第几个实例。 ```java @FunctionalInterface public interface Partitioner extends java.io.Serializable, Function { - // 根据key决定该数据分配到下游第几个分区(实例) + // 根据 key 决定该数据分配到下游第几个分区(实例) int partition(K key, int numPartitions); } ``` -`Partitioner[K]`中泛型K为根据哪个字段进行分区,比如我们要对一个`Score`数据流重分布,希望按照id均匀分配到下游各实例,那么泛型K就为id的数据类型`Long`。同时,泛型K也是`int partition(K key, int numPartitions)`函数的第一个参数的数据类型。 +`Partitioner[K]` 中泛型 K 为根据哪个字段进行分区,比如我们要对一个 `Score` 数据流重分布,希望按照 id 均匀分配到下游各实例,那么泛型 K 就为 id 的数据类型 `Long`。同时,泛型 K 也是 `int partition(K key, int numPartitions)` 函数的第一个参数的数据类型。 ```java public class Score { @@ -609,9 +693,9 @@ public class Score { } ``` -在调用`partitionCustom(partitioner, field)`时,第一个参数是我们重写的`Partitioner`,第二个参数表示按照id字段进行处理。 +在调用 `partitionCustom(partitioner, field)` 时,第一个参数是我们重写的 `Partitioner`,第二个参数表示按照 id 字段进行处理。 -`partitionCustom`涉及的类型和函数有点多,使用例子解释更为直观。下面的代码按照数据流中的第二个字段进行数据重分布,当该字段中包含数字时,将被路由到下游算子的前半部分,否则被路由到后半部分。如果设置并行度为4,表示所有算子的实例总数为4,或者说共有4个分区,那么如果字符串包含数字时,该元素将被分配到第0个和第1个实例上,否则被分配到第2个和第3个实例上。 +`partitionCustom` 涉及的类型和函数有点多,使用例子解释更为直观。下面的代码按照数据流中的第二个字段进行数据重分布,当该字段中包含数字时,将被路由到下游算子的前半部分,否则被路由到后半部分。如果设置并行度为 4,表示所有算子的实例总数为 4,或者说共有 4 个分区,那么如果字符串包含数字时,该元素将被分配到第 0 个和第 1 个实例上,否则被分配到第 2 个和第 3 个实例上。 ```java public class PartitionCustomExample { @@ -623,7 +707,7 @@ public class PartitionCustomExample { // 获取当前执行环境的默认并行度 int defaultParalleism = senv.getParallelism(); - // 设置所有算子的并行度为4,表示所有算子的并行执行的实例数为4 + // 设置所有算子的并行度为 4,表示所有算子的并行执行的实例数为 4 senv.setParallelism(4); DataStream> dataStream = senv.fromElements( @@ -631,7 +715,7 @@ public class PartitionCustomExample { Tuple2.of(3, "256"), Tuple2.of(4, "zyx"), Tuple2.of(5, "bcd"), Tuple2.of(6, "666")); - // 对(Int, String)中的第二个字段使用 MyPartitioner 中的重分布逻辑 + // 对 (Int, String) 中的第二个字段使用 MyPartitioner 中的重分布逻辑 DataStream> partitioned = dataStream.partitionCustom(new MyPartitioner(), 1); partitioned.print(); @@ -640,8 +724,8 @@ public class PartitionCustomExample { } /** - * Partitioner 其中泛型T为指定的字段类型 - * 重写partiton函数,并根据T字段对数据流中的所有元素进行数据重分配 + * Partitioner 其中泛型 T 为指定的字段类型 + * 重写 partiton 函数,并根据 T 字段对数据流中的所有元素进行数据重分配 * */ public static class MyPartitioner implements Partitioner { @@ -649,9 +733,9 @@ public class PartitionCustomExample { private Pattern pattern = Pattern.compile(".*\\d+.*"); /** - * key 泛型T 即根据哪个字段进行数据重分配,本例中是Tuple2(Int, String)中的String + * key 泛型 T 即根据哪个字段进行数据重分配,本例中是 Tuple2(Int, String) 中的 String * numPartitons 为当前有多少个并行实例 - * 函数返回值是一个Int 为该元素将被发送给下游第几个实例 + * 函数返回值是一个 Int 为该元素将被发送给下游第几个实例 * */ @Override public int partition(String key, int numPartitions) { diff --git a/doc/ch-datastream-api/user-define-functions.md b/doc/ch-datastream-api/user-define-functions.md index c71e3ea..6b4564a 100644 --- a/doc/ch-datastream-api/user-define-functions.md +++ b/doc/ch-datastream-api/user-define-functions.md @@ -3,19 +3,19 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -我们在[Transformations](transformations.md)部分中介绍了常用的一些操作,可以发现,使用Flink的算子必须进行自定义,自定义时可以使用Lambda表达式,也可以继承并重写函数类。本节将从源码和案例两方面对用户自定义函数进行一个总结和梳理。 +我们在 [Transformations](transformations.md) 部分中介绍了常用的一些操作,可以发现,使用 Flink 的算子必须进行自定义,自定义时可以使用 Lambda 表达式,也可以继承并重写函数类。本节将从源码和案例两方面对用户自定义函数进行一个总结和梳理。 ## 函数类 -对于`map`、`flatMap`、`reduce`等方法,我们可以实现`MapFunction`、`FlatMapFunction`、`ReduceFunction`等`interface`接口。这些函数类签名中都有泛型参数,用来定义该函数的输入或输出的数据类型。我们要继承这些类,并重写里面的自定义函数。以`flatMap`对应的`FlatMapFunction`为例,它在源码中的定义为: +对于 `map`、`flatMap`、`reduce` 等方法,我们可以实现 `MapFunction`、`FlatMapFunction`、`ReduceFunction` 等 `interface` 接口。这些函数类签名中都有泛型参数,用来定义该函数的输入或输出的数据类型。我们要继承这些类,并重写里面的自定义函数。以 `flatMap` 对应的 `FlatMapFunction` 为例,它在源码中的定义为: ```scala package org.apache.flink.api.common.functions; @@ -26,14 +26,14 @@ public interface FlatMapFunction extends Function, Serializable { } ``` -这是一个函数式接口类,它继承了Flink的`Function`函数式接口。我们在第二章中提到函数式接口,这正是只有一个抽象函数方法的接口类,其目的是为了方便应用Java Lambda表达式。此外,它还继承了`Serializable`,以便进行序列化,这是因为这些函数在运行过程中要发送到各个实例上,发送前后要进行序列化和反序列化。需要注意的是,使用这些函数时,一定要保证函数内的所有内容都可以被序列化。如果有一些不能被序列化的内容,或者使用接下来介绍的RichFunction函数类,或者重写Java的序列化和反序列化方法。 +这是一个函数式接口类,它继承了 Flink 的 `Function` 函数式接口。我们在第二章中提到函数式接口,这正是只有一个抽象函数方法的接口类,其目的是为了方便应用 Java Lambda 表达式。此外,它还继承了 `Serializable`,以便进行序列化,这是因为这些函数在运行过程中要发送到各个实例上,发送前后要进行序列化和反序列化。需要注意的是,使用这些函数时,一定要保证函数内的所有内容都可以被序列化。如果有一些不能被序列化的内容,或者使用接下来介绍的 RichFunction 函数类,或者重写 Java 的序列化和反序列化方法。 -进一步观察`FlatMapFunction`发现,这个函数类有两个泛型T和O,T是输入,O是输出。在继承这个接口类时,要设置好对应的输入和输出数据类型,否则会报错。我们最终其实是要重写虚函数`flatMap`,函数的两个参数也与输入输出的泛型类型对应。参数`value`是`flatMap`的输入,数据类型是T,参数`out`是`flatMap`的输出,它是一个`Collector`,从`Collector`命名可以看出它起着收集的作用,最终输出成一个数据流,我们需要将类型为O的数据写入`out`。 +进一步观察 `FlatMapFunction` 发现,这个函数类有两个泛型 T 和 O,T 是输入,O 是输出。在继承这个接口类时,要设置好对应的输入和输出数据类型,否则会报错。我们最终其实是要重写虚函数 `flatMap`,函数的两个参数也与输入输出的泛型类型对应。参数 `value` 是 `flatMap` 的输入,数据类型是 T,参数 `out` 是 `flatMap` 的输出,它是一个 `Collector`,从 `Collector` 命名可以看出它起着收集的作用,最终输出成一个数据流,我们需要将类型为 O 的数据写入 `out`。 -下面的例子继承`FlatMapFunction`,并实现`flatMap`,只对长度大于limit的字符串切词: +下面的例子继承 `FlatMapFunction`,并实现 `flatMap`,只对长度大于 limit 的字符串切词: ```scala -// 使用FlatMapFunction实现过滤逻辑,只对字符串长度大于 limit 的内容进行词频统计 +// 使用 FlatMapFunction 实现过滤逻辑,只对字符串长度大于 limit 的内容进行词频统计 public static class WordSplitFlatMap implements FlatMapFunction { private Integer limit; @@ -55,21 +55,21 @@ DataStream dataStream = senv.fromElements("Hello World", "Hello this is DataStream functionStream = dataStream.flatMap(new WordSplitFlatMap(10)); ``` -## Lambda表达式 +## Lambda 表达式 -当不需要处理非常复杂的业务逻辑时,使用Lambda表达式可能是更好的选择,Lambda表达式能让代码更简洁紧凑。Java和Scala都可以支持Lambda表达式。 +当不需要处理非常复杂的业务逻辑时,使用 Lambda 表达式可能是更好的选择,Lambda 表达式能让代码更简洁紧凑。Java 和 Scala 都可以支持 Lambda 表达式。 -### Scala的Lambda表达式 +### Scala 的 Lambda 表达式 -我们先看对Lambda表达式支持最好的Scala。对于`flatMap`,Flink的Scala源码有三种定义,我们先看一下第一种的定义: +我们先看对 Lambda 表达式支持最好的 Scala。对于 `flatMap`,Flink 的 Scala 源码有三种定义,我们先看一下第一种的定义: ```scala def flatMap[O: TypeInformation](fun: (T, Collector[O]) => Unit): DataStream[O] = {...} ``` -`flatMap`输入是泛型T,输出是泛型O,接收一个名为`fun`的Lambda表达式,`fun`形如`(T, Collector[O] => {...})`。Lambda表达式要将数据写到`Collector[O]`中。 +`flatMap` 输入是泛型 T,输出是泛型 O,接收一个名为 `fun` 的 Lambda 表达式,`fun` 形如 `(T, Collector[O] => {...})`。Lambda 表达式要将数据写到 `Collector[O]` 中。 -我们继续以切词为例,程序可以写成下面的样子,`flatMap`中的内容是一个Lambda表达式。其中的`foreach(out.collect)`本质上也是一个Lambda表达式。从这个例子可以看出,Scala的无所不在的函数式编程思想。 +我们继续以切词为例,程序可以写成下面的样子,`flatMap` 中的内容是一个 Lambda 表达式。其中的 `foreach(out.collect)` 本质上也是一个 Lambda 表达式。从这个例子可以看出,Scala 的无所不在的函数式编程思想。 ```scala val lambda = dataStream.flatMap{ @@ -81,33 +81,33 @@ val lambda = dataStream.flatMap{ } ``` -然后我们看一下源码中Scala的第二种定义: +然后我们看一下源码中 Scala 的第二种定义: ```scala def flatMap[O: TypeInformation](fun: T => TraversableOnce[O]): DataStream[O] = {...} ``` -与之前的不同,这里的Lambda表达式输入是泛型T,输出是一个`TraversableOnce[O]`,`TraversableOnce`表示这是一个O组成的列表。与之前使用`Collector`收集输出不同,这里直接输出一个列表,Flink帮我们将列表做了展平。使用`TraversableOnce`也导致我们无论如何都要返回一个列表,即使是一个空列表,否则无法匹配函数的定义。总结下来,这种场景的Lambda表达式输入是一个T,无论如何输出都是一个O的列表,即使是一个空列表。 +与之前的不同,这里的 Lambda 表达式输入是泛型 T,输出是一个 `TraversableOnce[O]`,`TraversableOnce` 表示这是一个 O 组成的列表。与之前使用 `Collector` 收集输出不同,这里直接输出一个列表,Flink 帮我们将列表做了展平。使用 `TraversableOnce` 也导致我们无论如何都要返回一个列表,即使是一个空列表,否则无法匹配函数的定义。总结下来,这种场景的 Lambda 表达式输入是一个 T,无论如何输出都是一个 O 的列表,即使是一个空列表。 ```scala -// 只对字符串数量大于15的句子进行处理 +// 只对字符串数量大于 15 的句子进行处理 val longSentenceWords = dataStream.flatMap { input => { if (input.size > 15) { // 输出是 TraversableOnce 因此返回必须是一个列表 - // 这里将Array[String]转成了Seq[String] + // 这里将 Array[String] 转成了 Seq[String] input.split(" ").toSeq } else { - // 为空时必须返回空列表,否则返回值无法与TraversableOnce匹配! + // 为空时必须返回空列表,否则返回值无法与 TraversableOnce 匹配! Seq.empty } } } ``` -在使用Lambda表达式时,我们应该逐渐学会使用IntelliJ Idea的类型检查和匹配功能。比如在本例中,如果返回值不是一个`TraversableOnce`,那么IntelliJ Idea会将该行标红,告知我们输入或输出的类型不匹配。 +在使用 Lambda 表达式时,我们应该逐渐学会使用 IntelliJ Idea 的类型检查和匹配功能。比如在本例中,如果返回值不是一个 `TraversableOnce`,那么 IntelliJ Idea 会将该行标红,告知我们输入或输出的类型不匹配。 -此外,还有第三种只针对Scala的Lambda表达式使用方法。Flink为了保持Java和Scala API的一致性,一些Scala独有的特性没有被放入标准的API,而是集成到了一个扩展包中。这种API支持类型匹配的偏函数(Partial Function),结合case关键字,能够在语义上更好地描述数据类型: +此外,还有第三种只针对 Scala 的 Lambda 表达式使用方法。Flink 为了保持 Java 和 Scala API 的一致性,一些 Scala 独有的特性没有被放入标准的 API,而是集成到了一个扩展包中。这种 API 支持类型匹配的偏函数(Partial Function),结合 case 关键字,能够在语义上更好地描述数据类型: ```scala val data: DataStream[(String, Long, Double)] = ... @@ -116,15 +116,15 @@ data.flatMapWith { } ``` -使用这种API时,需要添加引用: +使用这种 API 时,需要添加引用: ```scala import org.apache.flink.streaming.api.scala.extensions._ ``` -这种方式给输入定义了变量名和类型,方便阅读者阅读代码,同时也保留了函数式编程的简洁。Spark的大多数算子默认都支持此功能,Flink没有默认支持此功能,而是将这个功能放到了扩展包里,对于Spark用户来说,迁移到Flink时需要注意这个区别。此外`mapWith`、`filterWith`、`keyingBy`、`reduceWith`也分别是其他算子相对应的接口。 +这种方式给输入定义了变量名和类型,方便阅读者阅读代码,同时也保留了函数式编程的简洁。Spark 的大多数算子默认都支持此功能,Flink 没有默认支持此功能,而是将这个功能放到了扩展包里,对于 Spark 用户来说,迁移到 Flink 时需要注意这个区别。此外 `mapWith`、`filterWith`、`keyingBy`、`reduceWith` 也分别是其他算子相对应的接口。 -使用`flatMapWith`,之前的切词可以实现为: +使用 `flatMapWith`,之前的切词可以实现为: ```scala val flatMapWith = dataStream.flatMapWith { @@ -140,9 +140,9 @@ val flatMapWith = dataStream.flatMapWith { ### Java -再来看看Java,因为一些遗留问题,它的Lambda表达式使用起来有一些区别。 +再来看看 Java,因为一些遗留问题,它的 Lambda 表达式使用起来有一些区别。 -第二章中提到,Java有类型擦除问题,`void flatMap(IN value, Collector out)`编译成了`void flatMap(IN value, Collector out)`,擦除了泛型信息,Flink无法自动获取返回类型,如果不做其他操作,会抛出异常。 +第二章中提到,Java 有类型擦除问题,`void flatMap(IN value, Collector out)` 编译成了 `void flatMap(IN value, Collector out)`,擦除了泛型信息,Flink 无法自动获取返回类型,如果不做其他操作,会抛出异常。 ``` org.apache.flink.api.common.functions.InvalidTypesException: The generic type parameters of 'Collector' are missing. @@ -151,7 +151,7 @@ org.apache.flink.api.common.functions.InvalidTypesException: The generic type pa Otherwise the type has to be specified explicitly using type information. ``` -这种情况下,根据报错提示,或者使用一个类实现`FlatMapFunction`(包括匿名类),或者添加类型信息。这个类型信息,正是[数据类型和序列化](./data-types)章节中所介绍的数据类型。 +这种情况下,根据报错提示,或者使用一个类实现 `FlatMapFunction`(包括匿名类),或者添加类型信息。这个类型信息,正是 [数据类型和序列化](./data-types) 章节中所介绍的数据类型。 ```java DataStream words = dataStream.flatMap ( @@ -164,15 +164,15 @@ DataStream words = dataStream.flatMap ( .returns(Types.STRING); ``` -通过这里对Scala和Java的对比不难发现,Scala更灵活,Java更严谨,各有优势。 +通过这里对 Scala 和 Java 的对比不难发现,Scala 更灵活,Java 更严谨,各有优势。 -## Rich函数类 +## Rich 函数类 -在上面两种自定义方法的基础上,Flink还提供了RichFunction函数类。从名称上来看,这种函数类在普通的函数类上增加了Rich前缀,比如`RichMapFunction`、`RichFlatMapFunction`或`RichReduceFunction`等等。比起普通的函数类,Rich函数类增加了: +在上面两种自定义方法的基础上,Flink 还提供了 RichFunction 函数类。从名称上来看,这种函数类在普通的函数类上增加了 Rich 前缀,比如 `RichMapFunction`、`RichFlatMapFunction` 或 `RichReduceFunction` 等等。比起普通的函数类,Rich 函数类增加了: -* `open()`方法:Flink在算子调用前会执行这个方法,可以用来进行一些初始化工作。 -* `close()`方法:Flink在算子最后一次调用结束后执行这个方法,可以用来释放一些资源。 -* `getRuntimeContext()`方法:获取运行时上下文。每个并行的算子子任务都有一个运行时上下文,上下文记录了这个算子运行过程中的一些信息,包括算子当前的并行度、算子子任务序号、广播数据、累加器、监控数据。最重要的是,我们可以从上下文里获取状态数据。 +* `open()` 方法:Flink 在算子调用前会执行这个方法,可以用来进行一些初始化工作。 +* `close()` 方法:Flink 在算子最后一次调用结束后执行这个方法,可以用来释放一些资源。 +* `getRuntimeContext()` 方法:获取运行时上下文。每个并行的算子子任务都有一个运行时上下文,上下文记录了这个算子运行过程中的一些信息,包括算子当前的并行度、算子子任务序号、广播数据、累加器、监控数据。最重要的是,我们可以从上下文里获取状态数据。 我们可以看一下源码中的函数签名: @@ -180,12 +180,12 @@ DataStream words = dataStream.flatMap ( public abstract class RichFlatMapFunction extends AbstractRichFunction implements FlatMapFunction ``` -它既实现了`FlatMapFunction`接口类,又继承了`AbstractRichFunction`。其中`AbstractRichFunction`是一个抽象类,有一个成员变量`RuntimeContext`,有`open`、`close`和`getRuntimeContext`等方法。 +它既实现了 `FlatMapFunction` 接口类,又继承了 `AbstractRichFunction`。其中 `AbstractRichFunction` 是一个抽象类,有一个成员变量 `RuntimeContext`,有 `open`、`close` 和 `getRuntimeContext` 等方法。 -我们尝试继承并实现`RichFlatMapFunction`,并使用一个累加器。首先简单介绍累加器的概念:在单机环境下,我们可以用一个for循环做累加统计,但是在分布式计算环境下,计算是分布在多台节点上的,每个节点处理一部分数据,因此单纯循环无法满足计算,累加器是大数据框架帮我们实现的一种机制,允许我们在多节点上进行累加统计。 +我们尝试继承并实现 `RichFlatMapFunction`,并使用一个累加器。首先简单介绍累加器的概念:在单机环境下,我们可以用一个 for 循环做累加统计,但是在分布式计算环境下,计算是分布在多台节点上的,每个节点处理一部分数据,因此单纯循环无法满足计算,累加器是大数据框架帮我们实现的一种机制,允许我们在多节点上进行累加统计。 ```java -// 实现RichFlatMapFunction类 +// 实现 RichFlatMapFunction 类 // 添加了累加器 Accumulator public static class WordSplitRichFlatMap extends RichFlatMapFunction { @@ -201,7 +201,7 @@ public static class WordSplitRichFlatMap extends RichFlatMapFunction [OPTIONS] [ARGUMENTS] ``` -其中,`ACTION`包括`run`、`stop`等,分别对应提交和取消作业。`OPTIONS`为一些预置的选项,`ARGUMENTS`是用户传入的参数。由于命令行工具的参数很多,我们只介绍一些经常使用的参数,其他参数可以参考Flink官方文档。 +其中,`ACTION` 包括 `run`、`stop` 等,分别对应提交和取消作业。`OPTIONS` 为一些预置的选项,`ARGUMENTS` 是用户传入的参数。由于命令行工具的参数很多,我们只介绍一些经常使用的参数,其他参数可以参考 Flink 官方文档。 -## 9.4.1 提交作业 +## 提交作业 提交作业的语法如下。 @@ -21,15 +21,15 @@ $ ./bin/flink run [OPTIONS] [ARGUMENTS] ``` -我们要提供一个打包好的用户作业JAR包。打包需要使用Maven,在自己的Java工程目录下执行`mvn package`,在`target`文件夹下找到相应的JAR包。 +我们要提供一个打包好的用户作业 JAR 包。打包需要使用 Maven,在自己的 Java 工程目录下执行 `mvn package`,在 `target` 文件夹下找到相应的 JAR 包。 -我们使用Flink给我们提供的WordCount程序来演示。它的JAR包在Flink主目录下:`./examples/streaming/WordCount.jar`。提交作业的命令如下。 +我们使用 Flink 给我们提供的 WordCount 程序来演示。它的 JAR 包在 Flink 主目录下:`./examples/streaming/WordCount.jar`。提交作业的命令如下。 ```bash $ ./bin/flink run ./examples/streaming/WordCount.jar ``` -任何一个Java程序都需要一个主类和main方法作为入口,启动WordCount程序时,我们并没有提及主类,因为程序在`pom.xml`文件中设置了主类。确切地说,经过Maven打包生成的JAR包有文件`META-INF/MANIFEST.MF`,该文件里定义了主类。如果我们想明确使用自己所需要的主类,可以使用`-c ` 或`--class `来指定程序的主类。在一个包含众多`main()`方法的JAR包里,必须指定一个主类,否则会报错。 +任何一个 Java 程序都需要一个主类和 main 方法作为入口,启动 WordCount 程序时,我们并没有提及主类,因为程序在 `pom.xml` 文件中设置了主类。确切地说,经过 Maven 打包生成的 JAR 包有文件 `META-INF/MANIFEST.MF`,该文件里定义了主类。如果我们想明确使用自己所需要的主类,可以使用 `-c ` 或 `--class ` 来指定程序的主类。在一个包含众多 `main()` 方法的 JAR 包里,必须指定一个主类,否则会报错。 ```bash $ ./bin/flink run \ @@ -47,17 +47,17 @@ $ ./bin/flink run \ --output '/tmp/b.log' ``` -其中,`--input '/tmp/a.log' --output '/tmp/b.log'`为我们传入的参数,和其他Java程序一样,这些参数会写入`main()`方法的参数`String[]`中,以字符串数组的形式存在。参数需要程序代码解析,因此命令行工具与程序代码中的参数要保持一致,否则会出现参数解析错误的情况。 +其中,`--input '/tmp/a.log' --output '/tmp/b.log'` 为我们传入的参数,和其他 Java 程序一样,这些参数会写入 `main()` 方法的参数 `String[]` 中,以字符串数组的形式存在。参数需要程序代码解析,因此命令行工具与程序代码中的参数要保持一致,否则会出现参数解析错误的情况。 -我们也可以在命令行中用`-p`选项设置这个作业的并行度。下面的命令给作业设置的并行度为2。 +我们也可以在命令行中用 `-p` 选项设置这个作业的并行度。下面的命令给作业设置的并行度为 2。 ```bash $ ./bin/flink run -p 2 ./examples/streaming/WordCount.jar ``` -如果用户在代码中使用`setParallelism()`方法明确设置并行度,或有给某个算子设置并行度,那么用户代码中的设置会覆盖命令行中的`-p`设置。 +如果用户在代码中使用 `setParallelism()` 方法明确设置并行度,或有给某个算子设置并行度,那么用户代码中的设置会覆盖命令行中的 `-p` 设置。 -提交作业本质上是向Flink的Master提交JAR包,可以用`-m`选项来设置向具体哪个Master提交。下面的命令将作业提交到Hostname为`myJMHost`的节点上,端口号为8081。 +提交作业本质上是向 Flink 的 Master 提交 JAR 包,可以用 `-m` 选项来设置向具体哪个 Master 提交。下面的命令将作业提交到 Hostname 为 `myJMHost` 的节点上,端口号为 8081。 ```bash $ ./bin/flink run \ @@ -65,9 +65,9 @@ $ ./bin/flink run \ ./examples/streaming/WordCount.jar ``` -如果我们已经启动了一个YARN集群,且当前节点可以连接到YARN集群上,`-m yarn-cluster`会将作业以Per-Job模式提交到YARN集群上。如果我们已经启动了一个Flink YARN Session,可以不用设置`-m`选项,Flink会记住Flink YARN Session的连接信息,默认向这个Flink YARN Session提交作业。 +如果我们已经启动了一个 YARN 集群,且当前节点可以连接到 YARN 集群上,`-m yarn-cluster` 会将作业以 Per-Job 模式提交到 YARN 集群上。如果我们已经启动了一个 Flink YARN Session,可以不用设置 `-m` 选项,Flink 会记住 Flink YARN Session 的连接信息,默认向这个 Flink YARN Session 提交作业。 -因为Flink支持不同类型的部署方式,为了避免提交作业的混乱、设置参数过多,Flink提出了`-e `或`--executor `选项,用户可以通过这两个选项选择使用哪种执行模式(Executor Mode)。可选的执行模式有:`remote`、`local`、`kubernetes-session`、`yarn-per-job`、 `yarn-session`。例如,一个原生Kubernetes Session中提交作业的命令如下。 +因为 Flink 支持不同类型的部署方式,为了避免提交作业的混乱、设置参数过多,Flink 提出了 `-e ` 或 `--executor ` 选项,用户可以通过这两个选项选择使用哪种执行模式(Executor Mode)。可选的执行模式有:`remote`、`local`、`kubernetes-session`、`yarn-per-job`、 `yarn-session`。例如,一个原生 Kubernetes Session 中提交作业的命令如下。 ```bash $ ./bin/flink run \ @@ -76,11 +76,11 @@ $ ./bin/flink run \ examples/streaming/WindowJoin.jar ``` -上面命令的`-D`用于设置参数。我们用`-D`形式来设置一些配置信息,这些配置的含义和内容和`conf/flink-conf.yaml`中的配置是一致的。 +上面命令的 `-D` 用于设置参数。我们用 `-D` 形式来设置一些配置信息,这些配置的含义和内容和 `conf/flink-conf.yaml` 中的配置是一致的。 -无论用以上哪种方式提交作业,Flink都会将一些信息输出到屏幕上,最重要的信息就是作业的ID。 +无论用以上哪种方式提交作业,Flink 都会将一些信息输出到屏幕上,最重要的信息就是作业的 ID。 -## 9.4.2 管理作业 +## 管理作业 罗列当前的作业的命令如下。 @@ -88,27 +88,27 @@ $ ./bin/flink run \ $ ./bin/flink list ``` -触发一个作业执行Savepoint的命令如下。 +触发一个作业执行 Savepoint 的命令如下。 ```bash $ ./bin/flink savepoint [savepointDirectory] ``` -这行命令会通知作业ID为`jobId`的作业执行Savepoint,可以在后面添加路径,Savepoint会写入对应目录,该路径必须是Flink Master可访问到的目录,例如一个HDFS路径。 +这行命令会通知作业 ID 为 `jobId` 的作业执行 Savepoint,可以在后面添加路径,Savepoint 会写入对应目录,该路径必须是 Flink Master 可访问到的目录,例如一个 HDFS 路径。 -关停一个Flink作业的命令如下。 +关停一个 Flink 作业的命令如下。 ```bash $ ./bin/flink cancel ``` -关停一个带Savepoint的作业的命令如下。 +关停一个带 Savepoint 的作业的命令如下。 ```bash $ ./bin/flink stop ``` -从一个Savepoint恢复一个作业的命令如下。 +从一个 Savepoint 恢复一个作业的命令如下。 ```bash $ ./bin/flink run -s [OPTIONS] diff --git a/doc/ch-deployment-and-configuration/flink-deployment-and-configuration.md b/doc/ch-deployment-and-configuration/flink-deployment-and-configuration.md index 2891d06..1c7e2ef 100644 --- a/doc/ch-deployment-and-configuration/flink-deployment-and-configuration.md +++ b/doc/ch-deployment-and-configuration/flink-deployment-and-configuration.md @@ -1,91 +1,113 @@ (flink-deployment-and-configuration)= -# Flink集群部署模式 +# Flink 集群部署模式 -当前,信息系统基础设施正在飞速发展,常见的基础设施包括物理机集群、虚拟机集群、容器集群等。为了兼容这些基础设施,Flink曾在1.7版本中做了重构,提出了第3章中所示的Master-Worker架构,该架构可以兼容几乎所有主流信息系统的基础设施,包括Standalone集群、Hadoop YARN集群或Kubernetes集群。 +当前,信息系统基础设施正在飞速发展,常见的基础设施包括物理机集群、虚拟机集群、容器集群等。为了兼容这些基础设施,Flink 曾在 1.7 版本中做了重构,提出了第 3 章中所示的 Master-Worker 架构,该架构可以兼容几乎所有主流信息系统的基础设施,包括 Standalone 集群、Hadoop YARN 集群或 Kubernetes 集群。 -## 9.1.1 Standalone集群 +## Standalone 集群 -一个Standalone集群包括至少一个Master进程和至少一个TaskManager进程,每个进程作为一个单独的Java JVM进程。其中,Master节点上运行Dispatcher、ResourceManager和JobManager,Worker节点将运行TaskManager。图9-1展示了一个4节点的Standalone集群,其中,IP地址为192.168.0.1的节点为Master节点,其他3个为Worker节点。 +一个 Standalone 集群包括至少一个 Master 进程和至少一个 TaskManager 进程,每个进程作为一个单独的 Java JVM 进程。其中,Master 节点上运行 Dispatcher、ResourceManager 和 JobManager,Worker 节点将运行 TaskManager。{numref}`fig-flink-standalone-cluster` 展示了一个 4 节点的 Standalone 集群,其中,IP 地址为 192.168.0.1 的节点为 Master 节点,其他 3 个为 Worker 节点。 -![图9-1 Flink Standalone集群](./img/Flink-Standalone-cluster.png) +```{figure} ./img/Flink-Standalone-cluster.png +--- +name: fig-flink-standalone-cluster +width: 80% +align: center +--- +Flink Standalone 集群 +``` -第2章的实验中,我们已经展示了如何下载和解压Flink,该集群只部署在本地,结合图9-1,本节介绍如何在一个物理机集群上部署Standalone集群。我们可以将解压后的Flink主目录复制到所有节点的相同路径上;也可以在一个共享存储空间(例如NFS)的路径上部署Flink,所有节点均可以像访问本地目录那样访问共享存储上的Flink主目录。此外,节点之间必须实现免密码登录:基于安全外壳协议(Secure Shell,SSH),将公钥拷贝到待目标节点,可以实现节点之间免密码登录。所有节点上必须提前安装并配置好JDK,将$JAVA_HOME放入环境变量。 +第 2 章的实验中,我们已经展示了如何下载和解压 Flink,该集群只部署在本地,结合图 9-1,本节介绍如何在一个物理机集群上部署 Standalone 集群。我们可以将解压后的 Flink 主目录复制到所有节点的相同路径上;也可以在一个共享存储空间(例如 NFS)的路径上部署 Flink,所有节点均可以像访问本地目录那样访问共享存储上的 Flink 主目录。此外,节点之间必须实现免密码登录:基于安全外壳协议(Secure Shell,SSH),将公钥拷贝到待目标节点,可以实现节点之间免密码登录。所有节点上必须提前安装并配置好 JDK,将 $JAVA_HOME 放入环境变量。 -我们需要编辑`conf/flink-conf.yaml`文件,将`jobmanager.rpc.address`配置为Master节点的IP地址192.168.0.1;编辑`conf/slaves`文件,将192.168.0.2、192.168.0.3和192.168.0.4等Worker节点的IP地址加入该文件中。如果每个节点除了IP地址外,还配有主机名(Hostname),我们也可以用Hostname替代IP地址来做上述配置。 +我们需要编辑 `conf/flink-conf.yaml` 文件,将 `jobmanager.rpc.address` 配置为 Master 节点的 IP 地址 192.168.0.1;编辑 `conf/slaves` 文件,将 192.168.0.2、192.168.0.3 和 192.168.0.4 等 Worker 节点的 IP 地址加入该文件中。如果每个节点除了 IP 地址外,还配有主机名(Hostname),我们也可以用 Hostname 替代 IP 地址来做上述配置。 -综上,配置一个Standalone集群需要注意以下几点: -- 为每台节点分配固定的IP地址,或者配置Hostname,节点之间设置免密码SSH登录。 -- 在所有节点上提前安装配置JDK,将`$JAVA_HOME`添加到环境变量中。 -- 配置`conf/flink-conf.yaml`文件,设置`jobmanager.rpc.address`为Master节点的IP地址或Hostname。配置`conf/slaves`文件,将Worker节点的IP地址或Hostname添加进去。 -- 将Flink主目录同步到所有节点的相同目录下,或者部署在一个共享目录上,共享目录可被所有节点访问。 +综上,配置一个 Standalone 集群需要注意以下几点: +- 为每台节点分配固定的 IP 地址,或者配置 Hostname,节点之间设置免密码 SSH 登录。 +- 在所有节点上提前安装配置 JDK,将 `$JAVA_HOME` 添加到环境变量中。 +- 配置 `conf/flink-conf.yaml` 文件,设置 `jobmanager.rpc.address` 为 Master 节点的 IP 地址或 Hostname。配置 `conf/slaves` 文件,将 Worker 节点的 IP 地址或 Hostname 添加进去。 +- 将 Flink 主目录同步到所有节点的相同目录下,或者部署在一个共享目录上,共享目录可被所有节点访问。 -接着,我们回到Master节点,进入Flink主目录,运行`bin/start-cluster.sh`。该脚本会在Master节点启动Master进程,同时读取`conf/slaves`文件,脚本会帮我们SSH登录到各节点上,启动TaskManager。至此,我们启动了一个Flink Standalone集群,我们可以使用Flink Client向该集群的Master节点提交作业。 +接着,我们回到 Master 节点,进入 Flink 主目录,运行 `bin/start-cluster.sh`。该脚本会在 Master 节点启动 Master 进程,同时读取 `conf/slaves` 文件,脚本会帮我们 SSH 登录到各节点上,启动 TaskManager。至此,我们启动了一个 Flink Standalone 集群,我们可以使用 Flink Client 向该集群的 Master 节点提交作业。 ```bash $ ./bin/flink run -m 192.168.0.1:8081 ./examples/batch/WordCount.jar ``` -可以使用`bin/stop-cluster.sh`脚本关停整个集群。 +可以使用 `bin/stop-cluster.sh` 脚本关停整个集群。 -## 9.1.2 Hadoop YARN集群 +## Hadoop YARN 集群 -Hadoop一直是很多公司首选的大数据基础架构,YARN也是经常使用的资源调度器。YARN可以管理一个集群的CPU和内存等资源,MapReduce、Hive或Spark都可以向YARN申请资源。YARN中的基本调度资源是容器(Container)。 +Hadoop 一直是很多公司首选的大数据基础架构,YARN 也是经常使用的资源调度器。YARN 可以管理一个集群的 CPU 和内存等资源,MapReduce、Hive 或 Spark 都可以向 YARN 申请资源。YARN 中的基本调度资源是容器(Container)。 注意: -YARN Container和Docker Container有所不同。YARN Container只适合JVM上的资源隔离,Docker Container则是更广泛意义上的Container。 +YARN Container 和 Docker Container 有所不同。YARN Container 只适合 JVM 上的资源隔离,Docker Container 则是更广泛意义上的 Container。 -为了让Flink运行在YARN上,需要提前配置Hadoop和YARN,这包括下载针对Hadoop的Flink,设置`HADOOP_CONF_DIR`和`YARN_CONF_DIR`等与Hadoop相关的配置,启动YARN等。网络上有大量相关教程,这里不赘述Hadoop和YARN的安装方法,但是用户需要按照9.5节介绍的内容来配置Hadoop相关依赖。 +为了让 Flink 运行在 YARN 上,需要提前配置 Hadoop 和 YARN,这包括下载针对 Hadoop 的 Flink,设置 `HADOOP_CONF_DIR` 和 `YARN_CONF_DIR` 等与 Hadoop 相关的配置,启动 YARN 等。网络上有大量相关教程,这里不赘述 Hadoop 和 YARN 的安装方法,但是用户需要按照 9.5 节介绍的内容来配置 Hadoop 相关依赖。 -在YARN上使用Flink有3种模式:Per-Job模式、Session模式和Application模式。Per-Job模式指每次向YARN提交一个作业,YARN为这个作业单独分配资源,基于这些资源启动一个Flink集群,该作业运行结束后,相应的资源会被释放。Session模式在YARN上启动一个长期运行的Flink集群,用户可以向这个集群提交多个作业。Application模式在Per-Job模式上做了一些优化。图9-2展示了Per-Job模式的作业提交流程。 +在 YARN 上使用 Flink 有 3 种模式:Per-Job 模式、Session 模式和 Application 模式。Per-Job 模式指每次向 YARN 提交一个作业,YARN 为这个作业单独分配资源,基于这些资源启动一个 Flink 集群,该作业运行结束后,相应的资源会被释放。Session 模式在 YARN 上启动一个长期运行的 Flink 集群,用户可以向这个集群提交多个作业。Application 模式在 Per-Job 模式上做了一些优化。{numref}`fig-per-job-submission` 展示了 Per-Job 模式的作业提交流程。 -![图9-2 Per-Job模式的作业提交流程](./img/Per-Job.png) +```{figure} ./img/Per-Job.png +--- +name: fig-per-job-submission +width: 80% +align: center +--- +Per-Job 模式的作业提交流程 +``` -Client首先将作业提交给YARN的ResourceManager,YARN为这个作业生成一个ApplicationMaster以运行Fink Master,ApplicationMaster是YARN中承担作业资源管理等功能的组件。ApplicationMaster中运行着JobManager和Flink-YARN ResourceManager。JobManager会根据本次作业所需资源向Flink-YARN ResourceManager申请Slot资源。 +Client 首先将作业提交给 YARN 的 ResourceManager,YARN 为这个作业生成一个 ApplicationMaster 以运行 Fink Master,ApplicationMaster 是 YARN 中承担作业资源管理等功能的组件。ApplicationMaster 中运行着 JobManager 和 Flink-YARN ResourceManager。JobManager 会根据本次作业所需资源向 Flink-YARN ResourceManager 申请 Slot 资源。 -注意: -这里有两个ResourceManager,一个是YARN的ResourceManager,它是YARN的组件,不属于Flink,它负责整个YARN集群全局层面的资源管理和任务调度;一个是Flink-YARN ResourceManager,它是Flink的组件,它负责当前Flink作业的资源管理。 +:::{note} +这里有两个 ResourceManager,一个是 YARN 的 ResourceManager,它是 YARN 的组件,不属于 Flink,它负责整个 YARN 集群全局层面的资源管理和任务调度;一个是 Flink-YARN ResourceManager,它是 Flink 的组件,它负责当前 Flink 作业的资源管理。 +::: -Flink-YARN ResourceManager会向YARN申请所需的Container,YARN为之分配足够的Container作为TaskManager。TaskManager里有Flink计算所需的Slot,TaskManager将这些Slot注册到Flink-YARN ResourceManager中。注册成功后,JobManager将作业的计算任务部署到各TaskManager上。 +Flink-YARN ResourceManager 会向 YARN 申请所需的 Container,YARN 为之分配足够的 Container 作为 TaskManager。TaskManager 里有 Flink 计算所需的 Slot,TaskManager 将这些 Slot 注册到 Flink-YARN ResourceManager 中。注册成功后,JobManager 将作业的计算任务部署到各 TaskManager 上。 -下面的命令使用Per-Job模式启动单个作业。 +下面的命令使用 Per-Job 模式启动单个作业。 ```bash $ ./bin/flink run -m yarn-cluster ./examples/batch/WordCount.jar ``` -`-m yarn-cluster`表示该作业使用Per-Job模式运行在YARN上。 +`-m yarn-cluster` 表示该作业使用 Per-Job 模式运行在 YARN 上。 -图9-3展示了Session模式的作业提交流程。 +{numref}`fig-session-submission` 展示了 Session 模式的作业提交流程。 -![图9-3 Session模式的作业提交流程](./img/session.png) +```{figure} ./img/session.png +--- +name: fig-session-submission +width: 80% +align: center +--- +Session 模式的作业提交流程 +``` -Session模式将在YARN上启动一个Flink集群,用户可以向该集群提交多个作业。 +Session 模式将在 YARN 上启动一个 Flink 集群,用户可以向该集群提交多个作业。 -首先,我们在Client上,用`bin/yarn-session.sh`启动一个YARN Session。Flink会先向YARN ResourceManager申请一个ApplicationMaster,里面运行着Dispatcher和Flink-YARN ResourceManager,这两个组件将长期对外提供服务。当提交一个具体的作业时,作业相关信息被发送给了Dispatcher,Dispatcher会启动针对该作业的JobManager。 +首先,我们在 Client 上,用 `bin/yarn-session.sh` 启动一个 YARN Session。Flink 会先向 YARN ResourceManager 申请一个 ApplicationMaster,里面运行着 Dispatcher 和 Flink-YARN ResourceManager,这两个组件将长期对外提供服务。当提交一个具体的作业时,作业相关信息被发送给了 Dispatcher,Dispatcher 会启动针对该作业的 JobManager。 -接下来的流程就与Per-Job模式几乎一模一样:JobManager申请Slot,Flink-YARN ResourceManager向YARN申请所需的Container,每个Container里启动TaskManager,TaskManager向Flink-YARN ResourceManager注册Slot,注册成功后,JobManager将计算任务部署到各TaskManager上。如果用户提交下一个作业,那么Dispatcher启动新的JobManager,新的JobManager负责新作业的资源申请和任务调度。 +接下来的流程就与 Per-Job 模式几乎一模一样:JobManager 申请 Slot,Flink-YARN ResourceManager 向 YARN 申请所需的 Container,每个 Container 里启动 TaskManager,TaskManager 向 Flink-YARN ResourceManager 注册 Slot,注册成功后,JobManager 将计算任务部署到各 TaskManager 上。如果用户提交下一个作业,那么 Dispatcher 启动新的 JobManager,新的 JobManager 负责新作业的资源申请和任务调度。 -下面的命令本启动了一个Session,该Session的JobManager内存大小为1024MB,TaskManager内存大小为4096MB。 +下面的命令本启动了一个 Session,该 Session 的 JobManager 内存大小为 1024MB,TaskManager 内存大小为 4096MB。 ```bash $ ./bin/yarn-session.sh -jm 1024m -tm 4096m ``` -启动后,屏幕上会显示Flink WebUI的连接信息。例如,在一个本地部署的YARN集群上创建一个Session后,假设分配的WebUI地址为:`http://192.168.31.167:54680/`。将地址复制到浏览器,打开即显示Flink WebUI。 +启动后,屏幕上会显示 Flink WebUI 的连接信息。例如,在一个本地部署的 YARN 集群上创建一个 Session 后,假设分配的 WebUI 地址为:`http://192.168.31.167:54680/`。将地址复制到浏览器,打开即显示 Flink WebUI。 -之后我们可以使用`bin/flink`在该Session上启动一个作业。 +之后我们可以使用 `bin/flink` 在该 Session 上启动一个作业。 ```bash $ ./bin/flink run ./examples/batch/WordCount.jar ``` -上述提交作业的命令没有特意指定连接信息,所提交的作业会直接在Session中运行,这是因为Flink已经将Session的连接信息记录了下来。从 Flink WebUI 页面上可以看到,刚开始启动时,UI上显示 Total/Available Task Slots 为0,Task Managers也为0。随着作业的提交,资源会动态增加:每提交一个新的作业,Flink-YARN ResourceManager会动态地向YARN ResourceManager申请资源。 +上述提交作业的命令没有特意指定连接信息,所提交的作业会直接在 Session 中运行,这是因为 Flink 已经将 Session 的连接信息记录了下来。从 Flink WebUI 页面上可以看到,刚开始启动时,UI 上显示 Total/Available Task Slots 为 0,Task Managers 也为 0。随着作业的提交,资源会动态增加:每提交一个新的作业,Flink-YARN ResourceManager 会动态地向 YARN ResourceManager 申请资源。 -比较Per-Job模式和Session模式发现:Per-Job模式下,一个作业运行完后,JobManager、TaskManager都会退出,Container资源会释放,作业会在资源申请和释放上消耗时间;Session模式下,Dispatcher和Flink-YARN ResourceManager是可以被多个作业复用的。无论哪种模式,每个作业都有一个JobManager与之对应,该JobManager负责单个作业的资源申请、任务调度、Checkpoint等协调性功能。Per-Job模式更适合长时间运行的作业,作业对启动时间不敏感,一般是长期运行的流处理任务。Session模式更适合短时间运行的作业,一般是批处理任务。 +比较 Per-Job 模式和 Session 模式发现:Per-Job 模式下,一个作业运行完后,JobManager、TaskManager 都会退出,Container 资源会释放,作业会在资源申请和释放上消耗时间;Session 模式下,Dispatcher 和 Flink-YARN ResourceManager 是可以被多个作业复用的。无论哪种模式,每个作业都有一个 JobManager 与之对应,该 JobManager 负责单个作业的资源申请、任务调度、Checkpoint 等协调性功能。Per-Job 模式更适合长时间运行的作业,作业对启动时间不敏感,一般是长期运行的流处理任务。Session 模式更适合短时间运行的作业,一般是批处理任务。 -除了Per-Job模式和Session模式,Flink还提供了一个Application模式。Per-Job和Session模式作业提交的过程比较依赖Client,一个作业的main()方法是在Client上执行的。main()方法会将作业的各个依赖下载到本地,生成JobGraph,并将依赖以及JobGraph发送到Flink集群。在Client上执行main()方法会导致Client的负载很重,因为下载依赖和将依赖打包发送到Flink集群都对网络带宽有一定要求,执行main()方法会加重CPU的负担。而且在很多企业,多个用户会共享一个Client,多人共用加重了Client的压力。为了解决这个问题,Flink的Application模式允许main()方法在JobManager上执行,这样可以分担Client的压力。在资源隔离层面上,Application模式与Per-Job模式基本一样,相当于为每个作业应用创建一个Flink集群。 +除了 Per-Job 模式和 Session 模式,Flink 还提供了一个 Application 模式。Per-Job 和 Session 模式作业提交的过程比较依赖 Client,一个作业的 main()方法是在 Client 上执行的。main() 方法会将作业的各个依赖下载到本地,生成 JobGraph,并将依赖以及 JobGraph 发送到 Flink 集群。在 Client 上执行 main()方法会导致 Client 的负载很重,因为下载依赖和将依赖打包发送到 Flink 集群都对网络带宽有一定要求,执行 main() 方法会加重 CPU 的负担。而且在很多企业,多个用户会共享一个 Client,多人共用加重了 Client 的压力。为了解决这个问题,Flink 的 Application 模式允许 main() 方法在 JobManager 上执行,这样可以分担 Client 的压力。在资源隔离层面上,Application 模式与 Per-Job 模式基本一样,相当于为每个作业应用创建一个 Flink 集群。 -具体而言,我们可以用下面的代码,基于Application模式提交作业。 +具体而言,我们可以用下面的代码,基于 Application 模式提交作业。 ```bash $ ./bin/flink run-application -t yarn-application \ @@ -95,26 +117,33 @@ $ ./bin/flink run-application -t yarn-application \ ./examples/batch/WordCount.jar ``` -在上面这段提交作业的代码中,`run-application`表示使用Application模式,`-D`前缀加上参数配置来设置一些参数,这与Per-Job模式和Session模式的参数设置稍有不同。为了让作业下载各种依赖,可以向HDFS上传一些常用的JAR包,本例中上传路径是`hdfs://myhdfs/my-remote-flink-dist-dir`,然后使用`-Dyarn.provided.lib.dirs`告知Flink上传JAR包的地址,Flink的JobManager会前往这个地址下载各种依赖。 +在上面这段提交作业的代码中,`run-application` 表示使用 Application 模式,`-D` 前缀加上参数配置来设置一些参数,这与 Per-Job 模式和 Session 模式的参数设置稍有不同。为了让作业下载各种依赖,可以向 HDFS 上传一些常用的 JAR 包,本例中上传路径是 `hdfs://myhdfs/my-remote-flink-dist-dir`,然后使用 `-Dyarn.provided.lib.dirs` 告知 Flink 上传 JAR 包的地址,Flink 的 JobManager 会前往这个地址下载各种依赖。 -## 9.1.3 Kubernetes集群 +## Kubernetes 集群 -Kubernetes(简称K8s)是一个开源的Container编排平台。近年来,Container以及Kubernetes大行其道,获得了业界的广泛关注,很多信息系统正在逐渐将业务迁移到Kubernetes上。 +Kubernetes(简称 K8s)是一个开源的 Container 编排平台。近年来,Container 以及 Kubernetes 大行其道,获得了业界的广泛关注,很多信息系统正在逐渐将业务迁移到 Kubernetes 上。 -在Flink 1.10之前,Flink的Kubernetes部署需要用户对Kubernetes各组件和工具有一定的了解,而Kubernetes涉及的组件和概念较多,学习成本较高。和YARN一样,Flink Kubernetes部署方式支持Per-Job和Session两种模式。为了进一步减小Kubernetes部署的难度,Flink 1.10提出了原生Kubernetes部署,同时也保留了之前的模式。新的Kubernetes部署非常简单,将会成为未来的趋势,因此本小节只介绍这种原生Kubernetes部署方式。 +在 Flink 1.10 之前,Flink 的 Kubernetes 部署需要用户对 Kubernetes 各组件和工具有一定的了解,而 Kubernetes 涉及的组件和概念较多,学习成本较高。和 YARN 一样,Flink Kubernetes 部署方式支持 Per-Job 和 Session 两种模式。为了进一步减小 Kubernetes 部署的难度,Flink 1.10 提出了原生 Kubernetes 部署,同时也保留了之前的模式。新的 Kubernetes 部署非常简单,将会成为未来的趋势,因此本小节只介绍这种原生 Kubernetes 部署方式。 注意: -原生Kubernetes部署是Flink 1.10推出的新功能,还在持续迭代中,一些配置文件和命令行参数有可能在未来的版本迭代中发生变化,读者使用前最好阅读最新的官方文档。 +原生 Kubernetes 部署是 Flink 1.10 推出的新功能,还在持续迭代中,一些配置文件和命令行参数有可能在未来的版本迭代中发生变化,读者使用前最好阅读最新的官方文档。 -在使用Kubernetes之前,需要确保Kubernetes版本为1.9以上,配置`~/.kube/config`文件,提前创建用户,并赋予相应权限。 +在使用 Kubernetes 之前,需要确保 Kubernetes 版本为 1.9 以上,配置 `~/.kube/config` 文件,提前创建用户,并赋予相应权限。 -Flink原生Kubernetes部署目前支持Session模式和Application模式。Session模式是在Kubernetes集群上启动Session,然后在Session中提交多个作业。未来的版本将支持原生Kubernetes Per-Job模式。图9-4所示为一个原生Kubernetes Session模式的作业提交流程。 +Flink 原生 Kubernetes 部署目前支持 Session 模式和 Application 模式。Session 模式是在 Kubernetes 集群上启动 Session,然后在 Session 中提交多个作业。未来的版本将支持原生 Kubernetes Per-Job 模式。{numref}`fig-kubernetes-session-submission` 所示为一个原生 Kubernetes Session 模式的作业提交流程。 -![图9-4 原生Kubernetes Session模式的作业提交流程](./img/Kubernetes-Session.png) +```{figure} ./img/Kubernetes-Session.png +--- +name: fig-kubernetes-session-submission +width: 80% +align: center +--- +原生 Kubernetes Session 模式的作业提交流程 +``` -如图9-4中所示的第1步,我们用`bin/kubernetes-session.sh`启动一个Kubernetes Session,Kubernetes相关组件将进行初始化,Kubernetes Master、ConfigMap和Kubernetes Service等模块生成相关配置,剩下的流程与YARN的Session模式几乎一致。Client提交作业到Dispatcher,Dispatcher启动一个JobManager,JobManager向Flink-Kubernetes ResourceManager申请Slot,Flink-Kubernetes ResourceManager进而向Kubernetes Master申请资源。Kubernetes Master分配资源,启动Kubernetes Pod,运行TaskManager,TaskManager向Flink-Kubernetes ResourceManager注册Slot,这个作业可以基于这些资源进行部署。 +如 {numref}`fig-kubernetes-session-submission` 中所示的第 1 步,我们用 `bin/kubernetes-session.sh` 启动一个 Kubernetes Session,Kubernetes 相关组件将进行初始化,Kubernetes Master、ConfigMap 和 Kubernetes Service 等模块生成相关配置,剩下的流程与 YARN 的 Session 模式几乎一致。Client 提交作业到 Dispatcher,Dispatcher 启动一个 JobManager,JobManager 向 Flink-Kubernetes ResourceManager 申请 Slot,Flink-Kubernetes ResourceManager 进而向 Kubernetes Master 申请资源。Kubernetes Master 分配资源,启动 Kubernetes Pod,运行 TaskManager,TaskManager 向 Flink-Kubernetes ResourceManager 注册 Slot,这个作业可以基于这些资源进行部署。 -如图9-4中所示的第1步,我们需要启动一个Flink Kubernetes Session,其他参数需要参考Flink官方文档中的说明,相关命令如下。 +如 {numref}`fig-kubernetes-session-submission` 中所示的第 1 步,我们需要启动一个 Flink Kubernetes Session,其他参数需要参考 Flink 官方文档中的说明,相关命令如下。 ```bash $ ./bin/kubernetes-session.sh \ @@ -126,24 +155,24 @@ $ ./bin/kubernetes-session.sh \ -Dresourcemanager.taskmanager-timeout=3600000 ``` -上面的命令启动了一个名为ClusterId的Flink Kubernetes Session集群,集群中的每个TaskManager有2个CPU、4096MB的内存、4个Slot。ClusterId是该Flink Kubernetes Session集群的标识,实际使用时我们需要设置一个名字,如果不进行设置,Flink会给我们分配一个名字。 +上面的命令启动了一个名为 ClusterId 的 Flink Kubernetes Session 集群,集群中的每个 TaskManager 有 2 个 CPU、4096MB 的内存、4 个 Slot。ClusterId 是该 Flink Kubernetes Session 集群的标识,实际使用时我们需要设置一个名字,如果不进行设置,Flink 会给我们分配一个名字。 -为了使用Flink WebUI,可以使用下面的命令进行端口转发。 +为了使用 Flink WebUI,可以使用下面的命令进行端口转发。 ```bash $ kubectl port-forward service/ 8081 ``` -在浏览器中打开地址`http://127.0.0.1:8001`,就能看到Flink的WebUI了。与Flink YARN Session一样,刚开始所有的资源都是0,随着作业的提交,Flink会动态地向Kubernetes申请更多资源。 +在浏览器中打开地址 `http://127.0.0.1:8001`,就能看到 Flink 的 WebUI 了。与 Flink YARN Session 一样,刚开始所有的资源都是 0,随着作业的提交,Flink 会动态地向 Kubernetes 申请更多资源。 -我们继续使用`bin/flink`向这个Session集群中提交作业。 +我们继续使用 `bin/flink` 向这个 Session 集群中提交作业。 ```bash $ ./bin/flink run -d -e kubernetes-session \ -Dkubernetes.cluster-id= examples/streaming/WindowJoin.jar ``` -可以使用下面的命令关停这个Flink Kubernetes Session集群。 +可以使用下面的命令关停这个 Flink Kubernetes Session 集群。 ```bash $ echo 'stop' | ./bin/kubernetes-session.sh \ @@ -151,7 +180,7 @@ $ echo 'stop' | ./bin/kubernetes-session.sh \ -Dexecution.attached=true ``` -原生Kubernetes也有Application模式,Kubernetes Application模式与YARN Application模式类似。使用时,需要先将作业打成JAR包,放到Docker镜像中,代码如下。 +原生 Kubernetes 也有 Application 模式,Kubernetes Application 模式与 YARN Application 模式类似。使用时,需要先将作业打成 JAR 包,放到 Docker 镜像中,代码如下。 ```dockerfile FROM flink @@ -171,4 +200,4 @@ $ ./bin/flink run-application -p 8 -t kubernetes-application \ local:///opt/flink/usrlib/my-flink-job.jar ``` -其中,`-Dkubernetes.container.image`用来配置自定义的镜像,`local:///opt/flink/usrlib/my-flink-job.jar`表示JAR包在镜像中的位置。 +其中,`-Dkubernetes.container.image` 用来配置自定义的镜像,`local:///opt/flink/usrlib/my-flink-job.jar` 表示 JAR 包在镜像中的位置。 diff --git a/doc/ch-deployment-and-configuration/hadoop-flink.md b/doc/ch-deployment-and-configuration/hadoop-flink.md index 5db9cbd..49b4732 100644 --- a/doc/ch-deployment-and-configuration/hadoop-flink.md +++ b/doc/ch-deployment-and-configuration/hadoop-flink.md @@ -1,58 +1,58 @@ (hadoop-flink)= -# 与Hadoop集成 +# 与 Hadoop 集成 -Flink可以和Hadoop生态圈的组件紧密结合,比如9.1节中提到,Flink可以使用YARN作为资源调度器,或者读取HDFS、HBase中的数据。在使用Hadoop前,我们需要确认已经安装了Hadoop,并配置了环境变量`HADOOP_CONF_DIR`,如下环境变量配置是Hadoop安装过程所必需的。 +Flink 可以和 Hadoop 生态圈的组件紧密结合,比如 9.1 节中提到,Flink 可以使用 YARN 作为资源调度器,或者读取 HDFS、HBase 中的数据。在使用 Hadoop 前,我们需要确认已经安装了 Hadoop,并配置了环境变量 `HADOOP_CONF_DIR`,如下环境变量配置是 Hadoop 安装过程所必需的。 ```bash HADOOP_CONF_DIR=/path/to/etc/hadoop ``` -此外,Flink与Hadoop集成时,需要将Hadoop的依赖包添加到Flink中,或者说让Flink能够获取到Hadoop类。比如,使用`bin/yarn-session.sh`启动一个Flink YARN Session时,如果没有设置Hadoop依赖,将会出现下面的报错。 +此外,Flink 与 Hadoop 集成时,需要将 Hadoop 的依赖包添加到 Flink 中,或者说让 Flink 能够获取到 Hadoop 类。比如,使用 `bin/yarn-session.sh` 启动一个 Flink YARN Session 时,如果没有设置 Hadoop 依赖,将会出现下面的报错。 ```java java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnException ``` -这是因为Flink源码中引用了Hadoop YARN的代码,但是在Flink官网提供的Flink下载包中,新版本的Flink已经不提供Hadoop集成,或者说,Hadoop相关依赖包不会放入Flink包中。Flink将Hadoop剔除的主要原因是Hadoop发布和构建的时间过长,不利于Flink的迭代。Flink鼓励用户自己根据需要引入Hadoop依赖包,具体有如下两种方式。 +这是因为 Flink 源码中引用了 Hadoop YARN 的代码,但是在 Flink 官网提供的 Flink 下载包中,新版本的 Flink 已经不提供 Hadoop 集成,或者说,Hadoop 相关依赖包不会放入 Flink 包中。Flink 将 Hadoop 剔除的主要原因是 Hadoop 发布和构建的时间过长,不利于 Flink 的迭代。Flink 鼓励用户自己根据需要引入 Hadoop 依赖包,具体有如下两种方式。 -1. 在环境变量中添加Hadoop Classpath,Flink从Hadoop Classpath中读取所需依赖包。 -2. 将所需的Hadoop 依赖包添加到Flink主目录下的lib目录中。 +1. 在环境变量中添加 Hadoop Classpath,Flink 从 Hadoop Classpath 中读取所需依赖包。 +2. 将所需的 Hadoop 依赖包添加到 Flink 主目录下的 lib 目录中。 -## 9.5.1 添加Hadoop Classpath +## 添加 Hadoop Classpath -Flink使用环境变量`$HADOOP_CLASSPATH`来存储Hadoop相关依赖包的路径,或者说,`$HADOOP_CLASSPATH`中的路径会添加到`-classpath`参数中。很多Hadoop发行版以及一些云环境默认情况下并不会设置这个变量,因此,执行Hadoop的各节点应该在其环境变量中设置`$HADOOP_CLASSPATH`。 +Flink 使用环境变量 `$HADOOP_CLASSPATH` 来存储 Hadoop 相关依赖包的路径,或者说,`$HADOOP_CLASSPATH` 中的路径会添加到 `-classpath` 参数中。很多 Hadoop 发行版以及一些云环境默认情况下并不会设置这个变量,因此,执行 Hadoop 的各节点应该在其环境变量中设置 `$HADOOP_CLASSPATH`。 ```bash export HADOOP_CLASSPATH=`hadoop classpath` ``` -上面的命令中,`hadoop`是Hadoop提供的二进制命令工具,使用前必须保证`hadoop`命令添加到了环境变量`$PATH`中,`classpath`是`hadoop`命令的一个参数选项。`hadoop classpath`可以返回Hadoop所有相关的依赖包,将这些路径输出。如果在一台安装了Hadoop的节点上执行`hadoop classpath`,下面是部分返回结果。 +上面的命令中,`hadoop` 是 Hadoop 提供的二进制命令工具,使用前必须保证 `hadoop` 命令添加到了环境变量 `$PATH` 中,`classpath` 是 `hadoop` 命令的一个参数选项。`hadoop classpath` 可以返回 Hadoop 所有相关的依赖包,将这些路径输出。如果在一台安装了 Hadoop 的节点上执行 `hadoop classpath`,下面是部分返回结果。 ```plaintext /path/to/hadoop/etc/hadoop:/path/to/hadoop/share/hadoop/common/lib/*:/path/to/hadoop/share/hadoop/yarn/lib/*:... ``` -Flink启动时,会从`$HADOOP_CLASSPATH`中寻找所需依赖包。这些依赖包来自节点所安装的Hadoop,也就是说Flink可以和已经安装的Hadoop紧密结合起来。但Hadoop的依赖错综复杂,Flink所需要的依赖和Hadoop提供的依赖有可能发生冲突。 -该方式只需要设置`$HADOOP_CLASSPATH`,简单快捷,缺点是有依赖冲突的风险。 +Flink 启动时,会从 `$HADOOP_CLASSPATH` 中寻找所需依赖包。这些依赖包来自节点所安装的 Hadoop,也就是说 Flink 可以和已经安装的 Hadoop 紧密结合起来。但 Hadoop 的依赖错综复杂,Flink 所需要的依赖和 Hadoop 提供的依赖有可能发生冲突。 +该方式只需要设置 `$HADOOP_CLASSPATH`,简单快捷,缺点是有依赖冲突的风险。 -## 9.5.2 将Hadoop依赖包添加到lib目录中 +## 将 Hadoop 依赖包添加到 lib 目录中 -Flink主目录下有一个`lib`目录,专门存放各类第三方的依赖包。Flink程序启动时,会将`lib`目录加载到Classpath中。我们可以将所需的Hadoop 依赖包添加到`lib`目录中。具体有两种获取Hadoop 依赖包的方式:一种是从Flink官网下载预打包的Hadoop依赖包,一种是从源码编译。 +Flink 主目录下有一个 `lib` 目录,专门存放各类第三方的依赖包。Flink 程序启动时,会将 `lib` 目录加载到 Classpath 中。我们可以将所需的 Hadoop 依赖包添加到 `lib` 目录中。具体有两种获取 Hadoop 依赖包的方式:一种是从 Flink 官网下载预打包的 Hadoop 依赖包,一种是从源码编译。 -Flink社区帮忙编译生成了常用Hadoop版本的Flink依赖包,比如Hadoop 2.8.3、Hadoop 2.7.5等,使用这些Hadoop版本的用户可以直接下载这些依赖包,并放置到`lib`目录中。例如,Hadoop 2.8.3的用户可以下载`flink-shaded-Hadoop-2-uber-2.8.3-10.0.jar`,将这个依赖包添加到Flink主目录下的`lib`目录中。 +Flink 社区帮忙编译生成了常用 Hadoop 版本的 Flink 依赖包,比如 Hadoop 2.8.3、Hadoop 2.7.5 等,使用这些 Hadoop 版本的用户可以直接下载这些依赖包,并放置到 `lib` 目录中。例如,Hadoop 2.8.3 的用户可以下载 `flink-shaded-Hadoop-2-uber-2.8.3-10.0.jar`,将这个依赖包添加到 Flink 主目录下的 `lib` 目录中。 -如果用户使用的Hadoop版本比较特殊,不在下载列表里,比如是Cloudera等厂商发行的Hadoop,用户需要自己下载`flink-shaded`工程源码,基于源码和自己的Hadoop版本自行编译生成依赖包。编译命令如下。 +如果用户使用的 Hadoop 版本比较特殊,不在下载列表里,比如是 Cloudera 等厂商发行的 Hadoop,用户需要自己下载 `flink-shaded` 工程源码,基于源码和自己的 Hadoop 版本自行编译生成依赖包。编译命令如下。 ```bash $ mvn clean install -Dhadoop.version=2.6.1 ``` -上面的命令编译了针对Hadoop 2.6.1的`flink-shaded`工程。编译完成后,将名为`flink-shaded-hadoop-2-uber`的依赖包添加到Flink主目录的`lib`目录中。 -该方式没有依赖冲突的风险,但源码编译需要用户对Maven和Hadoop都有一定的了解。 +上面的命令编译了针对 Hadoop 2.6.1 的 `flink-shaded` 工程。编译完成后,将名为 `flink-shaded-hadoop-2-uber` 的依赖包添加到 Flink 主目录的 `lib` 目录中。 +该方式没有依赖冲突的风险,但源码编译需要用户对 Maven 和 Hadoop 都有一定的了解。 -## 9.5.3 本地调试 +## 本地调试 -9.5.1小节和9.5.2小节介绍的是针对Flink集群的Hadoop依赖设置方式,如果我们仅想在本地的IntelliJ IDEA里调试Flink Hadoop相关的程序,我们可以将下面的Maven依赖添加到`pom.xml`中。 +9.5.1 小节和 9.5.2 小节介绍的是针对 Flink 集群的 Hadoop 依赖设置方式,如果我们仅想在本地的 IntelliJ IDEA 里调试 Flink Hadoop 相关的程序,我们可以将下面的 Maven 依赖添加到 `pom.xml` 中。 ```xml diff --git a/doc/ch-deployment-and-configuration/index.md b/doc/ch-deployment-and-configuration/index.md index 4b1b6fa..07f462c 100644 --- a/doc/ch-deployment-and-configuration/index.md +++ b/doc/ch-deployment-and-configuration/index.md @@ -1,6 +1,6 @@ -# Flink的部署和配置 +# Flink 的部署和配置 -通过对前文的学习,我们已经学习了如何编写Flink程序,包括使用DataStream API和使用Table API & SQL来编写程序。本章将重点介绍如何部署和配置Flink作业,主要内容如下: +通过对前文的学习,我们已经学习了如何编写 Flink 程序,包括使用 DataStream API 和使用 Table API & SQL 来编写程序。本章将重点介绍如何部署和配置 Flink 作业,主要内容如下: ```{tableofcontents} ``` \ No newline at end of file diff --git a/doc/ch-deployment-and-configuration/operator-chaining-and-slot-sharing.md b/doc/ch-deployment-and-configuration/operator-chaining-and-slot-sharing.md index 9a1fc9e..526d968 100644 --- a/doc/ch-deployment-and-configuration/operator-chaining-and-slot-sharing.md +++ b/doc/ch-deployment-and-configuration/operator-chaining-and-slot-sharing.md @@ -1,17 +1,19 @@ (operator-chaining-and-slot-sharing)= # 算子链与槽位共享 -在第3章中我们曾介绍了算子链和槽位共享的概念。默认情况下,这两个功能都是开启的。 +在第 3 章中我们曾介绍了算子链和槽位共享的概念。默认情况下,这两个功能都是开启的。 -## 9.3.1 设置算子链 +## 设置算子链 -Flink会使用算子链将尽可能多的上、下游算子链接到一起,链接到一起的上、下游算子会被捆绑到一起,作为一个线程执行。假如两个算子不进行链接,那么这两个算子间的数据通信存在序列化和反序列化,通信成本较高,所以说算子链可以在一定程度上提高资源利用率。 +Flink 会使用算子链将尽可能多的上、下游算子链接到一起,链接到一起的上、下游算子会被捆绑到一起,作为一个线程执行。假如两个算子不进行链接,那么这两个算子间的数据通信存在序列化和反序列化,通信成本较高,所以说算子链可以在一定程度上提高资源利用率。 -**注意** +:::{note} -Flink无法把所有算子都链接到一起。上游算子将所有数据前向传播到下游算子上,数据不进行任何交换,那么这两个算子可以被链接到一起。比如,先进行`filter()`,再进行`map()`,这两个算子可以被链接到一起。Flink源码`org.apache.flink.streaming.api.graph.StreamingJobGraphGenerator`中的`isChainable()`方法定义了何种情况可以进行链接,感兴趣的读者可以阅读一下相关代码。 +Flink 无法把所有算子都链接到一起。上游算子将所有数据前向传播到下游算子上,数据不进行任何交换,那么这两个算子可以被链接到一起。比如,先进行 `filter()`,再进行 `map()`,这两个算子可以被链接到一起。Flink 源码 `org.apache.flink.streaming.api.graph.StreamingJobGraphGenerator` 中的 `isChainable()` 方法定义了何种情况可以进行链接,感兴趣的读者可以阅读一下相关代码。 -另外一些情况下,算子不适合链接在一起,比如两个算子的负载都很高,这时候应该让两个算子拆分到不同的Slot上执行。下面的代码从整个执行环境层面关闭了算子链。 +::: + +另外一些情况下,算子不适合链接在一起,比如两个算子的负载都很高,这时候应该让两个算子拆分到不同的 Slot 上执行。下面的代码从整个执行环境层面关闭了算子链。 ```java StreamExecutionEnvironment env = ... @@ -19,7 +21,7 @@ StreamExecutionEnvironment env = ... env.disableOperatorChaining(); ``` -关闭算子链之后,我们可以使用`startNewChain()`方法,根据需要对特定的算子进行链接。 +关闭算子链之后,我们可以使用 `startNewChain()` 方法,根据需要对特定的算子进行链接。 ```java DataStream result = input @@ -30,8 +32,8 @@ DataStream result = input .filter(new Filter2()); ``` -上面的例子中,`Filter1`和`Map1`被链接到了一起,`Map2`和`Filter2`被链接到了一起。 -也可以使用`disableChaining()`方法,对当前算子禁用算子链。 +上面的例子中,`Filter1` 和 `Map1` 被链接到了一起,`Map2` 和 `Filter2` 被链接到了一起。 +也可以使用 `disableChaining()` 方法,对当前算子禁用算子链。 ```java DataStream result = input @@ -41,22 +43,36 @@ DataStream result = input .map(new Map2()).disableChaining(); ``` -上面的例子中,`Filter1`和`Map1`被链接到了一起,`Map2`被分离出来。 +上面的例子中,`Filter1` 和 `Map1` 被链接到了一起,`Map2` 被分离出来。 -## 9.3.2 设置槽位共享 +## 设置槽位共享 -第3章中我们提到,Flink默认开启了槽位共享,从Source到Sink的所有算子子任务可以共享一个Slot,共享计算资源。或者说,从Source到Sink的所有算子子任务组成的Pipeline共享一个Slot。我们仍然以第3章使用的WordCount程序为例,整个TaskManager下有4个Slot,我们设置作业的并行度为2,其作业的执行情况如图9-7所示。可以看到,一个Slot中包含了从Source到Sink的整个Pipeline。图9-7中Source和FlatMap两个算子被放在一起是因为默认开启了算子链。 +第 3 章中我们提到,Flink 默认开启了槽位共享,从 Source 到 Sink 的所有算子子任务可以共享一个 Slot,共享计算资源。或者说,从 Source 到 Sink 的所有算子子任务组成的 Pipeline 共享一个 Slot。我们仍然以第 3 章使用的 WordCount 程序为例,整个 TaskManager 下有 4 个 Slot,我们设置作业的并行度为 2,其作业的执行情况如图 9-7 所示。可以看到,一个 Slot 中包含了从 Source 到 Sink 的整个 Pipeline。{numref}`fig-default-slot-sharing-pipeline` 中 Source 和 FlatMap 两个算子被放在一起是因为默认开启了算子链。 -![图9-7 默认情况下,槽位共享使得整个算子的Pipeline可以放在一个Slot中执行](./img/default-slot-sharing-pipeline.png) +```{figure} ./img/default-slot-sharing-pipeline.png +--- +name: fig-default-slot-sharing-pipeline +width: 80% +align: center +--- +默认情况下,槽位共享使得整个算子的 Pipeline 可以放在一个 Slot 中执行 +``` -跟算子链一样,过多的计算任务集中在一个Slot,有可能导致该Slot的负载过大。每个算子都有一个槽位共享组(Slot Sharing Group)。默认情况下,算子都会被分到`default`组中,也就意味着在最终的物理执行图中,从Source到Sink上、下游的算子子任务可以共享一个Slot。我们可以用`slotSharingGroup(String)`方法将某个算子分到特定的组中。例如,下面的代码把WordCount程序中的`WindowAggregation`算子划分到名为`A`的组中。 +跟算子链一样,过多的计算任务集中在一个 Slot,有可能导致该 Slot 的负载过大。每个算子都有一个槽位共享组(Slot Sharing Group)。默认情况下,算子都会被分到 `default` 组中,也就意味着在最终的物理执行图中,从 Source 到 Sink 上、下游的算子子任务可以共享一个 Slot。我们可以用 `slotSharingGroup(String)` 方法将某个算子分到特定的组中。例如,下面的代码把 WordCount 程序中的 `WindowAggregation` 算子划分到名为 `A` 的组中。 ```java stream.timeWindow(...).sum(...).slotSharingGroup("A"); ``` -图9-8 展示了这个作业的执行情况,Window Aggregation和Sink都被划分到另外的Slot里执行。这里需要注意的是,我们没有明确给Sink设置Slot Sharing Group,Sink继承了前序算子(Window Aggregation)的Slot Sharing Group,与之一起划分到同一组。 +{numref}`fig-window-aggregation-slot-sharing-group` 展示了这个作业的执行情况,Window Aggregation 和 Sink 都被划分到另外的 Slot 里执行。这里需要注意的是,我们没有明确给 Sink 设置 Slot Sharing Group,Sink 继承了前序算子(Window Aggregation)的 Slot Sharing Group,与之一起划分到同一组。 -第3章中我们提到,未开启算子链和槽位共享的情况下,一个算子子任务应该占用一个Slot。算子链和槽位共享可以让更多算子子任务共享一个Slot。默认情况下算子链和槽位共享是开启的,所以可以让图9-7中所示的从Source到Sink的Pipeline都共享一个Slot。如果一个作业的并行度为`parallelism`,该作业至少需要个数为`parallelism`的Slot。自定义算子链和槽位共享会打断算子子任务之间的共享,当然也会使该作业所需要的Slot数量大于`parallelism`。 +第 3 章中我们提到,未开启算子链和槽位共享的情况下,一个算子子任务应该占用一个 Slot。算子链和槽位共享可以让更多算子子任务共享一个 Slot。默认情况下算子链和槽位共享是开启的,所以可以让图 9-7 中所示的从 Source 到 Sink 的 Pipeline 都共享一个 Slot。如果一个作业的并行度为 `parallelism`,该作业至少需要个数为 `parallelism` 的 Slot。自定义算子链和槽位共享会打断算子子任务之间的共享,当然也会使该作业所需要的 Slot 数量大于 `parallelism`。 -![图9-8 给Window Aggreagtion设置Slot Sharing Group后,该算子及之后的算子被划分到其他Slot](./img/window-aggregation-slot-sharing-group.png) \ No newline at end of file +```{figure} ./img/window-aggregation-slot-sharing-group.png +--- +name: fig-window-aggregation-slot-sharing-group +width: 80% +align: center +--- +给 Window Aggregation 设置 Slot Sharing Group 后,该算子及之后的算子被划分到其他 Slot +``` \ No newline at end of file diff --git a/doc/ch-flink-connectors/Exactly-Once-guarantee.md b/doc/ch-flink-connectors/Exactly-Once-guarantee.md index 1c6e99c..4a986fb 100644 --- a/doc/ch-flink-connectors/Exactly-Once-guarantee.md +++ b/doc/ch-flink-connectors/Exactly-Once-guarantee.md @@ -1,36 +1,50 @@ (Exactly-Once-guarantee)= -# Flink端到端的Exactly-Once保障 +# Flink 端到端的 Exactly-Once 保障 -## 7.1.1 故障恢复与一致性保障 +## 故障恢复与一致性保障 -在流处理系统中,确保每条数据只被处理一次(Exactly-Once)是一种理想情况。然而,现实中的系统经常因各种意外因素发生故障,如流量激增、网络抖动等。Flink通过重启作业、读取Checkpoint数据、恢复状态和重新执行计算来处理这些故障。 +在流处理系统中,确保每条数据只被处理一次(Exactly-Once)是一种理想情况。然而,现实中的系统经常因各种意外因素发生故障,如流量激增、网络抖动等。Flink 通过重启作业、读取 Checkpoint 数据、恢复状态和重新执行计算来处理这些故障。 -Checkpoint和故障恢复过程保证了内部状态的一致性,但可能导致数据重发。如图7-1所示,假设最近一次Checkpoint的时间戳是3,系统在时间戳10处发生故障。在3到10之间处理的数据(如时间戳5和8的数据)需要重新处理。 +Checkpoint 和故障恢复过程保证了内部状态的一致性,但可能导致数据重发。如 {numref}`fig-data-redundancy-issues` 所示,假设最近一次 Checkpoint 的时间戳是 3,系统在时间戳 10 处发生故障。在 3 到 10 之间处理的数据(如时间戳 5 和 8 的数据)需要重新处理。 -Flink的Checkpoint过程保证了作业内部的数据一致性,主要通过备份以下两类数据: +Flink 的 Checkpoint 过程保证了作业内部的数据一致性,主要通过备份以下两类数据: 1. 作业中每个算子的状态。 -2. 输入数据的偏移量Offset。 +2. 输入数据的偏移量 Offset。 -![图7-1 Checkpoint和故障恢复过程会有数据重发问题](./img/data-redundancy-issues.png) +```{figure} ./img/data-redundancy-issues.png +--- +name: fig-data-redundancy-issues +width: 80% +align: center +--- +Checkpoint 和故障恢复过程会有数据重发问题 +``` -数据重发类似于观看直播比赛的重播(Replay),但这可能导致时间戳3至10之间的数据被重发,从而引发At-Least-Once问题。为了实现端到端的Exactly-Once保障,需要依赖Source的重发功能和Sink的幂等写或事务写。 +数据重发类似于观看直播比赛的重播(Replay),但这可能导致时间戳 3 至 10 之间的数据被重发,从而引发 At-Least-Once 问题。为了实现端到端的 Exactly-Once 保障,需要依赖 Source 的重发功能和 Sink 的幂等写或事务写。 -## 7.1.2 幂等写 +## 幂等写 -幂等写(Idempotent Write)是指多次向系统写入数据只产生一次结果影响。例如,向HashMap插入同一个(Key, Value)二元组,只有第一次插入会改变HashMap,后续插入不会改变结果。 +幂等写(Idempotent Write)是指多次向系统写入数据只产生一次结果影响。例如,向 HashMap 插入同一个 (Key, Value) 二元组,只有第一次插入会改变 HashMap,后续插入不会改变结果。 -Key-Value数据库如Cassandra、HBase和Redis常作为Sink来实现端到端的Exactly-Once保障。但幂等写要求(Key, Value)必须是确定性计算的。例如,如果Key是`name + curTimestamp`,每次重发时生成的Key不同,导致多次结果。如果Key是`name + eventTimestamp`,则即使重发,Key也是确定的。 +Key-Value 数据库如 Cassandra、HBase 和 Redis 常作为 Sink 来实现端到端的 Exactly-Once 保障。但幂等写要求 (Key, Value) 必须是确定性计算的。例如,如果 Key 是 `name + curTimestamp`,每次重发时生成的 Key 不同,导致多次结果。如果 Key 是 `name + eventTimestamp`,则即使重发,Key 也是确定的。 -Key-Value数据库作为Sink可能遇到时间闪回问题。例如,重启后,之前提交的数据可能被错误地认为是新的操作,导致数据不一致。只有当所有数据重发完成后,数据才恢复一致性。 +Key-Value 数据库作为 Sink 可能遇到时间闪回问题。例如,重启后,之前提交的数据可能被错误地认为是新的操作,导致数据不一致。只有当所有数据重发完成后,数据才恢复一致性。 -## 7.1.3 事务写 +## 事务写 -事务(Transaction)是数据库系统解决的核心问题。Flink借鉴了数据库中的事务处理技术,结合Checkpoint机制来保证Sink只对外部输出产生一次影响。 +事务(Transaction)是数据库系统解决的核心问题。Flink 借鉴了数据库中的事务处理技术,结合 Checkpoint 机制来保证 Sink 只对外部输出产生一次影响。 -Flink的事务写(Transaction Write)是指,Flink先将待输出的数据保存,暂时不提交到外部系统;等到Checkpoint结束,所有算子的数据一致时,再将之前保存的数据提交到外部系统。如图7-2所示,使用事务写可以避免时间戳5的数据多次产生输出并提交到外部系统。 +Flink 的事务写(Transaction Write)是指,Flink 先将待输出的数据保存,暂时不提交到外部系统;等到 Checkpoint 结束,所有算子的数据一致时,再将之前保存的数据提交到外部系统。如 {numref}`fig-transactional-write` 所示,使用事务写可以避免时间戳 5 的数据多次产生输出并提交到外部系统。 -![图7-2 Flink的事务写](./img/transactional-write.png) +```{figure} ./img/transactional-write.png +--- +name: fig-transactional-write +width: 80% +align: center +--- +Flink 的事务写 +``` -Flink提供了两种事务写实现方式:预写日志(Write-Ahead-Log,WAL)和两阶段提交(Two-Phase-Commit,2PC)。这两种方式的主要区别在于:WAL方式使用Operator State缓存待输出的数据;如果外部系统支持事务(如Kafka),可以使用2PC方式,待输出数据被缓存在外部系统。 +Flink 提供了两种事务写实现方式:预写日志(Write-Ahead-Log,WAL)和两阶段提交(Two-Phase-Commit,2PC)。这两种方式的主要区别在于:WAL 方式使用 Operator State 缓存待输出的数据;如果外部系统支持事务(如 Kafka),可以使用 2PC 方式,待输出数据被缓存在外部系统。 -事务写能提供端到端的Exactly-Once保障,但牺牲了延迟,因为输出数据不再实时写入外部系统,而是分批次提交。开发者需要权衡不同需求。 \ No newline at end of file +事务写能提供端到端的 Exactly-Once 保障,但牺牲了延迟,因为输出数据不再实时写入外部系统,而是分批次提交。开发者需要权衡不同需求。 \ No newline at end of file diff --git a/doc/ch-flink-connectors/custom-source-and-sink.md b/doc/ch-flink-connectors/custom-source-and-sink.md index ab1541e..0447fbb 100644 --- a/doc/ch-flink-connectors/custom-source-and-sink.md +++ b/doc/ch-flink-connectors/custom-source-and-sink.md @@ -1,25 +1,25 @@ (custom-source-and-sink)= -# 自定义Source和Sink +# 自定义 Source 和 Sink -本节将从原理和实现两个方面来介绍Flink的Source和Sink。 +本节将从原理和实现两个方面来介绍 Flink 的 Source 和 Sink。 -## 7.2.1 Flink 1.11之前的Source +## Flink 1.11 之前的 Source -Flink 1.11重构了Source接口,是一个非常大的改动,新的Source接口提出了一些新的概念,在使用方式上与老Source接口有较大区别。这里将先重点介绍老的Source接口,因为老的Source接口更易于理解和实现,之后会简单介绍新的Source接口的原理。 +Flink 1.11 重构了 Source 接口,是一个非常大的改动,新的 Source 接口提出了一些新的概念,在使用方式上与老 Source 接口有较大区别。这里将先重点介绍老的 Source 接口,因为老的 Source 接口更易于理解和实现,之后会简单介绍新的 Source 接口的原理。 -### 实现SourceFunction +### 实现 SourceFunction -在本书提供的示例程序中曾大量使用各类自定义的Source,Flink提供了自定义Source的公开接口:SourceFunction的接口和RichSourceFunction的Rich函数类。自定义Source时必须实现两个方法。 +在本书提供的示例程序中曾大量使用各类自定义的 Source,Flink 提供了自定义 Source 的公开接口:SourceFunction 的接口和 RichSourceFunction 的 Rich 函数类。自定义 Source 时必须实现两个方法。 ```java -// Source启动后调用run()方法,生成数据并将其向下游发送 +// Source 启动后调用 run() 方法,生成数据并将其向下游发送 void run(SourceContext ctx) throws Exception; // 停止 void cancel(); ``` -run()方法在Source启动后开始执行,一般都会在方法中使用循环,在循环内不断向下游发送数据,发送数据时使用SourceContext.collect()方法。cancel()方法停止向下游继续发送数据。由于run()方法内一般会使用循环,可以使用一个boolean类型的标志位来标记Source是否在执行。当停止Source时,也要修改这个标志位。代码清单 7-1自定义Source,从0开始计数,将数字发送到下游。 +run()方法在 Source 启动后开始执行,一般都会在方法中使用循环,在循环内不断向下游发送数据,发送数据时使用 SourceContext.collect() 方法。cancel()方法停止向下游继续发送数据。由于 run() 方法内一般会使用循环,可以使用一个 boolean 类型的标志位来标记 Source 是否在执行。当停止 Source 时,也要修改这个标志位。代码清单 7-1 自定义 Source,从 0 开始计数,将数字发送到下游。 ```java private static class SimpleSource @@ -47,22 +47,22 @@ implements SourceFunction> { } ``` -在主逻辑中调用这个Source。 +在主逻辑中调用这个 Source。 ```java DataStream> countStream = env.addSource(new SimpleSource()); ``` -与第4章中介绍的DataStream API类似,RichSourceFunction提供了RuntimeContext,以及增加了open()方法用来初始化资源,close()方法用来关闭资源。RuntimeContext指运行时上下文,包括并行度、监控项MetricGroup等。比如,我们可以使用getRuntimeContext().getIndexOfThisSubtask()获取当前子任务是多个并行子任务中的哪一个。 +与第 4 章中介绍的 DataStream API 类似,RichSourceFunction 提供了 RuntimeContext,以及增加了 open()方法用来初始化资源,close() 方法用来关闭资源。RuntimeContext 指运行时上下文,包括并行度、监控项 MetricGroup 等。比如,我们可以使用 getRuntimeContext().getIndexOfThisSubtask() 获取当前子任务是多个并行子任务中的哪一个。 -### 可恢复的Source +### 可恢复的 Source -对于代码清单7-1所示的示例中,假如遇到故障,整个作业重启,Source每次从0开始,没有记录遇到故障前的任何信息,所以它不是一个可恢复的Source。我们在7.1节中讨论过,Source需要支持数据重发才能支持端到端的Exactly-Once保障。如果想支持数据重发,需要满足如下两点。 +对于代码清单 7-1 所示的示例中,假如遇到故障,整个作业重启,Source 每次从 0 开始,没有记录遇到故障前的任何信息,所以它不是一个可恢复的 Source。我们在 7.1 节中讨论过,Source 需要支持数据重发才能支持端到端的 Exactly-Once 保障。如果想支持数据重发,需要满足如下两点。 -1. Flink开启Checkpoint机制,Source将数据Offset定期写到Checkpoint中。作业重启后,Flink Source从最近一次的Checkpoint中恢复Offset数据。 -2. Flink所连接的上游系统支持从某个Offset开始重发数据。如果上游是Kafka,它是支持Offset重发的。如果上游是一个文件系统,读取文件时可以直接跳到Offset所在的位置,从该位置重新读取数据。 +1. Flink 开启 Checkpoint 机制,Source 将数据 Offset 定期写到 Checkpoint 中。作业重启后,Flink Source 从最近一次的 Checkpoint 中恢复 Offset 数据。 +2. Flink 所连接的上游系统支持从某个 Offset 开始重发数据。如果上游是 Kafka,它是支持 Offset 重发的。如果上游是一个文件系统,读取文件时可以直接跳到 Offset 所在的位置,从该位置重新读取数据。 -在第6章中我们曾详细讨论Flink的Checkpoint机制,其中提到Operator State经常用来在Source或Sink中记录Offset。我们在代码清单7-1的基础上做了一些修改,让整个Source能够支持Checkpoint,即使遇到故障,也可以根据最近一次Checkpoint中的数据进行恢复,如代码清单 7-2所示。 +在第 6 章中我们曾详细讨论 Flink 的 Checkpoint 机制,其中提到 Operator State 经常用来在 Source 或 Sink 中记录 Offset。我们在代码清单 7-1 的基础上做了一些修改,让整个 Source 能够支持 Checkpoint,即使遇到故障,也可以根据最近一次 Checkpoint 中的数据进行恢复,如代码清单 7-2 所示。 ```java private static class CheckpointedSource @@ -77,7 +77,7 @@ private static class CheckpointedSource public void run(SourceContext> ctx) throws Exception { while (isRunning) { Thread.sleep(100); - // 使用同步锁,当触发某次Checkpoint时,不向下游发送数据 + // 使用同步锁,当触发某次 Checkpoint 时,不向下游发送数据 synchronized (ctx.getCheckpointLock()) { ctx.collect(new Tuple2<>("" + offset, 1)); offset++; @@ -98,13 +98,13 @@ private static class CheckpointedSource Exception { // 清除上次状态 offsetState.clear(); - // 将最新的Offset添加到状态中 + // 将最新的 Offset 添加到状态中 offsetState.add(offset); } @Override public void initializeState(FunctionInitializationContext initializationContext) throws Exception { - // 初始化offsetState + // 初始化 offsetState ListStateDescriptor desc = new ListStateDescriptor("offset", Types.INT); offsetState = @@ -112,32 +112,32 @@ initializationContext.getOperatorStateStore().getListState(desc); Iterable iter = offsetState.get(); if (iter == null || !iter.iterator().hasNext()) { - // 第一次初始化,从0开始计数 + // 第一次初始化,从 0 开始计数 offset = 0; } else { - // 从状态中恢复Offset + // 从状态中恢复 Offset offset = iter.iterator().next(); } } } ``` -代码清单 7-2继承并实现了CheckpointedFunction,可以使用Operator State。整个作业第一次执行时,Flink会调用initializeState()方法,offset被设置为0,之后每隔一定时间触发一次Checkpoint,触发Checkpoint时会调用snapshotState()方法来更新状态到State Backend。如果遇到故障,重启后会从offsetState状态中恢复上次保存的Offset。 +代码清单 7-2 继承并实现了 CheckpointedFunction,可以使用 Operator State。整个作业第一次执行时,Flink 会调用 initializeState()方法,offset 被设置为 0,之后每隔一定时间触发一次 Checkpoint,触发 Checkpoint 时会调用 snapshotState() 方法来更新状态到 State Backend。如果遇到故障,重启后会从 offsetState 状态中恢复上次保存的 Offset。 -在run()方法中,我们增加了一个同步锁ctx.getCheckpointLock(),是为了当触发这次Checkpoint时,不向下游发送数据。或者说,等本次Checkpoint触发结束,snapshotState()方法执行完,再继续向下游发送数据。如果没有这个步骤,有可能会导致run()方法中Offset和snapshotState()方法中Checkpoint的Offset不一致。 +在 run()方法中,我们增加了一个同步锁 ctx.getCheckpointLock(),是为了当触发这次 Checkpoint 时,不向下游发送数据。或者说,等本次 Checkpoint 触发结束,snapshotState()方法执行完,再继续向下游发送数据。如果没有这个步骤,有可能会导致 run() 方法中 Offset 和 snapshotState() 方法中 Checkpoint 的 Offset 不一致。 -需要注意的是,主逻辑中需要开启Checkpoint机制,如代码清单 7-3所示。 +需要注意的是,主逻辑中需要开启 Checkpoint 机制,如代码清单 7-3 所示。 ```java public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); - // 访问 http://localhost:8082 可以看到Flink WebUI + // 访问 http://localhost:8082 可以看到 Flink WebUI conf.setInteger(RestOptions.PORT, 8082); - // 设置本地执行环境,并行度为1 + // 设置本地执行环境,并行度为 1 StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(1, conf); - // 每隔2秒触发一次Checkpoint + // 每隔 2 秒触发一次 Checkpoint env.getCheckpointConfig().setCheckpointInterval(2 * 1000); DataStream> countStream = env.addSource(new @@ -150,21 +150,21 @@ FailingMapper(20)); } ``` -上述代码使用FailingMapper模拟了一次故障。即使发生了故障,Flink仍然能自动重启,并从最近一次的Checkpoint数据中恢复状态。 +上述代码使用 FailingMapper 模拟了一次故障。即使发生了故障,Flink 仍然能自动重启,并从最近一次的 Checkpoint 数据中恢复状态。 -### 时间戳和Watermark +### 时间戳和 Watermark -在5.1.3小节,我们曾经介绍过如何设置一个基于Event Time数据流的时间戳和Watermark,其中一种办法就是在Source中设置。在自定义Source的过程中,SourceFunction.SourceContext提供了相应的方法。 +在 5.1.3 小节,我们曾经介绍过如何设置一个基于 Event Time 数据流的时间戳和 Watermark,其中一种办法就是在 Source 中设置。在自定义 Source 的过程中,SourceFunction.SourceContext 提供了相应的方法。 ```java -// 设置element的时间戳为timestamp,并将element发送出去 +// 设置 element 的时间戳为 timestamp,并将 element 发送出去 void collectWithTimestamp(T element, long timestamp); -// 发送一个Watermark +// 发送一个 Watermark void emitWatermark(Watermark mark); ``` -其中,SourceContext.collectWithTimestamp()是一种针对Event Time的发送数据的方法,它是SourceContext.collect()的一种特例。比如,我们可以将计数器Source中的run()方法修改如下。 +其中,SourceContext.collectWithTimestamp()是一种针对 Event Time 的发送数据的方法,它是 SourceContext.collect() 的一种特例。比如,我们可以将计数器 Source 中的 run() 方法修改如下。 ```java @Override @@ -175,7 +175,7 @@ public void run(SourceContext> ctx) throws Exception { ctx.collectWithTimestamp(new Tuple2<>("" + offset, offset), System.currentTimeMillis()); offset++; - // 每隔一段时间,发送一个Watermark + // 每隔一段时间,发送一个 Watermark if (offset % 100 == 0) { ctx.emitWatermark(new Watermark(System.currentTimeMillis())); } @@ -186,15 +186,15 @@ System.currentTimeMillis()); } ``` -如果使用Event Time时间语义,越早设置时间戳和Watermark,越能保证整个作业在时间序列上的准确性和健壮性。 +如果使用 Event Time 时间语义,越早设置时间戳和 Watermark,越能保证整个作业在时间序列上的准确性和健壮性。 -我们在5.1.3小节也曾介绍过,对于Event Time时间语义,算子有一个Watermark对齐的过程,某些上游数据源没有数据,将导致下游算子一直等待,无法继续处理新数据。这时候要及时使用SourceContext.markAsTemporarilyIdle()方法将该Source标记为空闲。比如,在实现Flink Kafka Source时,源码如下。 +我们在 5.1.3 小节也曾介绍过,对于 Event Time 时间语义,算子有一个 Watermark 对齐的过程,某些上游数据源没有数据,将导致下游算子一直等待,无法继续处理新数据。这时候要及时使用 SourceContext.markAsTemporarilyIdle() 方法将该 Source 标记为空闲。比如,在实现 Flink Kafka Source 时,源码如下。 ```java public void run(SourceContext sourceContext) throws Exception { ... - // 如果当前Source没有数据,将当前Source标记为空闲 - // 如果当前Source发现有新数据流入,会自动回归活跃状态 + // 如果当前 Source 没有数据,将当前 Source 标记为空闲 + // 如果当前 Source 发现有新数据流入,会自动回归活跃状态 if (subscribedPartitionsToStartOffsets.isEmpty()) { sourceContext.markAsTemporarilyIdle(); } @@ -204,80 +204,101 @@ public void run(SourceContext sourceContext) throws Exception { ### 并行版本 -上面提到的Source都是并行度为1的版本,或者说启动后只有一个子任务在执行。如果需要在多个子任务上并行执行的Source,可以实现ParallelSourceFunction和RichParallelSourceFunction两个类。 +上面提到的 Source 都是并行度为 1 的版本,或者说启动后只有一个子任务在执行。如果需要在多个子任务上并行执行的 Source,可以实现 ParallelSourceFunction 和 RichParallelSourceFunction 两个类。 -## 7.2.2 Flink 1.11之后的Source +## 7.2.2 Flink 1.11 之后的 Source -仔细分析上面的Source接口,可以发现这样的设计只适合进行流处理,批处理需要另外的接口。Flink在1.11之后提出了一个新的Source接口,主要目的是统一流处理和批处理两大计算模式,提供更大规模并行处理的能力。新的Source接口仍然处于实验阶段,一些Connnector仍然基于老的Source接口来实现的,本书只介绍大概的原理,暂时不从代码层面做具体展示。相信在不久的未来,更多Connector将使用新的Source接口来实现。 +仔细分析上面的 Source 接口,可以发现这样的设计只适合进行流处理,批处理需要另外的接口。Flink 在 1.11 之后提出了一个新的 Source 接口,主要目的是统一流处理和批处理两大计算模式,提供更大规模并行处理的能力。新的 Source 接口仍然处于实验阶段,一些 Connnector 仍然基于老的 Source 接口来实现的,本书只介绍大概的原理,暂时不从代码层面做具体展示。相信在不久的未来,更多 Connector 将使用新的 Source 接口来实现。 -新的Source接口提出了3个重要组件。 +新的 Source 接口提出了 3 个重要组件。 -- **分片(Split)**:Split是将数据源切分后的一小部分。如果数据源是文件系统上的一个文件夹,Split可以是文件夹里的某个文件;如果数据源是一个Kafka数据流,Split可以是一个Kafka Partition。因为对数据源做了切分,Source就可以启动多个实例并行地读取。 -- **读取器(SourceReader)**:SourceReader负责Split的读取和处理,SourceReader运行在TaskManager上,可以分布式地并行运行。比如,某个SourceReader可以读取文件夹里的单个文件,多个SourceReader实例共同完成读取整个文件夹的任务。 -- **分片枚举器(SplitEnumerator)**:SplitEnumerator负责发现和分配Split。SplitEnumerator运行在JobManager上,它会读取数据源的元数据并构建Split,然后按照负载均衡策略将多个Split分配给多个SourceReader。 +- ** 分片(Split)**:Split 是将数据源切分后的一小部分。如果数据源是文件系统上的一个文件夹,Split 可以是文件夹里的某个文件;如果数据源是一个 Kafka 数据流,Split 可以是一个 Kafka Partition。因为对数据源做了切分,Source 就可以启动多个实例并行地读取。 +- ** 读取器(SourceReader)**:SourceReader 负责 Split 的读取和处理,SourceReader 运行在 TaskManager 上,可以分布式地并行运行。比如,某个 SourceReader 可以读取文件夹里的单个文件,多个 SourceReader 实例共同完成读取整个文件夹的任务。 +- ** 分片枚举器 (SplitEnumerator)**:SplitEnumerator 负责发现和分配 Split。SplitEnumerator 运行在 JobManager 上,它会读取数据源的元数据并构建 Split,然后按照负载均衡策略将多个 Split 分配给多个 SourceReader。 -图7-3展示了这3个组件之间的关系。其中,Master进程中的JobManager运行着SplitEnumerator,各个TaskManager中运行着SourceReader,SourceReader每次向SplitEnumerator请求Split,SplitEnumerator会分配Split给各个SourceReader。 +{numref}`fig-three-key-components` 展示了这 3 个组件之间的关系。其中,Master 进程中的 JobManager 运行着 SplitEnumerator,各个 TaskManager 中运行着 SourceReader,SourceReader 每次向 SplitEnumerator 请求 Split,SplitEnumerator 会分配 Split 给各个 SourceReader。 -![图7-3 新Source接口中的3个重要组件](./img/three-key-components.png) +```{figure} ./img/three-key-components.png +--- +name: fig-three-key-components +width: 80% +align: center +--- +新 Source 接口中的 3 个重要组件 +``` -## 7.2.3 自定义Sink +## 自定义 Sink -对于Sink,Flink提供的API为SinkFunction接口和RichSinkFunction函数类。使用时需要实现下面的虚方法。 +对于 Sink,Flink 提供的 API 为 SinkFunction 接口和 RichSinkFunction 函数类。使用时需要实现下面的虚方法。 ```java -// 每条数据到达Sink后都会调用invoke()方法,发送到下游外部系统 -// value为待输出数据 +// 每条数据到达 Sink 后都会调用 invoke() 方法,发送到下游外部系统 +// value 为待输出数据 void invoke(IN value, Context context) ``` -如7.1节所讨论的问题,如果想提供端到端的Exactly-Once保障,需要使用幂等写和事务写两种方式。 +如 7.1 节所讨论的问题,如果想提供端到端的 Exactly-Once 保障,需要使用幂等写和事务写两种方式。 ### 幂等写 -幂等写需要综合考虑业务系统的设计和下游外部系统的选型等多方面因素。数据流的一条数据经过Flink可能产生一到多次计算(因为故障恢复),但是最终输出的结果必须是可确定的,不能因为多次计算,导致一些变化。比如我们在前文中提到的,结果中使用系统当前时间戳作为Key就不是一个可确定的计算,因为每次计算的结果会随着系统当前时间戳发生变化。另外,写入外部系统一般是采用更新插入(Upsert)的方式,即将原有数据删除,将新数据插入,或者说将原有数据覆盖。一些Key-Value数据库经常被用来实现幂等写,幂等写也是一种实现成本相对比较低的方式。 +幂等写需要综合考虑业务系统的设计和下游外部系统的选型等多方面因素。数据流的一条数据经过 Flink 可能产生一到多次计算(因为故障恢复),但是最终输出的结果必须是可确定的,不能因为多次计算,导致一些变化。比如我们在前文中提到的,结果中使用系统当前时间戳作为 Key 就不是一个可确定的计算,因为每次计算的结果会随着系统当前时间戳发生变化。另外,写入外部系统一般是采用更新插入(Upsert)的方式,即将原有数据删除,将新数据插入,或者说将原有数据覆盖。一些 Key-Value 数据库经常被用来实现幂等写,幂等写也是一种实现成本相对比较低的方式。 ### 事务写 -另外一种提供端到端Exactly-Once保障的方式是事务写,并且有两种具体的实现方式:Write-Ahead-Log和Two-Phase-Commit。两者非常相似,下面分别介绍两种方式的原理,并重点介绍Two-Phase-Commit的具体实现。 +另外一种提供端到端 Exactly-Once 保障的方式是事务写,并且有两种具体的实现方式:Write-Ahead-Log 和 Two-Phase-Commit。两者非常相似,下面分别介绍两种方式的原理,并重点介绍 Two-Phase-Commit 的具体实现。 -#### Write-Ahead-Log协议的原理 +#### Write-Ahead-Log 协议的原理 -Write-Ahead-Log是一种广泛应用在数据库和分布式系统中的保证事务一致性的协议。Write-Ahead-Log的核心思想是,在数据写入下游系统之前,先把数据以日志(Log)的形式缓存下来,等收到明确的确认提交信息后,再将Log中的数据提交到下游系统。由于数据都写到了Log里,即使出现故障恢复,也可以根据Log中的数据决定是否需要恢复、如何进行恢复。图7-4所示为Flink的Write-Ahead-Log流程。 +Write-Ahead-Log 是一种广泛应用在数据库和分布式系统中的保证事务一致性的协议。Write-Ahead-Log 的核心思想是,在数据写入下游系统之前,先把数据以日志(Log)的形式缓存下来,等收到明确的确认提交信息后,再将 Log 中的数据提交到下游系统。由于数据都写到了 Log 里,即使出现故障恢复,也可以根据 Log 中的数据决定是否需要恢复、如何进行恢复。{numref}`fig-write-ahead-log` 所示为 Flink 的 Write-Ahead-Log 流程。 -![图7-4 Flink的Write-Ahead-Log流程](./img/write-ahead-log.png) +```{figure} ./img/write-ahead-log.png +--- +name: fig-write-ahead-log +width: 80% +align: center +--- +Flink 的 Write-Ahead-Log 流程 +``` -在Flink中,上游算子会不断向Sink发送待输出数据,这些待输出数据暂时存储在状态中,如图7-4的第0步所示。两次Checkpoint之间的待输出数据组成一个待输出的批次,会以Operator State的形式保存和备份。当Sink接收到一个新Checkpoint Barrier时,意味着Sink需要执行新一次Checkpoint,它会开启一个新的批次,新流入数据都进入该批次。同时,Sink准备将之前未提交的批次提交给外部系统。图7-4所示的第1步和第2步展示了这个过程。数据提交的过程又分为如下3步。 +在 Flink 中,上游算子会不断向 Sink 发送待输出数据,这些待输出数据暂时存储在状态中,如 {numref}`fig-write-ahead-log` 的第 0 步所示。两次 Checkpoint 之间的待输出数据组成一个待输出的批次,会以 Operator State 的形式保存和备份。当 Sink 接收到一个新 Checkpoint Barrier 时,意味着 Sink 需要执行新一次 Checkpoint,它会开启一个新的批次,新流入数据都进入该批次。同时,Sink 准备将之前未提交的批次提交给外部系统。{numref}`fig-write-ahead-log` 所示的第 1 步和第 2 步展示了这个过程。数据提交的过程又分为如下 3 步。 -1. Sink向CheckpointCommitter查询某批次是否已经提交,通常CheckpointCommitter是一个与外部系统紧密相连的插件,里面存储了各批次数据是否已经写入外部系统的信息。比如,Cassandra的CassandraCommitter使用了一个单独的表存储某批次数据是否已经提交。如果还未提交,则返回false。如果外部系统是一个文件系统,我们用一个文件存储哪些批次数据已经提交。总之,CheckpointCommitter依赖外部系统,它依靠外部系统存储了是否提交的信息。这个过程如图7-4的第3步所示。 -2. Sink得知某批次数据还未提交,则使用sendValues()方法,提交待输出数据到外部系统,即图7-4的第4步。此时,数据写入外部系统,同时也要在CheckpointCommitter中更新本批次数据已被提交的确认信息。 -3. 数据提交成功后,Sink会删除Operator State中存储的已经提交的数据。 +1. Sink 向 CheckpointCommitter 查询某批次是否已经提交,通常 CheckpointCommitter 是一个与外部系统紧密相连的插件,里面存储了各批次数据是否已经写入外部系统的信息。比如,Cassandra 的 CassandraCommitter 使用了一个单独的表存储某批次数据是否已经提交。如果还未提交,则返回 false。如果外部系统是一个文件系统,我们用一个文件存储哪些批次数据已经提交。总之,CheckpointCommitter 依赖外部系统,它依靠外部系统存储了是否提交的信息。这个过程如 {numref}`fig-write-ahead-log` 的第 3 步所示。 +2. Sink 得知某批次数据还未提交,则使用 sendValues()方法,提交待输出数据到外部系统,即 {numref}`fig-write-ahead-log` 的第 4 步。此时,数据写入外部系统,同时也要在 CheckpointCommitter 中更新本批次数据已被提交的确认信息。 +3. 数据提交成功后,Sink 会删除 Operator State 中存储的已经提交的数据。 -Write-Ahead-Log仍然无法提供百分之百的Exactly-Once保障,原因如下。 +Write-Ahead-Log 仍然无法提供百分之百的 Exactly-Once 保障,原因如下。 -1. sendValues()中途可能崩溃,导致部分数据已提交,部分数据还未提交。 -2. sendValues()成功,但是本批次数据提交的确认信息未能更新到CheckpointCommitter中。 +1. sendValues() 中途可能崩溃,导致部分数据已提交,部分数据还未提交。 +2. sendValues() 成功,但是本批次数据提交的确认信息未能更新到 CheckpointCommitter 中。 这两种原因会导致故障恢复后,某些数据可能会被多次写入外部系统。 -Write-Ahead-Log的方式相对比较通用,目前Flink的Cassandra Sink使用这种方式提供Exactly-Once保障。 +Write-Ahead-Log 的方式相对比较通用,目前 Flink 的 Cassandra Sink 使用这种方式提供 Exactly-Once 保障。 -#### Two-Phase-Commit协议的原理和实现 +#### Two-Phase-Commit 协议的原理和实现 -Two-Phase-Commit是另一种广泛应用在数据库和分布式系统中的事务协议。与刚刚介绍的Write-Ahead-Log相比,Flink中的Two-Phase-Commit协议不将数据缓存在Operator State,而是将数据直接写入外部系统,比如支持事务的Kafka。图7-4为Flink的Two-Phase-Commit流程图。 +Two-Phase-Commit 是另一种广泛应用在数据库和分布式系统中的事务协议。与刚刚介绍的 Write-Ahead-Log 相比,Flink 中的 Two-Phase-Commit 协议不将数据缓存在 Operator State,而是将数据直接写入外部系统,比如支持事务的 Kafka。图 7-4 为 Flink 的 Two-Phase-Commit 流程图。 -![图7-5 Flink的Two-Phase-Commit流程图](./img/two-phase-commit.png) +```{figure} ./img/two-phase-commit.png +--- +name: fig-two-phase-commit +width: 80% +align: center +--- +Flink 的 Two-Phase-Commit 流程图 +``` -如图7-5所示,上游算子将数据发送到Sink后,Sink直接将待输出数据写入外部系统的第k次事务(Transaction)中。接着Checkpoint Barrier到达,新一次Checkpoint开始执行。如图7-5的第2步所示,Flink执行preCommit(),将第k次Transaction的数据预提交到外部系统中,预提交时,待提交数据已经写入外部系统,但是为了保证数据一致性,这些数据由于还没有得到确认提交的信息,对于外部系统的使用者来说,还是不可见的。之所以使用预提交而非提交,是因为Flink无法确定多个并行实例是否都完成了数据写入外部系统的过程,有些实例已经将数据写入,其他实例未将数据写入。一旦发生故障恢复,写入实例的那些数据还有可能再次被写入外部系统,这就影响了Exactly-Once保障的数据一致性。 +如 {numref}`fig-two-phase-commit` 所示,上游算子将数据发送到 Sink 后,Sink 直接将待输出数据写入外部系统的第 k 次事务(Transaction)中。接着 Checkpoint Barrier 到达,新一次 Checkpoint 开始执行。如图 7-5 的第 2 步所示,Flink 执行 preCommit(),将第 k 次 Transaction 的数据预提交到外部系统中,预提交时,待提交数据已经写入外部系统,但是为了保证数据一致性,这些数据由于还没有得到确认提交的信息,对于外部系统的使用者来说,还是不可见的。之所以使用预提交而非提交,是因为 Flink 无法确定多个并行实例是否都完成了数据写入外部系统的过程,有些实例已经将数据写入,其他实例未将数据写入。一旦发生故障恢复,写入实例的那些数据还有可能再次被写入外部系统,这就影响了 Exactly-Once 保障的数据一致性。 -接着,Flink会执行beginTransaction()方法,开启下一次Transaction(Transaction k+1),之后上游算子流入的待输出数据都将流入新的Transaction,如图7-5的第3步。当所有并行实例都执行图7-5中的第2步和第3步之后,本次Checkpoint已经完成,Flink将预提交的数据最终提交到外部系统,至此待输出数据在外部系统最终可见。 +接着,Flink 会执行 beginTransaction() 方法,开启下一次 Transaction(Transaction k+1),之后上游算子流入的待输出数据都将流入新的 Transaction,如图 7-5 的第 3 步。当所有并行实例都执行图 7-5 中的第 2 步和第 3 步之后,本次 Checkpoint 已经完成,Flink 将预提交的数据最终提交到外部系统,至此待输出数据在外部系统最终可见。 -接下来我们使用具体的例子来演示整个数据写入的过程,这里继续使用本章之前一直使用的数据流DataStream>,我们将这个数据流写入文件。为此,我们准备两个文件夹,一个名为flink-sink-commited,这是数据最终要写入的文件夹,需要保证一条数据从Source到Sink的Exactly-Once一致性;第二个文件夹名为flink-sink-precommit,存储临时文件,主要为事务机制所使用。数据先经过flink-sink-precommit,等得到确认后,再将数据从此文件夹写入flink-sink-commited。结合上面所述的数据写入过程,我们需要继承TwoPhaseCommitSinkFunction,并实现下面的4个方法。 -1. beginTransaction():开启一次新的Transaction。我们为每次Transaction创建一个新的文件缓存,文件缓存名以当前时间命名,新流入数据都写入这个文件缓存。假设当前为第k次Transaction,文件名为k。文件缓存的数据在内存中,还未写入磁盘。 -2. preCommit():数据预提交。文件缓存k从内存写入flink-sink-precommit文件夹,数据持久化到磁盘中。一旦preCommit()方法被执行,Flink会调用beginTransaction()方法,开启下一次Transaction,生成名为k+1的文件缓存。 -3. commit():得到确认后,提交数据。将文件k从flink-sink-precommit文件夹移动到flink-sink-commited。 -4. abort():遇到异常,操作终止。将flink-sink-precommit中的文件删除。 +接下来我们使用具体的例子来演示整个数据写入的过程,这里继续使用本章之前一直使用的数据流 DataStream>,我们将这个数据流写入文件。为此,我们准备两个文件夹,一个名为 flink-sink-commited,这是数据最终要写入的文件夹,需要保证一条数据从 Source 到 Sink 的 Exactly-Once 一致性;第二个文件夹名为 flink-sink-precommit,存储临时文件,主要为事务机制所使用。数据先经过 flink-sink-precommit,等得到确认后,再将数据从此文件夹写入 flink-sink-commited。结合上面所述的数据写入过程,我们需要继承 TwoPhaseCommitSinkFunction,并实现下面的 4 个方法。 +1. beginTransaction():开启一次新的 Transaction。我们为每次 Transaction 创建一个新的文件缓存,文件缓存名以当前时间命名,新流入数据都写入这个文件缓存。假设当前为第 k 次 Transaction,文件名为 k。文件缓存的数据在内存中,还未写入磁盘。 +2. preCommit():数据预提交。文件缓存 k 从内存写入 flink-sink-precommit 文件夹,数据持久化到磁盘中。一旦 preCommit() 方法被执行,Flink 会调用 beginTransaction() 方法,开启下一次 Transaction,生成名为 k+1 的文件缓存。 +3. commit():得到确认后,提交数据。将文件 k 从 flink-sink-precommit 文件夹移动到 flink-sink-commited。 +4. abort():遇到异常,操作终止。将 flink-sink-precommit 中的文件删除。 -除此之外,还需要实现Sink最基本的数据写入方法invoke(),将数据写入文件缓存。代码清单 7-4展示了整个过程。 +除此之外,还需要实现 Sink 最基本的数据写入方法 invoke(),将数据写入文件缓存。代码清单 7-4 展示了整个过程。 ```java public static class TwoPhaseFileSink extends TwoPhaseCommitSinkFunction, String, Void> { @@ -304,7 +325,7 @@ LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); int subTaskIdx = getRuntimeContext().getIndexOfThisSubtask(); String fileName = time + "-" + subTaskIdx; Path preCommitFilePath = Paths.get(preCommitPath + "/" + fileName); -// 创建一个存储本次Transaction的文件 +// 创建一个存储本次 Transaction 的文件 Files.createFile(preCommitFilePath); transactionWriter = Files.newBufferedWriter(preCommitFilePath); System.out.println("transaction File: " + preCommitFilePath); @@ -348,16 +369,16 @@ System.out.println("transaction File: " + preCommitFilePath); } ``` -代码清单 7-4 实现了TwoPhaseCommitSinkFunction的Sink +代码清单 7-4 实现了 TwoPhaseCommitSinkFunction 的 Sink -TwoPhaseCommitSinkFunction接收如下3个泛型。 -- IN为上游算子发送过来的待输出数据类型。 -- TXN为Transaction类型,本例中是类型String,Kafka中是一个封装了Kafka Producer的数据类型,我们可以往Transaction中写入待输出的数据。 -- CONTEXT为上下文类型,是个可选选项。本例中我们没有使用上下文,所以这里使用了Void,即空类型。 -TwoPhaseCommitSinkFunction的构造函数需要传入TXN和CONTEXT的序列化器。在主逻辑中,我们创建了两个目录,一个为预提交目录,一个为最终的提交目录。我们可以比较使用未加任何保护的print()和该Sink:print()直接将结果输出到标准输出,会有数据重发现象;而使用了Two-Phase-Commit协议,待输出结果写到了目标文件夹内,即使发生了故障恢复,也不会有数据重发现象,代码清单 7-5展示了在主逻辑中使用Two-Phase-Commit的Sink。 +TwoPhaseCommitSinkFunction 接收如下 3 个泛型。 +- IN 为上游算子发送过来的待输出数据类型。 +- TXN 为 Transaction 类型,本例中是类型 String,Kafka 中是一个封装了 Kafka Producer 的数据类型,我们可以往 Transaction 中写入待输出的数据。 +- CONTEXT 为上下文类型,是个可选选项。本例中我们没有使用上下文,所以这里使用了 Void,即空类型。 +TwoPhaseCommitSinkFunction 的构造函数需要传入 TXN 和 CONTEXT 的序列化器。在主逻辑中,我们创建了两个目录,一个为预提交目录,一个为最终的提交目录。我们可以比较使用未加任何保护的 print()和该 Sink:print() 直接将结果输出到标准输出,会有数据重发现象;而使用了 Two-Phase-Commit 协议,待输出结果写到了目标文件夹内,即使发生了故障恢复,也不会有数据重发现象,代码清单 7-5 展示了在主逻辑中使用 Two-Phase-Commit 的 Sink。 ```java -// 每隔5秒进行一次Checkpoint +// 每隔 5 秒进行一次 Checkpoint env.getCheckpointConfig().setCheckpointInterval(5 * 1000); DataStream> countStream = env.addSource(new @@ -366,8 +387,8 @@ DataStream> countStream = env.addSource(new DataStream> result = countStream.map(new CheckpointedSourceExample.FailingMapper(20)); -// 类UNIX操作系统的临时文件夹在/tmp下 -// Windows用户需要修改该目录 +// 类 UNIX 操作系统的临时文件夹在 /tmp 下 +// Windows 用户需要修改该目录 String preCommitPath = "/tmp/flink-sink-precommit"; String commitedPath = "/tmp/flink-sink-commited"; @@ -377,13 +398,13 @@ if (!Files.exists(Paths.get(preCommitPath))) { if (!Files.exists(Paths.get(commitedPath))) { Files.createDirectory(Paths.get(commitedPath)); } -// 使用Exactly-Once语义的Sink,执行本程序时可以查看相应的输出目录 +// 使用 Exactly-Once 语义的 Sink,执行本程序时可以查看相应的输出目录 result.addSink(new TwoPhaseFileSink(preCommitPath, commitedPath)); -//输出数据,无Exactly-Once保障,有数据重发现象 +// 输出数据,无 Exactly-Once 保障,有数据重发现象 result.print(); ``` -代码清单 7-5 在主逻辑中使用Two-Phase-Commit的Sink +代码清单 7-5 在主逻辑中使用 Two-Phase-Commit 的 Sink -Flink的Kafka Sink中的FlinkKafkaProducer.Semantic.EXACTLY_ONCE选项就使用这种方式实现,因为Kafka提供了事务机制,开发者可以通过“预提交-提交”的两阶段提交方式将数据写入Kafka。但是需要注意的是,这种方式理论上能够提供百分之百的Exactly-Once保障,但实际执行过程中,这种方式比较依赖Kafka和Flink之间的协作,如果Flink作业的故障恢复时间过长会导致超时,最终会导致数据丢失。因此,这种方式只能在理论上提供百分之百的Exactly-Once保障。 -将转化为markdown格式,输出源代码: \ No newline at end of file +Flink 的 Kafka Sink 中的 FlinkKafkaProducer.Semantic.EXACTLY_ONCE 选项就使用这种方式实现,因为 Kafka 提供了事务机制,开发者可以通过“预提交 - 提交”的两阶段提交方式将数据写入 Kafka。但是需要注意的是,这种方式理论上能够提供百分之百的 Exactly-Once 保障,但实际执行过程中,这种方式比较依赖 Kafka 和 Flink 之间的协作,如果 Flink 作业的故障恢复时间过长会导致超时,最终会导致数据丢失。因此,这种方式只能在理论上提供百分之百的 Exactly-Once 保障。 +将转化为 markdown 格式,输出源代码: \ No newline at end of file diff --git a/doc/ch-flink-connectors/exercise-stock-price-data-stream.md b/doc/ch-flink-connectors/exercise-stock-price-data-stream.md index fc5a6a3..339d9b2 100644 --- a/doc/ch-flink-connectors/exercise-stock-price-data-stream.md +++ b/doc/ch-flink-connectors/exercise-stock-price-data-stream.md @@ -1,21 +1,21 @@ (exercise-stock-price-data-stream)= # 实验 读取并输出股票价格数据流 -经过本章的学习,读者应该基本了解了Flink Connector的使用方法,本节我们继续以股票交易场景来模拟数据流的输入和输出。 +经过本章的学习,读者应该基本了解了 Flink Connector 的使用方法,本节我们继续以股票交易场景来模拟数据流的输入和输出。 ## 一、实验目的 -结合股票交易场景,学习如何使用Source和Sink,包括如何自定义Source、如何调用Kafka Sink。 +结合股票交易场景,学习如何使用 Source 和 Sink,包括如何自定义 Source、如何调用 Kafka Sink。 ## 二、实验内容 -在第4章和第5章的实验中,我们都使用了股票交易数据,其中使用了StockPrice的数据结构,读取数据集中的数据来模拟一个真实数据流。这里我们将修改第4章实验中的Source,在读取数据集时使用一个Offset,保证Source有故障恢复的能力。 +在第 4 章和第 5 章的实验中,我们都使用了股票交易数据,其中使用了 StockPrice 的数据结构,读取数据集中的数据来模拟一个真实数据流。这里我们将修改第 4 章实验中的 Source,在读取数据集时使用一个 Offset,保证 Source 有故障恢复的能力。 -基于第5章中的对股票数据xVWAP的计算程序,使用Kafka Sink,将结果输出到Kafka。输出之前,需要在Kafka中建立对应的Topic。 +基于第 5 章中的对股票数据 xVWAP 的计算程序,使用 Kafka Sink,将结果输出到 Kafka。输出之前,需要在 Kafka 中建立对应的 Topic。 ## 三、实验要求 -整个程序启用Flink的Checkpoint机制,计算xVWAP,需要重新编写Source,使其支持故障恢复,计算结果被发送到Kafka。计算结果可以使用JSON格式进行序列化。在命令行中启动一个Kafka Consumer来接收数据,验证程序输出的正确性。 +整个程序启用 Flink 的 Checkpoint 机制,计算 xVWAP,需要重新编写 Source,使其支持故障恢复,计算结果被发送到 Kafka。计算结果可以使用 JSON 格式进行序列化。在命令行中启动一个 Kafka Consumer 来接收数据,验证程序输出的正确性。 ## 四、实验报告 @@ -23,4 +23,4 @@ ## 本章小结 -通过本章的学习,读者应该可以了解Flink Connector的原理和使用方法,包括:端到端Exactly-Once的含义、自定义Source和Sink以及常用Flink Connector使用方法。相信通过本章的学习,读者已经可以将从Source到Sink的一整套流程串联起来。 +通过本章的学习,读者应该可以了解 Flink Connector 的原理和使用方法,包括:端到端 Exactly-Once 的含义、自定义 Source 和 Sink 以及常用 Flink Connector 使用方法。相信通过本章的学习,读者已经可以将从 Source 到 Sink 的一整套流程串联起来。 diff --git a/doc/ch-flink-connectors/flink-connector.md b/doc/ch-flink-connectors/flink-connector.md index 5042cc7..ab2e506 100644 --- a/doc/ch-flink-connectors/flink-connector.md +++ b/doc/ch-flink-connectors/flink-connector.md @@ -1,52 +1,59 @@ (flink-connector)= -# Flink中常用的Connector +# Flink 中常用的 Connector -本节将对Flink常用的Connector做一些概括性的介绍,主要包括内置输入/输出(Input/Output,I/O)接口、flink-connector项目所涉及的Connector、Apache Bahir所提供的Connector等,如图7-5所示。 +本节将对 Flink 常用的 Connector 做一些概括性的介绍,主要包括内置输入 / 输出(Input/Output,I/O)接口、flink-connector 项目所涉及的 Connector、Apache Bahir 所提供的 Connector 等,如 {numref}`fig-flink-connectors` 所示。 -![图7-6 Flink中常用的Connector](./img/Connector.png) +```{figure} ./img/Connector.png +--- +name: fig-flink-connectors +width: 60% +align: center +--- +Flink 中常用的 Connector +``` -Flink支持了绝大多数的常见大数据系统,从系统的类型上,包括了消息队列、数据库、文件系统等;从具体的技术上,包括了Kafka、Elasticsearch、HBase、Cassandra、JDBC、Kinesis、Redis等。各个大数据系统使用起来略有不同,接下来将重点介绍一下Flink内置I/O接口和Flink Kafka Connector,这两类Connector被广泛应用在很多业务场景中,具有很强的代表性。 +Flink 支持了绝大多数的常见大数据系统,从系统的类型上,包括了消息队列、数据库、文件系统等;从具体的技术上,包括了 Kafka、Elasticsearch、HBase、Cassandra、JDBC、Kinesis、Redis 等。各个大数据系统使用起来略有不同,接下来将重点介绍一下 Flink 内置 I/O 接口和 Flink Kafka Connector,这两类 Connector 被广泛应用在很多业务场景中,具有很强的代表性。 -## 7.3.1 内置I/O接口 +## 内置 I/O 接口 -之所以给这类Connector起名为内置I/O接口,是因为这些接口直接集成在了Flink的核心代码中,无论在任何环境中,我们都可以调用这些接口进行数据输入/输出操作。与内置I/O接口相对应的是flink-connector子项目以及Apache Bahir项目中的Connector,flink-connector虽然是Flink开源项目的一个子项目,但是并没有直接集成到二进制包(我们在第2章下载安装的Flink安装包)中。因此,使用Flink的内置I/O接口,一般不需要额外添加依赖,使用其他Connector需要添加相应的依赖。 +之所以给这类 Connector 起名为内置 I/O 接口,是因为这些接口直接集成在了 Flink 的核心代码中,无论在任何环境中,我们都可以调用这些接口进行数据输入 / 输出操作。与内置 I/O 接口相对应的是 flink-connector 子项目以及 Apache Bahir 项目中的 Connector,flink-connector 虽然是 Flink 开源项目的一个子项目,但是并没有直接集成到二进制包(我们在第 2 章下载安装的 Flink 安装包)中。因此,使用 Flink 的内置 I/O 接口,一般不需要额外添加依赖,使用其他 Connector 需要添加相应的依赖。 -Flink的内置I/O接口如下: +Flink 的内置 I/O 接口如下: -- 基于Socket的Source和Sink。 -- 基于内存集合的Source。 -- 输出到标准输出的Sink。 -- 基于文件系统的Source和Sink。 +- 基于 Socket 的 Source 和 Sink。 +- 基于内存集合的 Source。 +- 输出到标准输出的 Sink。 +- 基于文件系统的 Source 和 Sink。 -在前文中,我们其实已经使用过这里提到的接口,比如从内存集合中创建数据流并将结果输出到标准输出。像Socket、内存集合和打印这3类接口非常适合调试。此外,文件系统被广泛用于大数据的持久化,是大数据架构中经常涉及的一种组件。下面我们将再次梳理一下这些接口,并重点介绍一下基于文件系统的Source和Sink。 +在前文中,我们其实已经使用过这里提到的接口,比如从内存集合中创建数据流并将结果输出到标准输出。像 Socket、内存集合和打印这 3 类接口非常适合调试。此外,文件系统被广泛用于大数据的持久化,是大数据架构中经常涉及的一种组件。下面我们将再次梳理一下这些接口,并重点介绍一下基于文件系统的 Source 和 Sink。 -### 1. 基于Socket的Source和Sink +### 基于 Socket 的 Source 和 Sink -我们可以从Socket数据流中读取和写入数据。 +我们可以从 Socket 数据流中读取和写入数据。 ```java -// 读取Socket中的数据,数据流数据之间用\n来切分 +// 读取 Socket 中的数据,数据流数据之间用 \n 来切分 env.socketTextStream(hostname, port, "\n"); -// 向Socket中写数入据,数据以SimpleStringSchema序列化 +// 向 Socket 中写数入据,数据以 SimpleStringSchema 序列化 stream.writeToSocket(outputHost, outputPort, new SimpleStringSchema()); ``` -由于Socket不能保存Offset,也无法实现数据重发,因此以它作为Connector可能会导致故障恢复时的数据丢失,只能提供At-Most-Once的投递保障。这种方式非常适合用来调试,开源工具nc可以创建Socket数据流,结合Flink的Socket接口可以用来快速验证一些逻辑。 +由于 Socket 不能保存 Offset,也无法实现数据重发,因此以它作为 Connector 可能会导致故障恢复时的数据丢失,只能提供 At-Most-Once 的投递保障。这种方式非常适合用来调试,开源工具 nc 可以创建 Socket 数据流,结合 Flink 的 Socket 接口可以用来快速验证一些逻辑。 -此外,Socket Source输入数据具有时序性,适合用来调试与时间和窗口有关的程序。 +此外,Socket Source 输入数据具有时序性,适合用来调试与时间和窗口有关的程序。 -注意,使用Socket时,需要提前启动相应的Socket端口,以便Flink能够建立Socket连接,否则将抛出异常。 +注意,使用 Socket 时,需要提前启动相应的 Socket 端口,以便 Flink 能够建立 Socket 连接,否则将抛出异常。 -### 2. 基于内存集合的Source +### 基于内存集合的 Source -最常见调试方式是在内存中创建一些数据列表,并直接写入Flink的Source。 +最常见调试方式是在内存中创建一些数据列表,并直接写入 Flink 的 Source。 ```java DataStream sourceDataStream = env.fromElements(1, 2, 3); ``` -它内部调用的是:`fromCollection(Collection data, TypeInformation typeInfo)`。`fromCollection()`基于Java的Collection接口。对于一些复杂的数据类型,我们用Java的Collection来创建数据,并写到Flink的Source里。 +它内部调用的是:`fromCollection(Collection data, TypeInformation typeInfo)`。`fromCollection()` 基于 Java 的 Collection 接口。对于一些复杂的数据类型,我们用 Java 的 Collection 来创建数据,并写到 Flink 的 Source 里。 ```java // 获取数据类型 @@ -54,9 +61,9 @@ TypeInformation typeInfo = ... DataStream collectionStream = env.fromCollection(Arrays.asList(data), typeInfo); ``` -### 3. 输出到标准输出的Sink +### 输出到标准输出的 Sink -`print()`和`printToErr()`分别将数据流输出到标准输出流(STDOUT)和标准错误流(STDERR)。这两个方法会调用数据的`toString()`方法,将内存对象转换成字符串,因此如果想进行调试、查看结果,一定要实现数据的`toString()`方法。Java的POJO类要重写`toString()`方法,Scala的case class已经有内置的`toString()`方法,无须实现。 +`print()` 和 `printToErr()` 分别将数据流输出到标准输出流(STDOUT)和标准错误流(STDERR)。这两个方法会调用数据的 `toString()` 方法,将内存对象转换成字符串,因此如果想进行调试、查看结果,一定要实现数据的 `toString()` 方法。Java 的 POJO 类要重写 `toString()` 方法,Scala 的 case class 已经有内置的 `toString()` 方法,无须实现。 ```java public class StockPrice { @@ -78,7 +85,7 @@ public class StockPrice { } ``` -`print()`和`printToErr()`方法实际在TaskManager上执行,如果并行度大于1,Flink会将算子子任务的ID一起输出。比如,在IntelliJ IDEA中执行程序,可以得到类似下面的结果,每行输出前都有一个数字,该数字表示相应方法实际在哪个算子子任务上执行。 +`print()` 和 `printToErr()` 方法实际在 TaskManager 上执行,如果并行度大于 1,Flink 会将算子子任务的 ID 一起输出。比如,在 IntelliJ IDEA 中执行程序,可以得到类似下面的结果,每行输出前都有一个数字,该数字表示相应方法实际在哪个算子子任务上执行。 ``` 1> 490894,1061719,4874384,pv,1512061207 @@ -89,28 +96,28 @@ public class StockPrice { ... ``` -### 4. 基于文件系统的Source和Sink +### 基于文件系统的 Source 和 Sink -#### (1) 基于文件系统的Source +#### 基于文件系统的 Source -文件系统一般用来存储数据,为批处理提供输入或输出,是大数据架构中最为重要的组件之一。比如,消息队列可能将一些日志写入文件系统进行持久化,批处理作业从文件系统中读取数据进行分析等。在Flink中,基于文件系统的Source和Sink可以从文件系统中读取和输出数据。 +文件系统一般用来存储数据,为批处理提供输入或输出,是大数据架构中最为重要的组件之一。比如,消息队列可能将一些日志写入文件系统进行持久化,批处理作业从文件系统中读取数据进行分析等。在 Flink 中,基于文件系统的 Source 和 Sink 可以从文件系统中读取和输出数据。 -Flink对各类文件系统都提供了支持,包括本地文件系统以及挂载到本地的网络文件系统(Network File System,NFS)、Hadoop HDFS、Amazon S3、阿里云OSS等。Flink通过路径中的文件系统描述符来确定该文件路径使用什么文件系统,例如`file:///some/local/file`或者`hdfs://host:port/file/path`。 +Flink 对各类文件系统都提供了支持,包括本地文件系统以及挂载到本地的网络文件系统(Network File System,NFS)、Hadoop HDFS、Amazon S3、阿里云 OSS 等。Flink 通过路径中的文件系统描述符来确定该文件路径使用什么文件系统,例如 `file:///some/local/file` 或者 `hdfs://host:port/file/path`。 -下面的代码从一个文件系统中读取一个文本文件,文件读入后以字符串的形式存在,并生成一个`DataStream`。 +下面的代码从一个文件系统中读取一个文本文件,文件读入后以字符串的形式存在,并生成一个 `DataStream`。 ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); String textPath = ... -// readTextFile()方法默认以UTF-8编码格式读取文件 +// readTextFile() 方法默认以 UTF-8 编码格式读取文件 DataStream text = env.readTextFile(textPath); ``` -Flink在内部实际调用的是一个支持更多参数的接口。 +Flink 在内部实际调用的是一个支持更多参数的接口。 ```java /** - * 从filePath文件中读取数据 + * 从 filePath 文件中读取数据 * FileInputFormat 定义文件的格式 * watchType 检测文件路径下的内容是否有更新 * interval 检测间隔 @@ -122,12 +129,12 @@ public DataStreamSource readFile( long interval); ``` -上述方法可以读取一个路径下的所有文件。`FileInputFormat`定义了输入文件的格式,比如一个纯文本文件`TextInputFormat`,后文还将详细介绍这个接口。参数`filePath`是文件路径。如果这个路径指向一个文件,Flink将读取这个文件,如果这个路径是一个目录,Flink将读取目录下的文件。基于`FileProcessingMode`,Flink提供了如下两种不同的读取文件的模式。 +上述方法可以读取一个路径下的所有文件。`FileInputFormat` 定义了输入文件的格式,比如一个纯文本文件 `TextInputFormat`,后文还将详细介绍这个接口。参数 `filePath` 是文件路径。如果这个路径指向一个文件,Flink 将读取这个文件,如果这个路径是一个目录,Flink 将读取目录下的文件。基于 `FileProcessingMode`,Flink 提供了如下两种不同的读取文件的模式。 -- `FileProcessingMode.PROCESS_ONCE`模式只读取一遍某个目录下的内容,读取完后随即退出。 -- `FileProcessingMode.PROCESS_CONTINUOUSLY`模式每隔`interval`毫秒周期性地检查`filePath`路径下的内容是否有更新,如果有更新,重新读取里面的内容。 +- `FileProcessingMode.PROCESS_ONCE` 模式只读取一遍某个目录下的内容,读取完后随即退出。 +- `FileProcessingMode.PROCESS_CONTINUOUSLY` 模式每隔 `interval` 毫秒周期性地检查 `filePath` 路径下的内容是否有更新,如果有更新,重新读取里面的内容。 -下面的代码展示了如何调用`FileInputFormat`接口。 +下面的代码展示了如何调用 `FileInputFormat` 接口。 ```java // 文件路径 @@ -136,44 +143,46 @@ String filePath = ... // 文件为纯文本格式 TextInputFormat textInputFormat = new TextInputFormat(new org.apache.flink.core.fs.Path(filePath)); -// 每隔100毫秒检测一遍 +// 每隔 100 毫秒检测一遍 DataStream inputStream = env.readFile(textInputFormat, filePath, FileProcessingMode.PROCESS_CONTINUOUSLY, 100); ``` -Flink在实现文件读取时,增加了一个专门检测文件路径的线程。这个线程启动后定时检测路径下的任何修改,比如是否有文件被修改,或文件夹是否添加了新内容。确切地说,这个线程检测文件的修改时间(Modified Time)是否发生了变化。`FileProcessingMode.PROCESS_CONTINUOUSLY`模式下Flink每隔`interval`毫秒周期性地检测文件的修改时间;`FileProcessingMode.PROCESS_ONCE`只检测一次,不周期性地检测。 +Flink 在实现文件读取时,增加了一个专门检测文件路径的线程。这个线程启动后定时检测路径下的任何修改,比如是否有文件被修改,或文件夹是否添加了新内容。确切地说,这个线程检测文件的修改时间(Modified Time)是否发生了变化。`FileProcessingMode.PROCESS_CONTINUOUSLY` 模式下 Flink 每隔 `interval` 毫秒周期性地检测文件的修改时间;`FileProcessingMode.PROCESS_ONCE` 只检测一次,不周期性地检测。 + +:::{note} -注意 +重新读取文件内容会影响端到端的 Exactly-Once 一致性。因为检测更新是基于文件的修改时间,如果我们往一个文件中追加数据,文件的修改时间会发生变化,该文件下次检测时会被重新读取,导致一条数据可能会被多次处理。 -重新读取文件内容会影响端到端的Exactly-Once一致性。因为检测更新是基于文件的修改时间,如果我们往一个文件中追加数据,文件的修改时间会发生变化,该文件下次检测时会被重新读取,导致一条数据可能会被多次处理。 +::: -`FileInputFormat`是读取文件的基类,继承这个基类可以实现不同类型的文件读取,包括纯文本文件。`TextInputFormat`是`FileInputFormat`的一个实现,`TextInputFormat`按行读取文件,文件以纯文本的序列化方式打开。Flink也提供了`AvroInputFormat`、`OrcInputFormat`、`ParquetInputFormat`等其他大数据架构所采用的文件格式,这些文件格式比起纯文本文件的性能更好,它们的读/写方式也各有不同。 +`FileInputFormat` 是读取文件的基类,继承这个基类可以实现不同类型的文件读取,包括纯文本文件。`TextInputFormat` 是 `FileInputFormat` 的一个实现,`TextInputFormat` 按行读取文件,文件以纯文本的序列化方式打开。Flink 也提供了 `AvroInputFormat`、`OrcInputFormat`、`ParquetInputFormat` 等其他大数据架构所采用的文件格式,这些文件格式比起纯文本文件的性能更好,它们的读 / 写方式也各有不同。 -考虑到数据的容量比较大,在实现文件读取的过程中,Flink会判断`filePath`路径下的文件能否切分。假设这个作业的并行度是`n`,而且文件能够切分,检测线程会将读入的文件切分成`n`份,后续启动`n`个并行的文件读取实例读取这`n`份切分文件。 +考虑到数据的容量比较大,在实现文件读取的过程中,Flink 会判断 `filePath` 路径下的文件能否切分。假设这个作业的并行度是 `n`,而且文件能够切分,检测线程会将读入的文件切分成 `n` 份,后续启动 `n` 个并行的文件读取实例读取这 `n` 份切分文件。 -#### (2) 基于文件系统的Sink +#### 基于文件系统的 Sink -我们可以使用`writeAsText(String path)`、`writeAsText(String path, WriteMode writeMode)`和`writeUsingOutputFormat(OutputFormat format)`等方法来将文件输出到文件系统。`WriteMode`可以为`NO_OVERWRITE`和`OVERWRITE`,即是否覆盖原来路径里的内容。`OutputFormat`与`FileInputFormat`类似,表示目标文件的文件格式。在最新的Flink版本中,这几个输出到文件系统的方法被标记为`@Deprecated`,表示未来将被弃用,主要考虑到这些方法没有参与Flink的Checkpoint过程中,无法提供Exactly-Once保障。这些方法适合用于本地调试。 +我们可以使用 `writeAsText(String path)`、`writeAsText(String path, WriteMode writeMode)` 和 `writeUsingOutputFormat(OutputFormat format)` 等方法来将文件输出到文件系统。`WriteMode` 可以为 `NO_OVERWRITE` 和 `OVERWRITE`,即是否覆盖原来路径里的内容。`OutputFormat` 与 `FileInputFormat` 类似,表示目标文件的文件格式。在最新的 Flink 版本中,这几个输出到文件系统的方法被标记为 `@Deprecated`,表示未来将被弃用,主要考虑到这些方法没有参与 Flink 的 Checkpoint 过程中,无法提供 Exactly-Once 保障。这些方法适合用于本地调试。 -在生产环境中,为了保证数据的一致性,官方建议使用`StreamingFileSink`接口。下面这个例子展示了如何将一个文本数据流输出到一个目标路径上。这里用到的是一个非常简单的配置,包括一个文件路径和一个`Encoder`。`Encoder`可以将数据编码以便对数据进行序列化。 +在生产环境中,为了保证数据的一致性,官方建议使用 `StreamingFileSink` 接口。下面这个例子展示了如何将一个文本数据流输出到一个目标路径上。这里用到的是一个非常简单的配置,包括一个文件路径和一个 `Encoder`。`Encoder` 可以将数据编码以便对数据进行序列化。 ```java DataStream
stream = env.addSource(...); -// 使用StreamingFileSink将DataStream输出为一个文本文件 +// 使用 StreamingFileSink 将 DataStream 输出为一个文本文件 StreamingFileSink fileSink = StreamingFileSink .forRowFormat(new Path("/file/base/path"), new SimpleStringEncoder("UTF-8")) .build(); stream.addSink(fileSink); ``` -`StreamingFileSink`主要支持两类文件,一种是行式存储,一种是列式存储。我们平时见到的很多数据是行式存储的,即在文件的末尾追加新的行。列式存储在某些场景下的性能很高,它将一批数据收集起来,批量写入。行式存储和列式存储的接口如下。 +`StreamingFileSink` 主要支持两类文件,一种是行式存储,一种是列式存储。我们平时见到的很多数据是行式存储的,即在文件的末尾追加新的行。列式存储在某些场景下的性能很高,它将一批数据收集起来,批量写入。行式存储和列式存储的接口如下。 - 行式存储:`StreamingFileSink.forRowFormat(basePath, rowEncoder)`。 - 列式存储:`StreamingFileSink.forBulkFormat(basePath, bulkWriterFactory)`。 -回到刚才的例子上,它使用了行式存储,`SimpleStringEncoder`是Flink提供的预定义的`Encoder`,它通过数据流的`toString()`方法将内存数据转换为字符串,将字符串按照UTF-8编码写入输出中。`SimpleStringEncoder`可以用来编码转换字符串数据流,`SimpleStringEncoder`可以用来编码转换长整数数据流。 +回到刚才的例子上,它使用了行式存储,`SimpleStringEncoder` 是 Flink 提供的预定义的 `Encoder`,它通过数据流的 `toString()` 方法将内存数据转换为字符串,将字符串按照 UTF-8 编码写入输出中。`SimpleStringEncoder` 可以用来编码转换字符串数据流,`SimpleStringEncoder` 可以用来编码转换长整数数据流。 -如果数据流比较复杂,我们需要自己实现一个`Encoder`。代码清单 7-7中的数据流是一个`DataStream>`,我们需要实现`encode()`方法,将每个数据编码。 +如果数据流比较复杂,我们需要自己实现一个 `Encoder`。代码清单 7-7 中的数据流是一个 `DataStream>`,我们需要实现 `encode()` 方法,将每个数据编码。 ```java // 将一个二元组数据流编码并序列化 @@ -186,7 +195,7 @@ static class Tuple2Encoder implements Encoder> { } ``` -对于列式存储,也需要一个类似的`Encoder`,Flink称之为`BulkWriter`,本质上将数据序列化为列式存储所需的格式。比如我们想使用Parquet格式,代码如下。 +对于列式存储,也需要一个类似的 `Encoder`,Flink 称之为 `BulkWriter`,本质上将数据序列化为列式存储所需的格式。比如我们想使用 Parquet 格式,代码如下。 ```java DataStream stream = ...; @@ -198,7 +207,7 @@ StreamingFileSink fileSink = StreamingFileSink stream.addSink(fileSink); ``` -考虑到大数据场景下,输出数据量会很大,而且流处理作业需要长时间执行,`StreamingFileSink`的具体实现过程中使用了桶的概念。桶可以理解为输出路径的一个子文件夹。如果不做其他设置,Flink按照时间来将输出数据分桶,会在输出路径下生成类似下面的文件夹结构。 +考虑到大数据场景下,输出数据量会很大,而且流处理作业需要长时间执行,`StreamingFileSink` 的具体实现过程中使用了桶的概念。桶可以理解为输出路径的一个子文件夹。如果不做其他设置,Flink 按照时间来将输出数据分桶,会在输出路径下生成类似下面的文件夹结构。 ``` /file/base/path @@ -213,7 +222,7 @@ stream.addSink(fileSink); [base-path]/[bucket-path]/part-[task-id]-[id] ``` -最顶层的文件夹是我们设置的输出目录,第二层是桶,Flink将当前的时间作为`bucket-path`桶名。实际输出时,Flink会启动多个并行的实例,每个实例有自己的`task-id`,`task-id`被添加在了`part`之后。 +最顶层的文件夹是我们设置的输出目录,第二层是桶,Flink 将当前的时间作为 `bucket-path` 桶名。实际输出时,Flink 会启动多个并行的实例,每个实例有自己的 `task-id`,`task-id` 被添加在了 `part` 之后。 我们也可以自定义数据分配的方式,将某一条数据分配到相应的桶中。 @@ -224,13 +233,13 @@ StreamingFileSink fileSink = StreamingFileSink .build(); ``` -上述的文件夹结构中,有“inprogress”字样,这与`StreamingFileSink`能够提供的Exactly-Once保障有关。一份数据从生成到最终可用需要经过3个阶段:进行中(In-progress)、等待(Pending)和结束(Finished)。当数据刚刚生成时,文件处于In-progress阶段;当数据已经准备好(比如单个part文件足够大),文件被置为Pending阶段;下次Checkpoint执行完,整个作业的状态数据是一致的,文件最终被置为Finished阶段,Finished阶段的文件名没有“inprogress”的字样。从这个角度来看,`StreamingFileSink`和Checkpoint机制结合,能够提供Exactly-Once保障。 +上述的文件夹结构中,有“inprogress”字样,这与 `StreamingFileSink` 能够提供的 Exactly-Once 保障有关。一份数据从生成到最终可用需要经过 3 个阶段:进行中(In-progress)、等待(Pending)和结束(Finished)。当数据刚刚生成时,文件处于 In-progress 阶段;当数据已经准备好(比如单个 part 文件足够大),文件被置为 Pending 阶段;下次 Checkpoint 执行完,整个作业的状态数据是一致的,文件最终被置为 Finished 阶段,Finished 阶段的文件名没有“inprogress”的字样。从这个角度来看,`StreamingFileSink` 和 Checkpoint 机制结合,能够提供 Exactly-Once 保障。 -## 7.3.2 Flink Kafka Connector +## Flink Kafka Connector -在第1章中我们曾提到,Kafka是一个消息队列,它可以在Flink的上游向Flink发送数据,也可以在Flink的下游接收Flink的输出。Kafka是一个很多公司都采用的消息队列,因此非常具有代表性。 +在第 1 章中我们曾提到,Kafka 是一个消息队列,它可以在 Flink 的上游向 Flink 发送数据,也可以在 Flink 的下游接收 Flink 的输出。Kafka 是一个很多公司都采用的消息队列,因此非常具有代表性。 -Kafka的API经过不断迭代,已经趋于稳定,我们接下来主要介绍基于稳定版本的Kafka Connector。如果仍然使用较旧版本的Kafka(0.11或更旧的版本),可以通过官方文档来了解具体的使用方法。由于Kafka Connector并没有内置在Flink核心程序中,使用之前,我们需要在Maven中添加依赖。 +Kafka 的 API 经过不断迭代,已经趋于稳定,我们接下来主要介绍基于稳定版本的 Kafka Connector。如果仍然使用较旧版本的 Kafka(0.11 或更旧的版本),可以通过官方文档来了解具体的使用方法。由于 Kafka Connector 并没有内置在 Flink 核心程序中,使用之前,我们需要在 Maven 中添加依赖。 ```xml @@ -240,12 +249,12 @@ Kafka的API经过不断迭代,已经趋于稳定,我们接下来主要介绍 ``` -### 1. Flink Kafka Source +### Flink Kafka Source -Kafka作为一个Flink作业的上游,可以为该作业提供数据,我们需要一个可以连接Kafka的Source读取Kafka中的内容,这时Kafka是一个Producer,Flink作为Kafka的Consumer来消费Kafka中的数据。代码清单 7-8展示了如何初始化一个Kafka Source Connector。 +Kafka 作为一个 Flink 作业的上游,可以为该作业提供数据,我们需要一个可以连接 Kafka 的 Source 读取 Kafka 中的内容,这时 Kafka 是一个 Producer,Flink 作为 Kafka 的 Consumer 来消费 Kafka 中的数据。代码清单 7-8 展示了如何初始化一个 Kafka Source Connector。 ```java -// Kafka参数 +// Kafka 参数 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "flink-group"); @@ -257,17 +266,17 @@ FlinkKafkaConsumer consumer = DataStream stream = env.addSource(consumer); ``` -代码清单 7-8 初始化Kafka Source Consumer +代码清单 7-8 初始化 Kafka Source Consumer -代码清单7-8创建了一个FlinkKafkaConsumer,它需要3个参数:Topic、反序列化方式和Kafka相关参数。Topic是我们想读取的具体内容,是一个字符串,并且可以支持正则表达式。Kafka中传输的是二进制数据,需要提供一个反序列化方式,将数据转化为具体的Java或Scala对象。Flink已经提供了一些序列化实现,比如:SimpleStringSchema按照字符串进行序列化和反序列化,JsonNodeDeserializationSchema使用Jackson对JSON数据进行序列化和反序列化。如果数据类型比较复杂,我们需要实现DeserializationSchema或者KafkaDeserializationSchema接口。最后一个参数Properties是Kafka相关的设置,用来配置Kafka的Consumer,我们需要配置bootstrap.servers和group.id,其他的参数可以参考Kafka的文档进行配置。 +代码清单 7-8 创建了一个 FlinkKafkaConsumer,它需要 3 个参数:Topic、反序列化方式和 Kafka 相关参数。Topic 是我们想读取的具体内容,是一个字符串,并且可以支持正则表达式。Kafka 中传输的是二进制数据,需要提供一个反序列化方式,将数据转化为具体的 Java 或 Scala 对象。Flink 已经提供了一些序列化实现,比如:SimpleStringSchema 按照字符串进行序列化和反序列化,JsonNodeDeserializationSchema 使用 Jackson 对 JSON 数据进行序列化和反序列化。如果数据类型比较复杂,我们需要实现 DeserializationSchema 或者 KafkaDeserializationSchema 接口。最后一个参数 Properties 是 Kafka 相关的设置,用来配置 Kafka 的 Consumer,我们需要配置 bootstrap.servers 和 group.id,其他的参数可以参考 Kafka 的文档进行配置。 -Flink Kafka Consumer可以配置从哪个位置读取消息队列中的数据。默认情况下,从Kafka Consumer Group记录的Offset开始消费,Consumer Group是根据group.id所配置的。其他配置可以参考下面的代码。 +Flink Kafka Consumer 可以配置从哪个位置读取消息队列中的数据。默认情况下,从 Kafka Consumer Group 记录的 Offset 开始消费,Consumer Group 是根据 group.id 所配置的。其他配置可以参考下面的代码。 ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); FlinkKafkaConsumer consumer = new FlinkKafkaConsumer<>(...); -consumer.setStartFromGroupOffsets(); // 默认从Kafka记录中的Offset开始 +consumer.setStartFromGroupOffsets(); // 默认从 Kafka 记录中的 Offset 开始 consumer.setStartFromEarliest(); // 从最早的数据开始 consumer.setStartFromLatest(); // 从最近的数据开始 consumer.setStartFromTimestamp(...); // 从某个时间戳开始 @@ -275,16 +284,18 @@ consumer.setStartFromTimestamp(...); // 从某个时间戳开始 DataStream stream = env.addSource(consumer); ``` -**注意** +:::{note} 上述代码中配置消费的起始位置只影响作业第一次启动时所应读取的位置,不会影响故障恢复时重新消费的位置。 -如果作业启用了Flink的Checkpoint机制,Checkpoint时会记录Kafka Consumer消费到哪个位置,或者说记录了Consumer Group在该Topic下每个分区的Offset。如果遇到故障恢复,Flink会从最近一次的Checkpoint中恢复Offset,并从该Offset重新消费Kafka中的数据。可见,Flink Kafka Consumer是支持数据重发的。 +::: + +如果作业启用了 Flink 的 Checkpoint 机制,Checkpoint 时会记录 Kafka Consumer 消费到哪个位置,或者说记录了 Consumer Group 在该 Topic 下每个分区的 Offset。如果遇到故障恢复,Flink 会从最近一次的 Checkpoint 中恢复 Offset,并从该 Offset 重新消费 Kafka 中的数据。可见,Flink Kafka Consumer 是支持数据重发的。 -### 2. Flink Kafka Sink +### Flink Kafka Sink -Kafka作为Flink作业的下游,可以接收Flink作业的输出,这时我们可以通过Kafka Sink将处理好的数据输出到Kafka中。在这种场景下,Flink是生成数据的Producer,向Kafka输出。 -比如我们将WordCount程序结果输出到一个Kafka数据流中。 +Kafka 作为 Flink 作业的下游,可以接收 Flink 作业的输出,这时我们可以通过 Kafka Sink 将处理好的数据输出到 Kafka 中。在这种场景下,Flink 是生成数据的 Producer,向 Kafka 输出。 +比如我们将 WordCount 程序结果输出到一个 Kafka 数据流中。 ```java DataStream> wordCount = ... @@ -298,9 +309,9 @@ FlinkKafkaProducer> ( wordCount.addSink(producer); ``` -上面的代码创建了一个FlinkKafkaProducer,它需要4个参数:Topic、序列化方式、连接Kafka的相关参数以及选择什么样的投递保障。这些参数中,Topic和连接的相关Kafka参数与前文所述的内容基本一样。 +上面的代码创建了一个 FlinkKafkaProducer,它需要 4 个参数:Topic、序列化方式、连接 Kafka 的相关参数以及选择什么样的投递保障。这些参数中,Topic 和连接的相关 Kafka 参数与前文所述的内容基本一样。 -序列化方式与前面提到的反序列化方式相对应,它主要将Java或Scala对象转化为可在Kafka中传输的二进制数据。这个例子中,我们要传输的是一个Tuple2,需要提供对这个数据类型进行序列化的代码,例如代码清单 7-9的序列化代码。 +序列化方式与前面提到的反序列化方式相对应,它主要将 Java 或 Scala 对象转化为可在 Kafka 中传输的二进制数据。这个例子中,我们要传输的是一个 Tuple2,需要提供对这个数据类型进行序列化的代码,例如代码清单 7-9 的序列化代码。 ```java public static class KafkaWordCountSerializationSchema implements @@ -321,11 +332,11 @@ element.f1).getBytes(StandardCharsets.UTF_8)); } ``` -代码清单 7-9 将数据写到Kafka Sink时,需要进行序列化 +代码清单 7-9 将数据写到 Kafka Sink 时,需要进行序列化 -最后一个参数决定了Flink Kafka Sink以什么样的语义来保障数据写入Kafka,它接受FlinkKafkaProducer.Semantic的枚举类型,有3种类型:NONE、AT_LEAST_ONCE和EXACTLY_ONCE。 +最后一个参数决定了 Flink Kafka Sink 以什么样的语义来保障数据写入 Kafka,它接受 FlinkKafkaProducer.Semantic 的枚举类型,有 3 种类型:NONE、AT_LEAST_ONCE 和 EXACTLY_ONCE。 - None:不提供任何保障,数据可能会丢失也可能会重复。 - AT_LEAST_ONCE:保证不丢失数据,但是有可能会重复。 -- EXACTLY_ONCE:基于Kafka提供的事务写功能,一条数据最终只写入Kafka一次。 +- EXACTLY_ONCE:基于 Kafka 提供的事务写功能,一条数据最终只写入 Kafka 一次。 -其中,EXACTLY_ONCE基于Kafka提供的事务写功能,使用了我们提到的Two-Phase-Commit协议,它保证了数据端到端的Exactly-Once保障。当然,这个类型的代价是输出延迟会增大。实际执行过程中,这种方式比较依赖Kafka和Flink之间的协作,如果Flink作业的故障恢复时间过长,Kafka不会长时间保存事务中的数据,有可能发生超时,最终也可能会导致数据丢失。AT_LEAST_ONCE是默认的,它不会丢失数据,但数据有可能是重复的。 +其中,EXACTLY_ONCE 基于 Kafka 提供的事务写功能,使用了我们提到的 Two-Phase-Commit 协议,它保证了数据端到端的 Exactly-Once 保障。当然,这个类型的代价是输出延迟会增大。实际执行过程中,这种方式比较依赖 Kafka 和 Flink 之间的协作,如果 Flink 作业的故障恢复时间过长,Kafka 不会长时间保存事务中的数据,有可能发生超时,最终也可能会导致数据丢失。AT_LEAST_ONCE 是默认的,它不会丢失数据,但数据有可能是重复的。 diff --git a/doc/ch-flink-connectors/index.md b/doc/ch-flink-connectors/index.md index 47671ef..dfe97ed 100644 --- a/doc/ch-flink-connectors/index.md +++ b/doc/ch-flink-connectors/index.md @@ -1,6 +1,6 @@ -# Flink连接器 +# Flink 连接器 -经过前文的学习,我们已经了解了Flink如何对一个数据流进行有状态的计算。在实际生产环境中,数据可能存放在不同的系统中,比如文件系统、数据库或消息队列。一个完整的Flink作业包括Source和Sink两大模块,Source和Sink肩负着Flink与外部系统进行数据交互的重要功能,它们又被称为外部连接器(Connector)。本章将详细介绍Flink的Connector相关知识,主要内容如下。 +经过前文的学习,我们已经了解了 Flink 如何对一个数据流进行有状态的计算。在实际生产环境中,数据可能存放在不同的系统中,比如文件系统、数据库或消息队列。一个完整的 Flink 作业包括 Source 和 Sink 两大模块,Source 和 Sink 肩负着 Flink 与外部系统进行数据交互的重要功能,它们又被称为外部连接器(Connector)。本章将详细介绍 Flink 的 Connector 相关知识,主要内容如下。 ```{tableofcontents} ``` \ No newline at end of file diff --git a/doc/ch-programming-basics/exercise-Flink-development-environment.md b/doc/ch-programming-basics/exercise-Flink-development-environment.md index e609df3..ecc17cb 100644 --- a/doc/ch-programming-basics/exercise-Flink-development-environment.md +++ b/doc/ch-programming-basics/exercise-Flink-development-environment.md @@ -33,11 +33,11 @@ $ cd flink-1.11.2-bin-scala_2.11 # 进入解压目录 $ ./bin/start-cluster.sh # 启动 Flink 集群 ``` -成功启动后,打开浏览器,输入 `http://localhost:8081`,可以进入 Flink 集群的仪表盘(WebUI),如 {numref}`flink-WebUI-job` 所示。Flink WebUI 可以对 Flink 集群进行管理和监控。 +成功启动后,打开浏览器,输入 `http://localhost:8081`,可以进入 Flink 集群的仪表盘(WebUI),如 {numref}`fig-flink-WebUI` 所示。Flink WebUI 可以对 Flink 集群进行管理和监控。 ```{figure} ./img/flink-WebUI.png --- -name: flink-WebUI +name: fig-flink-WebUI width: 60% --- Flink WebUI @@ -63,61 +63,61 @@ archetype 是 Maven 提供的一种项目模板,是别人提前准备好了的 不熟悉 Maven 的读者可以先使用 IntelliJ IDEA 内置的 Maven 工具,熟悉 Maven 的读者可直接跳过这部分。 -如 {numref}`new-project` 所示,在 IntelliJ IDEA 里依次单击“File”→“New”→“Project”,创建一个新工程。 +如 {numref}`fig-new-project` 所示,在 IntelliJ IDEA 里依次单击“File”→“New”→“Project”,创建一个新工程。 ```{figure} ./img/new-project.png --- -name: new-project +name: fig-new-project width: 60% --- 在 IntelliJ IDEA 中创建新工程 ``` -如 {numref}`Maven` 所示,选择左侧的“Maven”,并勾选“Create from archetype”,并单击右侧的“Add Archetype”按钮。 +如 {numref}`fig-Maven` 所示,选择左侧的“Maven”,并勾选“Create from archetype”,并单击右侧的“Add Archetype”按钮。 ```{figure} ./img/Maven.png --- -name: Maven +name: fig-Maven width: 60% --- 添加 Maven 项目 ``` -如 {numref}`archetype` 所示,在弹出的窗口中填写 archetype 信息。其中 GroupId 为 org.apache.flink,ArtifactId 为 flink-quickstart-java,Version 为 1.11.2,然后单击“OK”。这里主要是告诉 Maven 去资源库中下载哪个版本的模板。随着 Flink 的迭代开发,Version 也在不断更新,读者可以在 Flink 的 Maven 资源库中查看最新的版本。GroupId、ArtifactId、Version 可以唯一表示一个发布出来的 Java 程序包。配置好后,单击 Next 按钮进入下一步。 +如 {numref}`fig-archetype` 所示,在弹出的窗口中填写 archetype 信息。其中 GroupId 为 org.apache.flink,ArtifactId 为 flink-quickstart-java,Version 为 1.11.2,然后单击“OK”。这里主要是告诉 Maven 去资源库中下载哪个版本的模板。随着 Flink 的迭代开发,Version 也在不断更新,读者可以在 Flink 的 Maven 资源库中查看最新的版本。GroupId、ArtifactId、Version 可以唯一表示一个发布出来的 Java 程序包。配置好后,单击 Next 按钮进入下一步。 ```{figure} ./img/archetype.png --- -name: archetype +name: fig-archetype width: 60% --- 填写 archetype 信息 ``` -如 {numref}`project-info` 所示,这一步是建立你自己的 Maven 工程,以区别其他 Maven 工程,GroupId 是你的公司或部门名称(可以随意填写),ArtifactId 是工程发布时的 Java 归档(Java Archive,JAR)包名,Version 是工程的版本。这些配置主要用于区别不同公司所发布的不同包,这与 Maven 和版本控制相关,Maven 的教程中都会介绍这些概念,这里不赘述。 +如 {numref}`fig-project-info` 所示,这一步是建立你自己的 Maven 工程,以区别其他 Maven 工程,GroupId 是你的公司或部门名称(可以随意填写),ArtifactId 是工程发布时的 Java 归档(Java Archive,JAR)包名,Version 是工程的版本。这些配置主要用于区别不同公司所发布的不同包,这与 Maven 和版本控制相关,Maven 的教程中都会介绍这些概念,这里不赘述。 ```{figure} ./img/project-info.png --- -name: project-info +name: fig-project-info width: 60% --- 配置你的工程信息 ``` -接下来可以继续单击“Next”按钮,注意最后一步选择你的工程所在的磁盘位置,单击“Finish”按钮,如 {numref}`project-location` 所示。至此,一个 Flink 模板就下载好了。 +接下来可以继续单击“Next”按钮,注意最后一步选择你的工程所在的磁盘位置,单击“Finish”按钮,如 {numref}`fig-project-location` 所示。至此,一个 Flink 模板就下载好了。 ```{figure} ./img/project-location.png --- -name: project-location +name: fig-project-location width: 60% --- 配置本工程的位置 ``` -工程结构如 {numref}`project-structure` 所示。左侧的“Project”栏是工程结构,其中 src/main/java 文件夹是 Java 代码文件存放位置,src/main/scala 是 Scala 代码文件存放位置。我们可以在 StreamingJob 这个文件上继续修改,也可以重新创建一个新文件。 +工程结构如 {numref}`fig-project-structure` 所示。左侧的“Project”栏是工程结构,其中 src/main/java 文件夹是 Java 代码文件存放位置,src/main/scala 是 Scala 代码文件存放位置。我们可以在 StreamingJob 这个文件上继续修改,也可以重新创建一个新文件。 ```{figure} ./img/project-structure.png --- -name: project-structure +name: fig-project-structure width: 60% --- 工程结构 @@ -272,12 +272,12 @@ StreamExecutionEnvironment.getExecutionEnvironment(); 我们在 1.7 节中展示过如何启动一个 Kafka 集群,并向某个 Topic 内发送数据流。在本次 Flink 作业启动之前,我们还要按照 1.7 节提到的方式启动一个 Kafka 集群、创建对应的 Topic,并向 Topic 中写入数据。 1. 在 IntelliJ IDEA 中运行程序 - - 在 IntelliJ IDEA 中,单击绿色运行按钮,运行这个程序。{numref}`run` 所示的两个绿色运行按钮中的任意一个都可以运行这个程序。 - - IntelliJ IDEA 下方的“Run”栏会显示程序的输出,包括本次需要输出的结果,{numref}`result` 所示。 + - 在 IntelliJ IDEA 中,单击绿色运行按钮,运行这个程序。{numref}`fig-run` 所示的两个绿色运行按钮中的任意一个都可以运行这个程序。 + - IntelliJ IDEA 下方的“Run”栏会显示程序的输出,包括本次需要输出的结果,{numref}`fig-result` 所示。 ```{figure} ./img/run.png --- -name: run +name: fig-run width: 60% --- 在 IntelliJ IDEA 中运行 Flink 程序 @@ -285,7 +285,7 @@ width: 60% ```{figure} ./img/result.png --- -name: result +name: fig-result width: 60% --- WordCount 程序运行结果 @@ -319,11 +319,11 @@ com.flink.tutorials.java.api.projects.wordcount.WordCountKafkaInStdOut /Users/luweizheng/Projects/big-data/flink-tutorials/target/flink-tutorials-0.1.jar ``` -如{numref}`flink-WebUI-job`示,这时,Flink WebUI 上就多了一个 Flink 作业。 +如{numref}`fig-flink-WebUI-job`示,这时,Flink WebUI 上就多了一个 Flink 作业。 ```{figure} ./img/flink-WebUI-job.png --- -name: flink-WebUI-job +name: fig-flink-WebUI-job width: 60% --- Flink WebUI 中多了一个 Flink 作业 diff --git a/doc/ch-programming-basics/functional-programming.md b/doc/ch-programming-basics/functional-programming.md index 7f4d943..ccd3aac 100644 --- a/doc/ch-programming-basics/functional-programming.md +++ b/doc/ch-programming-basics/functional-programming.md @@ -73,11 +73,11 @@ x -> 2 * x 代码清单 2-5 Java Lambda 表达式 -可以看到,这几个例子都有一个 `->`,表示这是一个函数式的映射,相对比较灵活的是左侧的输入参数和右侧的函数体。{numref}`lambda` 所示为 Java Lambda 表达式的拆解,这很符合数学中对一个函数做映射的思维方式。 +可以看到,这几个例子都有一个 `->`,表示这是一个函数式的映射,相对比较灵活的是左侧的输入参数和右侧的函数体。{numref}`fig-lambda` 所示为 Java Lambda 表达式的拆解,这很符合数学中对一个函数做映射的思维方式。 ```{figure} ./img/lambda.png --- -name: lambda +name: fig-lambda width: 60% --- Java Lambda 表达式拆解 @@ -185,11 +185,11 @@ lengths.forEach((s) -> System.out.println(s)); 代码清单 2-7 使用 Lambda 表达式来完成对 String 类型列表的操作 -这段代码中,数据先经过 `stream()` 方法被转换为一个 `Stream` 类型,后经过 `filter()`、`map()`、`collect()` 等处理逻辑,生成我们所需的输出。各个操作之间使用英文点号 `.` 来连接,这种方式被称作方法链(Method Chaining)或者链式调用。链式调用可以被抽象成一个管道(Pipeline),将代码清单 2-7 进行抽象,可以形成 {numref}`stream` 所示的 Stream 管道。 +这段代码中,数据先经过 `stream()` 方法被转换为一个 `Stream` 类型,后经过 `filter()`、`map()`、`collect()` 等处理逻辑,生成我们所需的输出。各个操作之间使用英文点号 `.` 来连接,这种方式被称作方法链(Method Chaining)或者链式调用。链式调用可以被抽象成一个管道(Pipeline),将代码清单 2-7 进行抽象,可以形成 {numref}`fig-stream` 所示的 Stream 管道。 ```{figure} ./img/stream.png --- -name: stream +name: fig-stream width: 60% --- Stream 管道 diff --git a/doc/ch-programming-basics/inheritance-and-polymorphism.md b/doc/ch-programming-basics/inheritance-and-polymorphism.md index ba83d86..c498c41 100644 --- a/doc/ch-programming-basics/inheritance-and-polymorphism.md +++ b/doc/ch-programming-basics/inheritance-and-polymorphism.md @@ -7,9 +7,9 @@ 继承在现实世界中无处不在。比如我们想描述动物和它们的行为,可以先创建一个动物类别,动物类别又可以分为狗和鱼,这样的一种层次结构其实就是编程语言中的继承关系。动物类涵盖了每种动物都有的属性,比如名字、描述信息等。从动物类衍生出的众多子类,比如鱼类、狗类等都具备动物的基本属性。不同类型的动物又有自己的特点,比如鱼会游泳、狗会吼叫。继承关系保证所有动物都具有动物的基本属性,这样就不必在创建一个新的子类的时候,将它们的基本属性(名字、描述信息)再复制一遍。同时,子类更加关注自己区别于其他类的特点,比如鱼所特有的游泳动作。 -{numref}`extend` 所示为对动物进行的简单的建模。其中,每个动物都有一些基本属性,即名字(name)和描述(description);有一些基本方法,即 getName()和 eat(),这些基本功能共同组成了 Animal 类。在 Animal 类的基础上,可以衍生出各种各样的子类、子类的子类等。比如,Dog 类有自己的 dogData 属性和 bark()方法,同时也可以使用父类的 name 等属性和 eat() 方法。 +{numref}`fig-extend` 所示为对动物进行的简单的建模。其中,每个动物都有一些基本属性,即名字(name)和描述(description);有一些基本方法,即 getName()和 eat(),这些基本功能共同组成了 Animal 类。在 Animal 类的基础上,可以衍生出各种各样的子类、子类的子类等。比如,Dog 类有自己的 dogData 属性和 bark()方法,同时也可以使用父类的 name 等属性和 eat() 方法。 -我们将 {numref}`extend` 所示的 Animal 类继承关系转化为代码,一个 Animal 公共父类可以抽象如代码清单 2-1 所示。 +我们将 {numref}`fig-extend` 所示的 Animal 类继承关系转化为代码,一个 Animal 公共父类可以抽象如代码清单 2-1 所示。 ```java public class Animal { @@ -36,7 +36,7 @@ public class Animal { ```{figure} ./img/extend.png --- -name: extend +name: fig-extend width: 60% --- Animal 类继承关系 diff --git a/doc/ch-state-checkpoint/checkpoint.md b/doc/ch-state-checkpoint/checkpoint.md index 8d5be79..6979669 100644 --- a/doc/ch-state-checkpoint/checkpoint.md +++ b/doc/ch-state-checkpoint/checkpoint.md @@ -3,156 +3,190 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -在上一节中,我们介绍了Flink的状态都是基于本地的,而Flink又是一个部署在多节点的分布式系统,分布式系统经常出现进程被杀、节点宕机或网络中断等问题,那么本地的状态在遇到故障时如何保证不丢呢?Flink定期保存状态数据到存储上,故障发生后从之前的备份中恢复,这个过程被称为Checkpoint机制。Checkpoint为Flink提供了Exactly-Once的投递保障。本节将介绍Flink的Checkpoint机制的原理,介绍中会使用多个概念:快照(Snapshot)、分布式快照(Distributed Snapshot)、检查点(Checkpoint)等,这些概念均指的是Flink的Checkpoint机制提供的数据备份过程,读者可以将这些概念等同看待。 +在上一节中,我们介绍了 Flink 的状态都是基于本地的,而 Flink 又是一个部署在多节点的分布式系统,分布式系统经常出现进程被杀、节点宕机或网络中断等问题,那么本地的状态在遇到故障时如何保证不丢呢?Flink 定期保存状态数据到存储上,故障发生后从之前的备份中恢复,这个过程被称为 Checkpoint 机制。Checkpoint 为 Flink 提供了 Exactly-Once 的投递保障。本节将介绍 Flink 的 Checkpoint 机制的原理,介绍中会使用多个概念:快照(Snapshot)、分布式快照(Distributed Snapshot)、检查点(Checkpoint)等,这些概念均指的是 Flink 的 Checkpoint 机制提供的数据备份过程,读者可以将这些概念等同看待。 -## Flink分布式快照流程 +## Flink 分布式快照流程 -首先我们来看一下一个简单的Checkpoint的大致流程: +首先我们来看一下一个简单的 Checkpoint 的大致流程: 1. 暂停处理新流入数据,将新数据缓存起来。 2. 将算子子任务的本地状态数据拷贝到一个远程的持久化存储上。 3. 继续处理新流入的数据,包括刚才缓存起来的数据。 -Flink是在Chandy–Lamport算法[^1]的基础上实现了一种分布式快照算法。在介绍Flink的快照详细流程前,我们先要了解一下检查点分界线(Checkpoint Barrier)的概念。如下图所示,Checkpoint Barrier被插入到数据流中,它将数据流切分成段。Flink的Checkpoint逻辑是,一段新数据流入导致状态发生了变化,Flink的算子接收到Checpoint Barrier后,对状态进行快照。每个Checkpoint Barrier有一个ID,表示该段数据属于哪次Checkpoint。如下图所示,当ID为n的Checkpoint Barrier到达每个算子后,表示要对n-1和n之间状态更新做快照。Checkpoint Barrier有点像Event Time中的Watermark,它被插入到数据流中,但并不影响数据流原有的处理顺序。 - -![Checkpoint Barrier](./img/checkpoint-barrier.png) - -接下来,我们构建一个并行数据流图,用这个并行数据流图来演示Flink的分布式快照机制。这个数据流图的并行度为2,数据流会在这些并行算子上从Source流动到Sink。 - -首先,Flink的检查点协调器(Checkpoint Coordinator)触发一次Checkpoint(Trigger Checkpoint),这个请求会发送给Source的各个子任务。 - -![JobManager触发一次Checkpoint](./img/checkpoint-1.png) - - - -各Source算子子任务接收到这个Checkpoint请求之后,会将自己的状态写入到状态后端,生成一次快照,并且会向下游广播Checkpoint Barrier。 - -![Source将自身状态写入状态后端,向下游发送Checkpoint Barrier](./img/checkpoint-2.png) +Flink 是在 Chandy–Lamport 算法 [^1] 的基础上实现了一种分布式快照算法。在介绍 Flink 的快照详细流程前,我们先要了解一下检查点分界线(Checkpoint Barrier)的概念。如{numref}`fig-checkpoint-barrier` 所示,Checkpoint Barrier 被插入到数据流中,它将数据流切分成段。Flink 的 Checkpoint 逻辑是,一段新数据流入导致状态发生了变化,Flink 的算子接收到 Checpoint Barrier 后,对状态进行快照。每个 Checkpoint Barrier 有一个 ID,表示该段数据属于哪次 Checkpoint。如{numref}`fig-checkpoint-barrier` 所示,当 ID 为 n 的 Checkpoint Barrier 到达每个算子后,表示要对 n-1 和 n 之间状态更新做快照。Checkpoint Barrier 有点像 Event Time 中的 Watermark,它被插入到数据流中,但并不影响数据流原有的处理顺序。 +```{figure} ./img/checkpoint-barrier.png +--- +name: fig-checkpoint-barrier +width: 80% +align: center +--- +Checkpoint Barrier +``` +接下来,我们构建一个并行数据流图,用这个并行数据流图来演示 Flink 的分布式快照机制。这个数据流图的并行度为 2,数据流会在这些并行算子上从 Source 流动到 Sink。 -Source算子做完快照后,还会给Checkpoint Coodinator发送一个确认,告知自己已经做完了相应的工作。这个确认中包括了一些元数据,其中就包括刚才备份到State Backend的状态句柄,或者说是指向状态的指针。至此,Source完成了一次Checkpoint。跟Watermark的传播一样,一个算子子任务要把Checkpoint Barrier发送给所连接的所有下游子任务。 +首先,Flink 的检查点协调器(Checkpoint Coordinator)触发一次 Checkpoint(Trigger Checkpoint),这个请求会发送给 Source 的各个子任务。 -![Snapshot之后发送ACK给JobManager](./img/checkpoint-3.png) +```{figure} ./img/checkpoint-1.png +--- +name: fig-checkpoint-trigger +width: 80% +align: center +--- +JobManager 触发一次 Checkpoint +``` -对于下游算子来说,可能有多个与之相连的上游输入,我们将算子之间的边称为通道。Source要将一个ID为n的Checkpoint Barrier向所有下游算子广播,这也意味着下游算子的多个输入通道里都会收到ID为n的Checkpoint Barrier,而且不同输入通道里Checkpoint Barrier的流入速度不同,ID为n的Checkpoint Barrier到达的时间不同。Checkpoint Barrier传播的过程需要进行对齐(Barrier Alignment),我们从数据流图中截取一小部分,以下图为例,来分析Checkpoint Barrier是如何在算子间传播和对齐的。 +各 Source 算子子任务接收到这个 Checkpoint 请求之后,会将自己的状态写入到状态后端,生成一次快照,并且会向下游广播 Checkpoint Barrier。 -![Barrier在算子间传播过程](./img/barrier-alignment.png) +```{figure} ./img/checkpoint-2.png +--- +name: fig-checkpoint-source +width: 80% +align: center +--- +Source 将自身状态写入状态后端,向下游发送 Checkpoint Barrier +``` +Source 算子做完快照后,还会给 Checkpoint Coodinator 发送一个确认,告知自己已经做完了相应的工作。这个确认中包括了一些元数据,其中就包括刚才备份到 State Backend 的状态句柄,或者说是指向状态的指针。至此,Source 完成了一次 Checkpoint。跟 Watermark 的传播一样,一个算子子任务要把 Checkpoint Barrier 发送给所连接的所有下游子任务。 +```{figure} ./img/checkpoint-3.png +--- +name: fig-checkpoint-ack +width: 80% +align: center +--- +Snapshot 之后发送 ACK 给 JobManager +``` +对于下游算子来说,可能有多个与之相连的上游输入,我们将算子之间的边称为通道。Source 要将一个 ID 为 n 的 Checkpoint Barrier 向所有下游算子广播,这也意味着下游算子的多个输入通道里都会收到 ID 为 n 的 Checkpoint Barrier,而且不同输入通道里 Checkpoint Barrier 的流入速度不同,ID 为 n 的 Checkpoint Barrier 到达的时间不同。Checkpoint Barrier 传播的过程需要进行对齐(Barrier Alignment),我们从数据流图中截取一小部分,以下图为例,来分析 Checkpoint Barrier 是如何在算子间传播和对齐的。 +```{figure} ./img/barrier-alignment.png +--- +name: fig-barrier-propagation +width: 80% +align: center +--- +Barrier 在算子间传播过程 +``` -如上图所示,对齐分为四步: +如 {numref}`fig-barrier-propagation` 所示,对齐分为四步: -1. 算子子任务在某个输入通道中收到第一个ID为n的Checkpoint Barrier,但是其他输入通道中ID为n的Checkpoint Barrier还未到达,该算子子任务开始准备进行对齐。 +1. 算子子任务在某个输入通道中收到第一个 ID 为 n 的 Checkpoint Barrier,但是其他输入通道中 ID 为 n 的 Checkpoint Barrier 还未到达,该算子子任务开始准备进行对齐。 2. 算子子任务将第一个输入通道的数据缓存下来,同时继续处理其他输入通道的数据,这个过程被称为对齐。 -3. 第二个输入通道ID为n的Checkpoint Barrier抵达该算子子任务,所有通道ID为n的Checkpoint Barrier都到达该算子子任务,该算子子任务执行快照,将状态写入State Backend,然后将ID为n的Checkpoint Barrier向下游所有输出通道广播。 +3. 第二个输入通道 ID 为 n 的 Checkpoint Barrier 抵达该算子子任务,所有通道 ID 为 n 的 Checkpoint Barrier 都到达该算子子任务,该算子子任务执行快照,将状态写入 State Backend,然后将 ID 为 n 的 Checkpoint Barrier 向下游所有输出通道广播。 4. 对于这个算子子任务,快照执行结束,继续处理各个通道中新流入数据,包括刚才缓存起来的数据。 -数据流图中的每个算子子任务都要完成一遍上述的对齐、快照、确认的工作,当最后所有Sink算子确认完成快照之后,说明ID为n的Checkpoint执行结束,Checkpoint Coordinator向State Backend写入一些本次Checkpoint的元数据。 +数据流图中的每个算子子任务都要完成一遍上述的对齐、快照、确认的工作,当最后所有 Sink 算子确认完成快照之后,说明 ID 为 n 的 Checkpoint 执行结束,Checkpoint Coordinator 向 State Backend 写入一些本次 Checkpoint 的元数据。 -![Sink算子向JobManager发送ACK,一次Checkpoint完成](./img/checkpoint-4.png) +```{figure} ./img/checkpoint-4.png +--- +name: fig-checkpoint-completion +width: 80% +align: center +--- +Sink 算子向 JobManager 发送 ACK,一次 Checkpoint 完成 +``` -之所以要进行对齐,主要是为了保证一个Flink作业所有算子的状态是一致的,也就是说,一个Flink作业前前后后所有算子写入State Backend的状态都是基于同样的数据。 +之所以要进行对齐,主要是为了保证一个 Flink 作业所有算子的状态是一致的,也就是说,一个 Flink 作业前前后后所有算子写入 State Backend 的状态都是基于同样的数据。 ## 快照性能优化方案 前面和大家介绍了一致性快照的具体流程,这种方式保证了数据的一致性,但有一些潜在的问题: -1. 每次进行Checkpoint前,都需要暂停处理新流入数据,然后开始执行快照,假如状态比较大,一次快照可能长达几秒甚至几分钟。 -2. Checkpoint Barrier对齐时,必须等待所有上游通道都处理完,假如某个上游通道处理很慢,这可能造成整个数据流堵塞。 +1. 每次进行 Checkpoint 前,都需要暂停处理新流入数据,然后开始执行快照,假如状态比较大,一次快照可能长达几秒甚至几分钟。 +2. Checkpoint Barrier 对齐时,必须等待所有上游通道都处理完,假如某个上游通道处理很慢,这可能造成整个数据流堵塞。 -针对这些问题Flink已经有了一些解决方案,并且还在不断优化。 +针对这些问题 Flink 已经有了一些解决方案,并且还在不断优化。 -对于第一个问题,Flink提供了异步快照(Asynchronous Snapshot)的机制。当实际执行快照时,Flink可以立即向下广播Checkpoint Barrier,表示自己已经执行完自己部分的快照。同时,Flink启动一个后台线程,它创建本地状态的一份拷贝,这个线程用来将本地状态的拷贝同步到State Backend上,一旦数据同步完成,再给Checkpoint Coordinator发送确认信息。拷贝一份数据肯定占用更多内存,这时可以利用写入时复制(Copy-on-Write)的优化策略。Copy-on-Write指:如果这份内存数据没有任何修改,那没必要生成一份拷贝,只需要有一个指向这份数据的指针,通过指针将本地数据同步到State Backend上;如果这份内存数据有一些更新,那再去申请额外的内存空间并维护两份数据,一份是快照时的数据,一份是更新后的数据。是否开启Asynchronous Snapshot是可以配置的,下一节使用不同的State Backend将介绍如何配置。 +对于第一个问题,Flink 提供了异步快照(Asynchronous Snapshot)的机制。当实际执行快照时,Flink 可以立即向下广播 Checkpoint Barrier,表示自己已经执行完自己部分的快照。同时,Flink 启动一个后台线程,它创建本地状态的一份拷贝,这个线程用来将本地状态的拷贝同步到 State Backend 上,一旦数据同步完成,再给 Checkpoint Coordinator 发送确认信息。拷贝一份数据肯定占用更多内存,这时可以利用写入时复制(Copy-on-Write)的优化策略。Copy-on-Write 指:如果这份内存数据没有任何修改,那没必要生成一份拷贝,只需要有一个指向这份数据的指针,通过指针将本地数据同步到 State Backend 上;如果这份内存数据有一些更新,那再去申请额外的内存空间并维护两份数据,一份是快照时的数据,一份是更新后的数据。是否开启 Asynchronous Snapshot 是可以配置的,下一节使用不同的 State Backend 将介绍如何配置。 -对于第二个问题,Flink允许跳过对齐这一步,或者说一个算子子任务不需要等待所有上游通道的Checkpoint Barrier,直接将Checkpoint Barrier广播,执行快照并继续处理后续流入数据。为了保证数据一致性,Flink必须将那些上下游正在传输的数据也作为状态保存到快照中,一旦重启,这些元素会被重新处理一遍。这种不需要对齐的Checkpoint机制被称为Unaligned Checkpoint,我们可以通过`env.getCheckpointConfig().enableUnalignedCheckpoints();`开启Unaligned Checkpoint。Unaligned Checkpoint也是支持Exactly-Once的。Unaligned Checkpoint不执行Checkpoint Barrier对齐,因此在负载较重的场景下表现更好,但这并不意味这Unaligned Checkpoint就是最优方案,由于要将正在传输的数据也进行快照,状态数据会很大,磁盘负载会加重,同时更大的状态意味着重启后状态恢复的时间也更长,运维管理的难度更大。 +对于第二个问题,Flink 允许跳过对齐这一步,或者说一个算子子任务不需要等待所有上游通道的 Checkpoint Barrier,直接将 Checkpoint Barrier 广播,执行快照并继续处理后续流入数据。为了保证数据一致性,Flink 必须将那些上下游正在传输的数据也作为状态保存到快照中,一旦重启,这些元素会被重新处理一遍。这种不需要对齐的 Checkpoint 机制被称为 Unaligned Checkpoint,我们可以通过 `env.getCheckpointConfig().enableUnalignedCheckpoints();` 开启 Unaligned Checkpoint。Unaligned Checkpoint 也是支持 Exactly-Once 的。Unaligned Checkpoint 不执行 Checkpoint Barrier 对齐,因此在负载较重的场景下表现更好,但这并不意味这 Unaligned Checkpoint 就是最优方案,由于要将正在传输的数据也进行快照,状态数据会很大,磁盘负载会加重,同时更大的状态意味着重启后状态恢复的时间也更长,运维管理的难度更大。 ## State Backend -前面已经分享了Flink的快照机制,其中State Backend起到了持久化存储数据的重要功能。Flink将State Backend抽象成了一种插件,并提供了三种State Backend,每种State Backend对数据的保存和恢复方式略有不同。接下来我们开始详细了解一下Flink的State Backend。 +前面已经分享了 Flink 的快照机制,其中 State Backend 起到了持久化存储数据的重要功能。Flink 将 State Backend 抽象成了一种插件,并提供了三种 State Backend,每种 State Backend 对数据的保存和恢复方式略有不同。接下来我们开始详细了解一下 Flink 的 State Backend。 ### MemoryStateBackend -从名字中可以看出,这种State Backend主要基于内存,它将数据存储在Java的堆区。当进行分布式快照时,所有算子子任务将自己内存上的状态同步到JobManager的堆上。因此,一个作业的所有状态要小于JobManager的内存大小。这种方式显然不能存储过大的状态数据,否则将抛出`OutOfMemoryError`异常。这种方式只适合调试或者实验,不建议在生产环境下使用。下面的代码告知一个Flink作业使用内存作为State Backend,并在参数中指定了状态的最大值,默认情况下,这个最大值是5MB。 +从名字中可以看出,这种 State Backend 主要基于内存,它将数据存储在 Java 的堆区。当进行分布式快照时,所有算子子任务将自己内存上的状态同步到 JobManager 的堆上。因此,一个作业的所有状态要小于 JobManager 的内存大小。这种方式显然不能存储过大的状态数据,否则将抛出 `OutOfMemoryError` 异常。这种方式只适合调试或者实验,不建议在生产环境下使用。下面的代码告知一个 Flink 作业使用内存作为 State Backend,并在参数中指定了状态的最大值,默认情况下,这个最大值是 5MB。 ```java env.setStateBackend(new MemoryStateBackend(MAX_MEM_STATE_SIZE)); ``` -如果不做任何配置,默认情况是使用内存作为State Backend。 +如果不做任何配置,默认情况是使用内存作为 State Backend。 ### FsStateBackend -这种方式下,数据持久化到文件系统上,文件系统包括本地磁盘、HDFS以及包括Amazon、阿里云在内的云存储服务。使用时,我们要提供文件系统的地址,尤其要写明前缀,比如:`file://`、`hdfs://`或`s3://`。此外,这种方式支持Asynchronous Snapshot,默认情况下这个功能是开启的,可加快数据同步速度。 +这种方式下,数据持久化到文件系统上,文件系统包括本地磁盘、HDFS 以及包括 Amazon、阿里云在内的云存储服务。使用时,我们要提供文件系统的地址,尤其要写明前缀,比如:`file://`、`hdfs://` 或 `s3://`。此外,这种方式支持 Asynchronous Snapshot,默认情况下这个功能是开启的,可加快数据同步速度。 ```java -// 使用HDFS作为State Backend +// 使用 HDFS 作为 State Backend env.setStateBackend(new FsStateBackend("hdfs://namenode:port/flink-checkpoints/chk-17/")); -// 使用阿里云OSS作为State Backend +// 使用阿里云 OSS 作为 State Backend env.setStateBackend(new FsStateBackend("oss:///")); -// 使用Amazon作为State Backend +// 使用 Amazon 作为 State Backend env.setStateBackend(new FsStateBackend("s3:///")); -// 关闭Asynchronous Snapshot +// 关闭 Asynchronous Snapshot env.setStateBackend(new FsStateBackend(checkpointPath, false)); ``` -Flink的本地状态仍然在TaskManager的内存堆区上,直到执行快照时状态数据会写到所配置的文件系统上。因此,这种方式能够享受本地内存的快速读写访问,也能保证大容量状态作业的故障恢复能力。 +Flink 的本地状态仍然在 TaskManager 的内存堆区上,直到执行快照时状态数据会写到所配置的文件系统上。因此,这种方式能够享受本地内存的快速读写访问,也能保证大容量状态作业的故障恢复能力。 ### RocksDBStateBackend -这种方式下,本地状态存储在本地的RocksDB上。RocksDB是一种嵌入式Key-Value数据库,数据实际保存在本地磁盘上。比起`FsStateBackend`的本地状态存储在内存中,RocksDB利用了磁盘空间,所以可存储的本地状态更大。然而,每次从RocksDB中读写数据都需要进行序列化和反序列化,因此读写本地状态的成本更高。快照执行时,Flink将存储于本地RocksDB的状态同步到远程的存储上,因此使用这种State Backend时,也要配置分布式存储的地址。Asynchronous Snapshot在默认情况也是开启的。 +这种方式下,本地状态存储在本地的 RocksDB 上。RocksDB 是一种嵌入式 Key-Value 数据库,数据实际保存在本地磁盘上。比起 `FsStateBackend` 的本地状态存储在内存中,RocksDB 利用了磁盘空间,所以可存储的本地状态更大。然而,每次从 RocksDB 中读写数据都需要进行序列化和反序列化,因此读写本地状态的成本更高。快照执行时,Flink 将存储于本地 RocksDB 的状态同步到远程的存储上,因此使用这种 State Backend 时,也要配置分布式存储的地址。Asynchronous Snapshot 在默认情况也是开启的。 -此外,这种State Backend允许增量快照(Incremental Checkpoint),Incremental Checkpoint的核心思想是每次快照时只对发生变化的数据增量写到分布式存储上,而不是将所有的本地状态都拷贝过去。Incremental Checkpoint非常适合超大规模的状态,快照的耗时将明显降低,同时,它的代价是重启恢复的时间更长。默认情况下,Incremental Checkpoint没有开启,需要我们手动开启。 +此外,这种 State Backend 允许增量快照(Incremental Checkpoint),Incremental Checkpoint 的核心思想是每次快照时只对发生变化的数据增量写到分布式存储上,而不是将所有的本地状态都拷贝过去。Incremental Checkpoint 非常适合超大规模的状态,快照的耗时将明显降低,同时,它的代价是重启恢复的时间更长。默认情况下,Incremental Checkpoint 没有开启,需要我们手动开启。 ```java -// 开启Incremental Checkpoint +// 开启 Incremental Checkpoint boolean enableIncrementalCheckpointing = true; env.setStateBackend(new RocksDBStateBackend(checkpointPath, enableIncrementalCheckpointing)); ``` -相比`FsStateBackend`,`RocksDBStateBackend`能够支持的本地和远程状态都更大,Flink社区已经有TB级的案例。 +相比 `FsStateBackend`,`RocksDBStateBackend` 能够支持的本地和远程状态都更大,Flink 社区已经有 TB 级的案例。 -除了上述三种之外,开发者也可以自行开发State Backend的具体实现。 +除了上述三种之外,开发者也可以自行开发 State Backend 的具体实现。 ## 故障重启恢复流程 ### 重启恢复基本流程 -Flink的重启恢复逻辑相对比较简单: +Flink 的重启恢复逻辑相对比较简单: 1. 重启应用,在集群上重新部署数据流图。 -2. 从持久化存储上读取最近一次的Checkpoint数据,加载到各算子子任务上。 +2. 从持久化存储上读取最近一次的 Checkpoint 数据,加载到各算子子任务上。 3. 继续处理新流入的数据。 -这样的机制可以保证Flink内部状态的Excatly-Once一致性。至于端到端的Exactly-Once一致性,要根据Source和Sink的具体实现而定,我们还会在第7章端到端Exactly-Once详细讨论。当发生故障时,一部分数据有可能已经流入系统,但还未进行Checkpoint,Source的Checkpoint记录了输入的Offset;当重启时,Flink能把最近一次的Checkpoint恢复到内存中,并根据Offset,让Source从该位置重新发送一遍数据,以保证数据不丢不重。像Kafka等消息队列是提供重发功能的,`socketTextStream`就不具有这种功能,也意味着不能保证端到端的Exactly-Once投递保障。 +这样的机制可以保证 Flink 内部状态的 Excatly-Once 一致性。至于端到端的 Exactly-Once 一致性,要根据 Source 和 Sink 的具体实现而定,我们还会在第 7 章端到端 Exactly-Once 详细讨论。当发生故障时,一部分数据有可能已经流入系统,但还未进行 Checkpoint,Source 的 Checkpoint 记录了输入的 Offset;当重启时,Flink 能把最近一次的 Checkpoint 恢复到内存中,并根据 Offset,让 Source 从该位置重新发送一遍数据,以保证数据不丢不重。像 Kafka 等消息队列是提供重发功能的,`socketTextStream` 就不具有这种功能,也意味着不能保证端到端的 Exactly-Once 投递保障。 当一个作业出现故障,进行重启时,势必会暂停一段时间,这段时间上游数据仍然继续发送过来。作业被重新拉起后,肯定需要将刚才未处理的数据消化掉。这个过程可以被理解为,一次跑步比赛,运动员不慎跌倒,爬起来重新向前追击。为了赶上当前最新进度,作业必须以更快的速度处理囤积的数据。所以,在设定资源时,我们必须留出一定的富余量,以保证重启后这段“赶进度”过程中的资源消耗。 ### 三种重启策略 -一般情况下,一个作业遇到一些异常情况会导致运行异常,潜在的异常情况包括:机器故障、部署环境抖动、流量激增、输入数据异常等。以输入数据异常为例,如果一个作业发生了故障重启,如果触发故障的原因没有根除,那么重启之后仍然会出现故障。因此,在解决根本问题之前,一个作业很可能无限次地故障重启,陷入死循环。为了避免重启死循环,Flink提供了三种重启策略: +一般情况下,一个作业遇到一些异常情况会导致运行异常,潜在的异常情况包括:机器故障、部署环境抖动、流量激增、输入数据异常等。以输入数据异常为例,如果一个作业发生了故障重启,如果触发故障的原因没有根除,那么重启之后仍然会出现故障。因此,在解决根本问题之前,一个作业很可能无限次地故障重启,陷入死循环。为了避免重启死循环,Flink 提供了三种重启策略: * 固定延迟(Fixed Delay)策略:作业每次失败后,按照设定的时间间隔进行重启尝试,重启次数不会超过某个设定值。 * 失败率(Failure Rate)策略:计算一个时间段内作业失败的次数,如果失败次数小于设定值,继续重启,否则不重启。 * 不重启(No Restart)策略:不对作业进行重启。 -重启策略的前提是作业进行了Checkpoint,如果作业未设置Checkpoint,则会使用No Restart的策略。重启策略可以在`conf/flink-conf.yaml`中设置,所有使用这个配置文件执行的作业都将采用这样的重启策略;也可以在单个作业的代码中配置重启策略。 +重启策略的前提是作业进行了 Checkpoint,如果作业未设置 Checkpoint,则会使用 No Restart 的策略。重启策略可以在 `conf/flink-conf.yaml` 中设置,所有使用这个配置文件执行的作业都将采用这样的重启策略;也可以在单个作业的代码中配置重启策略。 #### Fixed Delay -Fixed Delay策略下,作业最多重启次数不会超过某个设定值,两次重启之间有一个可设定的延迟时间。例如,我们在`conf/flink-conf.yaml`中设置为: +Fixed Delay 策略下,作业最多重启次数不会超过某个设定值,两次重启之间有一个可设定的延迟时间。例如,我们在 `conf/flink-conf.yaml` 中设置为: ```yaml restart-strategy: fixed-delay @@ -160,24 +194,24 @@ restart-strategy.fixed-delay.attempts: 3 restart-strategy.fixed-delay.delay: 10 s ``` -这表示作业最多自动重启3次,两次重启之间有10秒的延迟。超过最多重启次数后,该作业被认定为失败。两次重启之间有延迟,是考虑到一些作业与外部系统有连接,连接一般会设置超时,频繁建立连接对数据准确性和作业运行都不利。如果在程序中用代码配置,可以写为: +这表示作业最多自动重启 3 次,两次重启之间有 10 秒的延迟。超过最多重启次数后,该作业被认定为失败。两次重启之间有延迟,是考虑到一些作业与外部系统有连接,连接一般会设置超时,频繁建立连接对数据准确性和作业运行都不利。如果在程序中用代码配置,可以写为: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); -// 开启Checkpoint +// 开启 Checkpoint env.enableCheckpointing(5000L); env.setRestartStrategy( RestartStrategies.fixedDelayRestart( 3, // 尝试重启次数 - Time.of(10L, TimeUnit.SECONDS) // 两次重启之间的延迟为10秒 + Time.of(10L, TimeUnit.SECONDS) // 两次重启之间的延迟为 10 秒 )); ``` -如果开启了Checkpoint,但没有设置重启策略,Flink会默认使用这个策略,最大重启次数为`Integer.MAX_VALUE`。 +如果开启了 Checkpoint,但没有设置重启策略,Flink 会默认使用这个策略,最大重启次数为 `Integer.MAX_VALUE`。 #### Failure Rate -Failure Rate策略下,在设定的时间内,重启失败次数小于设定阈值,该作业继续重启,重启失败次数超出设定阈值,该作业被最终认定为失败。两次重启之间会有一个等待的延迟。例如,我们在`conf/flink-conf.yaml`中设置为: +Failure Rate 策略下,在设定的时间内,重启失败次数小于设定阈值,该作业继续重启,重启失败次数超出设定阈值,该作业被最终认定为失败。两次重启之间会有一个等待的延迟。例如,我们在 `conf/flink-conf.yaml` 中设置为: ```yaml restart-strategy: failure-rate @@ -186,22 +220,22 @@ restart-strategy.failure-rate.failure-rate-interval: 5 min restart-strategy.failure-rate.delay: 10 s ``` -这表示在5分钟的时间内,重启次数小于3次时,继续重启,否则认定该作业为失败。两次重启之间的延迟为10秒。在程序中用代码配置,可以写为: +这表示在 5 分钟的时间内,重启次数小于 3 次时,继续重启,否则认定该作业为失败。两次重启之间的延迟为 10 秒。在程序中用代码配置,可以写为: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); -// 开启Checkpoint +// 开启 Checkpoint env.enableCheckpointing(5000L); env.setRestartStrategy(RestartStrategies.failureRateRestart( - 3, // 5分钟内最多重启3次 + 3, // 5 分钟内最多重启 3 次 Time.of(5, TimeUnit.MINUTES), - Time.of(10, TimeUnit.SECONDS) // 两次重启之间延迟为10秒 + Time.of(10, TimeUnit.SECONDS) // 两次重启之间延迟为 10 秒 )); ``` #### No Restart -No Restart策略下,一个作业遇到异常情况后,直接被判定为失败,不进行重启尝试。在`conf/flink-conf.yaml`中设置为: +No Restart 策略下,一个作业遇到异常情况后,直接被判定为失败,不进行重启尝试。在 `conf/flink-conf.yaml` 中设置为: ```yaml restart-strategy: none @@ -214,56 +248,56 @@ StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironm env.setRestartStrategy(RestartStrategies.noRestart()); ``` -## Checkpoint相关配置 +## Checkpoint 相关配置 -默认情况下,Checkpoint机制是关闭的,需要调用`env.enableCheckpointing(n)`来开启,每隔n毫秒进行一次Checkpoint。Checkpoint是一种负载较重的任务,如果状态比较大,同时n值又比较小,那可能一次Checkpoint还没完成,下次Checkpoint已经被触发,占用太多本该用于正常数据处理的资源。增大n值意味着一个作业的Checkpoint次数更少,整个作业用于进行Checkpoint的资源更小,可以将更多的资源用于正常的流数据处理。同时,更大的n值意味着重启后,整个作业需要从更长的Offset开始重新处理数据。 +默认情况下,Checkpoint 机制是关闭的,需要调用 `env.enableCheckpointing(n)` 来开启,每隔 n 毫秒进行一次 Checkpoint。Checkpoint 是一种负载较重的任务,如果状态比较大,同时 n 值又比较小,那可能一次 Checkpoint 还没完成,下次 Checkpoint 已经被触发,占用太多本该用于正常数据处理的资源。增大 n 值意味着一个作业的 Checkpoint 次数更少,整个作业用于进行 Checkpoint 的资源更小,可以将更多的资源用于正常的流数据处理。同时,更大的 n 值意味着重启后,整个作业需要从更长的 Offset 开始重新处理数据。 -此外,还有一些其他参数需要配置,这些参数统一封装在了`CheckpointConfig`里: +此外,还有一些其他参数需要配置,这些参数统一封装在了 `CheckpointConfig` 里: ```java CheckpointConfig checkpointCfg = env.getCheckpointConfig(); ``` -默认的Checkpoint配置使用了Checkpoint Barrier对齐功能,对齐会增加作业的负担,有一定延迟,但是可以支持Exactly-Once投递的。这里的Exactly-Once指的是除去Source和Sink外其他各算子的Exactly-Once,关于Exactly-Once,我们将在第七章进一步详细解释。Checkpoint Barrier对齐能保证在重启恢复时,各算子的状态对任一条数据只处理一次。如果作业对延迟的要求很低,那么应该使用At-Least-Once投递,不进行对齐,但某些数据会被处理多次。 +默认的 Checkpoint 配置使用了 Checkpoint Barrier 对齐功能,对齐会增加作业的负担,有一定延迟,但是可以支持 Exactly-Once 投递的。这里的 Exactly-Once 指的是除去 Source 和 Sink 外其他各算子的 Exactly-Once,关于 Exactly-Once,我们将在第七章进一步详细解释。Checkpoint Barrier 对齐能保证在重启恢复时,各算子的状态对任一条数据只处理一次。如果作业对延迟的要求很低,那么应该使用 At-Least-Once 投递,不进行对齐,但某些数据会被处理多次。 ```java -// 使用At-Least-Once +// 使用 At-Least-Once checkpointCfg.setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE); ``` -如果一次Checkpoint超过一定时间仍未完成,直接将其终止,以免其占用太多资源: +如果一次 Checkpoint 超过一定时间仍未完成,直接将其终止,以免其占用太多资源: ```java -// 超时时间1小时 +// 超时时间 1 小时 checkpointCfg.setCheckpointTimeout(3600*1000); ``` -如果两次Checkpoint之间的间歇时间太短,那么正常的作业可能获取的资源较少,更多的资源被用在了Checkpoint上。对下面这个参数进行合理配置能保证数据流的正常处理。比如,设置这个参数为60秒,那么前一次Checkpoint结束后60秒内不会启动新的Checkpoint。这种模式只在整个作业最多允许1个Checkpoint时适用。 +如果两次 Checkpoint 之间的间歇时间太短,那么正常的作业可能获取的资源较少,更多的资源被用在了 Checkpoint 上。对下面这个参数进行合理配置能保证数据流的正常处理。比如,设置这个参数为 60 秒,那么前一次 Checkpoint 结束后 60 秒内不会启动新的 Checkpoint。这种模式只在整个作业最多允许 1 个 Checkpoint 时适用。 ```java -// 两次Checkpoint的间隔为60秒 +// 两次 Checkpoint 的间隔为 60 秒 checkpointCfg.setMinPauseBetweenCheckpoints(60*1000); ``` -默认情况下一个作业只允许1个Checkpoint执行,如果某个Checkpoint正在进行,另外一个Checkpoint被启动,新的Checkpoint需要挂起等待。 +默认情况下一个作业只允许 1 个 Checkpoint 执行,如果某个 Checkpoint 正在进行,另外一个 Checkpoint 被启动,新的 Checkpoint 需要挂起等待。 ```java -// 最多同时进行3个Checkpoint +// 最多同时进行 3 个 Checkpoint checkpointCfg.setMaxConcurrentCheckpoints(3); ``` -如果这个参数大于1,将与前面提到的最短间隔相冲突。 +如果这个参数大于 1,将与前面提到的最短间隔相冲突。 -Checkpoint的初衷是用来进行故障恢复,如果作业是因为异常而失败,Flink会保存远程存储上的数据;如果开发者自己取消了作业,远程存储上的数据都会被删除。如果开发者希望通过Checkpoint数据进行调试,自己取消了作业,同时希望将远程数据保存下来,需要设置为: +Checkpoint 的初衷是用来进行故障恢复,如果作业是因为异常而失败,Flink 会保存远程存储上的数据;如果开发者自己取消了作业,远程存储上的数据都会被删除。如果开发者希望通过 Checkpoint 数据进行调试,自己取消了作业,同时希望将远程数据保存下来,需要设置为: ```java -// 作业取消后仍然保存Checkpoint +// 作业取消后仍然保存 Checkpoint checkpointCfg.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); ``` -`RETAIN_ON_CANCELLATION`模式下,用户需要自己手动删除远程存储上的Checkpoint数据。 +`RETAIN_ON_CANCELLATION` 模式下,用户需要自己手动删除远程存储上的 Checkpoint 数据。 -默认情况下,如果Checkpoint过程失败,会导致整个应用重启,我们可以关闭这个功能,这样Checkpoint失败不影响作业的运行。 +默认情况下,如果 Checkpoint 过程失败,会导致整个应用重启,我们可以关闭这个功能,这样 Checkpoint 失败不影响作业的运行。 ```java checkpointCfg.setFailOnCheckpointingErrors(false); diff --git a/doc/ch-state-checkpoint/exercise-state.md b/doc/ch-state-checkpoint/exercise-state.md index 6b7c263..aadc6db 100644 --- a/doc/ch-state-checkpoint/exercise-state.md +++ b/doc/ch-state-checkpoint/exercise-state.md @@ -3,34 +3,34 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -经过本章的学习,相信读者朋友已经了解状态的基本原理,包括如何使用Keyed State或Operator State进行有状态的计算。本节将继续以电商用户行为分析为场景,对状态相关知识进行实践。 +经过本章的学习,相信读者朋友已经了解状态的基本原理,包括如何使用 Keyed State 或 Operator State 进行有状态的计算。本节将继续以电商用户行为分析为场景,对状态相关知识进行实践。 ## 实验目的 -学习使用Keyed State,设置Checkpoint。 +学习使用 Keyed State,设置 Checkpoint。 ## 实验内容 -在[状态](./state.md)章节的Keyed State部分,我们介绍了电商用户行为场景,并举了一些例子,本次练习仍然基于这个场景。我们知道,一天之内,一个用户第一次产生行为到真正购买,这之间有一个时间差,这个时间是一个非常重要的指标,有助于商家提升产品质量和营销水平。这里我们使用Keyed State来实现一个程序,主要用来计算这个时间差。 +在 [状态](./state.md) 章节的 Keyed State 部分,我们介绍了电商用户行为场景,并举了一些例子,本次练习仍然基于这个场景。我们知道,一天之内,一个用户第一次产生行为到真正购买,这之间有一个时间差,这个时间是一个非常重要的指标,有助于商家提升产品质量和营销水平。这里我们使用 Keyed State 来实现一个程序,主要用来计算这个时间差。 ## 实验要求 -读者可以根据本书样例程序中提供的数据集和Source作为输入,编程完成下面的要求。 +读者可以根据本书样例程序中提供的数据集和 Source 作为输入,编程完成下面的要求。 -* 要求1: +* 要求 1: -使用Keyed State,计算每个用户当天第一次产生行为到第一次产生购买行为之间的时间差。在实现时需要注意,这里只考虑第一次产生购买行为,而不是多次产生购买行为中的最后一次。使用`print`将结果打印出来。 +使用 Keyed State,计算每个用户当天第一次产生行为到第一次产生购买行为之间的时间差。在实现时需要注意,这里只考虑第一次产生购买行为,而不是多次产生购买行为中的最后一次。使用 `print` 将结果打印出来。 -* 要求2: +* 要求 2: -开启Checkpoint,选择一种State Backend,将状态定期保存到存储的某个位置。 +开启 Checkpoint,选择一种 State Backend,将状态定期保存到存储的某个位置。 ## 实验报告 diff --git a/doc/ch-state-checkpoint/savepoint.md b/doc/ch-state-checkpoint/savepoint.md index 6394271..bf125c7 100644 --- a/doc/ch-state-checkpoint/savepoint.md +++ b/doc/ch-state-checkpoint/savepoint.md @@ -3,51 +3,58 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -## Savepoint与Checkpoint的区别 +## Savepoint 与 Checkpoint 的区别 -目前,Checkpoint和Savepoint在代码层面使用的分布式快照逻辑基本相同,生成的数据也近乎一样,那这两个相似的名字到底有哪些功能性的区别呢?Checkpoint的目的是为了故障重启,使得作业中的状态数据与故障重启之前保持一致,是一种应对意外情况的有力保障。Savepoint的目的是手动备份数据,以便进行调试、迁移、迭代等,是一种协助开发者的支持功能。一方面,一个流处理作业不可能一次性就写好了,我们要在一个初版代码的基础上不断修复问题、增加功能、优化算法、甚至做一些机房迁移,一个程序是在迭代中更新的;另外一方面,流处理作业一般都是长时间运行的,作业内部的状态数据从零开始重新生成的成本很高,状态数据迁移成本高。综合这两方面的因素,Flink提供了Savepoint的机制,允许开发者调试开发有状态的作业。 +目前,Checkpoint 和 Savepoint 在代码层面使用的分布式快照逻辑基本相同,生成的数据也近乎一样,那这两个相似的名字到底有哪些功能性的区别呢?Checkpoint 的目的是为了故障重启,使得作业中的状态数据与故障重启之前保持一致,是一种应对意外情况的有力保障。Savepoint 的目的是手动备份数据,以便进行调试、迁移、迭代等,是一种协助开发者的支持功能。一方面,一个流处理作业不可能一次性就写好了,我们要在一个初版代码的基础上不断修复问题、增加功能、优化算法、甚至做一些机房迁移,一个程序是在迭代中更新的;另外一方面,流处理作业一般都是长时间运行的,作业内部的状态数据从零开始重新生成的成本很高,状态数据迁移成本高。综合这两方面的因素,Flink 提供了 Savepoint 的机制,允许开发者调试开发有状态的作业。 -Flink的Checkpoint机制设计初衷为:第一,Checkpoint过程是轻量级的,尽量不影响正常数据处理;第二,故障恢复越快越好。开发者需要进行的操作并不多,少量的操作包括:设置多大的间隔来定期进行Checkpoint,使用何种State Backend。绝大多数工作是由Flink来处理的,比如Flink会定期执行快照,发生故障后,Flink自动从最近一次Checkpoint数据中恢复。随着作业的关停,Checkpoint数据一般会被Flink删除,除非开发者设置了保留Checkpoint数据。原则上,一个作业从Checkpoint数据中恢复,作业的代码和业务逻辑不能发生变化。 +Flink 的 Checkpoint 机制设计初衷为:第一,Checkpoint 过程是轻量级的,尽量不影响正常数据处理;第二,故障恢复越快越好。开发者需要进行的操作并不多,少量的操作包括:设置多大的间隔来定期进行 Checkpoint,使用何种 State Backend。绝大多数工作是由 Flink 来处理的,比如 Flink 会定期执行快照,发生故障后,Flink 自动从最近一次 Checkpoint 数据中恢复。随着作业的关停,Checkpoint 数据一般会被 Flink 删除,除非开发者设置了保留 Checkpoint 数据。原则上,一个作业从 Checkpoint 数据中恢复,作业的代码和业务逻辑不能发生变化。 -相比而下,Savepoint机制主要考虑的是:第一,刻意备份,第二,支持修改状态数据或业务逻辑。Savepoint相关操作是有计划的、人为的。开发者要手动触发、管理和删除Savepoint。比如,将当前状态保存下来之后,我们可以更新并行度,修改业务逻辑代码,甚至在某份代码基础上生成一个对照组来验证一些实验猜想。可见,Savepoint的数据备份和恢复都有更高的时间和人力成本,Savepoint数据也必须有一定的可移植性,能够适应数据或逻辑上的改动。具体而言,Savepoint的潜在应用场景有: +相比而下,Savepoint 机制主要考虑的是:第一,刻意备份,第二,支持修改状态数据或业务逻辑。Savepoint 相关操作是有计划的、人为的。开发者要手动触发、管理和删除 Savepoint。比如,将当前状态保存下来之后,我们可以更新并行度,修改业务逻辑代码,甚至在某份代码基础上生成一个对照组来验证一些实验猜想。可见,Savepoint 的数据备份和恢复都有更高的时间和人力成本,Savepoint 数据也必须有一定的可移植性,能够适应数据或逻辑上的改动。具体而言,Savepoint 的潜在应用场景有: -* 我们可以给同一份作业设置不同的并行度,来找到最佳的并行度设置,每次可以从Savepoint中加载原来的状态数据。 +* 我们可以给同一份作业设置不同的并行度,来找到最佳的并行度设置,每次可以从 Savepoint 中加载原来的状态数据。 -* 我们想测试一个新功能或修复一个已知的bug,并用新的程序逻辑处理原来的数据。 +* 我们想测试一个新功能或修复一个已知的 bug,并用新的程序逻辑处理原来的数据。 -* 进行一些A/B实验,使用相同的数据源测试程序的不同版本。 +* 进行一些 A/B 实验,使用相同的数据源测试程序的不同版本。 * 因为状态可以被持久化存储到分布式文件系统上,我们甚至可以将同样一份应用程序从一个集群迁移到另一个集群,只需保证不同的集群都可以访问这个文件系统。 -可见,Checkpoint和Savepoint是Flink提供的两个相似的功能,它们满足了不同的需求,以确保一致性、容错性,满足了作业升级、BUG 修复、迁移、A/B测试等不同场景。 +可见,Checkpoint 和 Savepoint 是 Flink 提供的两个相似的功能,它们满足了不同的需求,以确保一致性、容错性,满足了作业升级、BUG 修复、迁移、A/B 测试等不同场景。 -## Savepoint的使用方法 +## Savepoint 的使用方法 -为了让Savepoint数据能够具有更好的兼容性和可移植性,我们在写一个Flink程序时需要为每个算子分配一个唯一ID。设置算子ID的目的在于将状态与Savepoint中的备份相对应。如下图所示,这个Flink作业共有三个算子:Source、Stateful Map和Stateless Sink。Source和Stateful Map分别有对应Operator State和Keyed State,Stateless Sink没有状态。 +为了让 Savepoint 数据能够具有更好的兼容性和可移植性,我们在写一个 Flink 程序时需要为每个算子分配一个唯一 ID。设置算子 ID 的目的在于将状态与 Savepoint 中的备份相对应。如下图所示,这个 Flink 作业共有三个算子:Source、Stateful Map 和 Stateless Sink。Source 和 Stateful Map 分别有对应 Operator State 和 Keyed State,Stateless Sink 没有状态。 -![将一个流处理作业状态映射到Savepoint](./img/savepoint.png) +```{figure} ./img/savepoint.png +--- +name: fig-savepoint +width: 80% +align: center +--- +将一个流处理作业状态映射到 Savepoint +``` -在实现这个数据流图时,我们需要给算子设置ID: +在实现这个数据流图时,我们需要给算子设置 ID: ```java DataStream stream = env. - // 一个带有Operator State的Source,例如Kafka Source - .addSource(new StatefulSource()).uid("source-id") // 算子ID + // 一个带有 Operator State 的 Source,例如 Kafka Source + .addSource(new StatefulSource()).uid("source-id") // 算子 ID .keyBy(...) - // 一个带有Keyed State的Stateful Map - .map(new StatefulMapper()).uid("mapper-id") // 算子ID - // print是一种无状态的Sink - .print(); // Flink为其自动分配一个算子ID + // 一个带有 Keyed State 的 Stateful Map + .map(new StatefulMapper()).uid("mapper-id") // 算子 ID + // print 是一种无状态的 Sink + .print(); // Flink 为其自动分配一个算子 ID ``` -上面的例子中,我们给算子设置了ID。如果代码中不明确设置算子ID,那么Flink会为其自动分配一个ID。严格来说,我们应该为每个算子都设置ID,因为很多算子内在实现上是有状态的,比如窗口算子。除非我们能够非常确认某个算子无状态,可以不为其设置ID。 +上面的例子中,我们给算子设置了 ID。如果代码中不明确设置算子 ID,那么 Flink 会为其自动分配一个 ID。严格来说,我们应该为每个算子都设置 ID,因为很多算子内在实现上是有状态的,比如窗口算子。除非我们能够非常确认某个算子无状态,可以不为其设置 ID。 如果我们想对这个作业进行备份,我们需要使用命令行工具执行下面的命令: @@ -55,25 +62,32 @@ DataStream stream = env. $ ./bin/flink savepoint [savepointDirectory] ``` -这行命令将对一个正在运行的作业触发一次Savepoint的备份,备份数据将写到`savepointDirectory`上。例如,我们可以指定一个HDFS路径作为Savepoint数据存放地址。 +这行命令将对一个正在运行的作业触发一次 Savepoint 的备份,备份数据将写到 `savepointDirectory` 上。例如,我们可以指定一个 HDFS 路径作为 Savepoint 数据存放地址。 -如果我们想从一个Savepoint数据中恢复一个作业,我们需要执行: +如果我们想从一个 Savepoint 数据中恢复一个作业,我们需要执行: ```bash $ ./bin/flink run -s [OPTIONS] ``` -## 读写Savepoint中的数据 +## 读写 Savepoint 中的数据 -Flink提供了一个名为State Processor API的功能,允许开发者读写Savepoint中的数据。它主要基于DataSet API,将Savepoint数据从远程存储读到内存中,对Savepoint数据进行处理,然后再保存到远程存储上。有了State Processor API,开发者在状态的修改和更新上有更大的自由度。例如,开发者可以先从其他位置读取数据,生成一份Savepoint,交给一个没有数据积累的流处理程序,用来做数据冷启动。 +Flink 提供了一个名为 State Processor API 的功能,允许开发者读写 Savepoint 中的数据。它主要基于 DataSet API,将 Savepoint 数据从远程存储读到内存中,对 Savepoint 数据进行处理,然后再保存到远程存储上。有了 State Processor API,开发者在状态的修改和更新上有更大的自由度。例如,开发者可以先从其他位置读取数据,生成一份 Savepoint,交给一个没有数据积累的流处理程序,用来做数据冷启动。 -将上节提到的程序中的Savepoint进一步分解,其内在存储形式如下图所示。Savepoint对数据的存储就像数据库存储数据一样,数据是按照一定的模式来组织和存储的。名为`source-id`的算子使用的是一个Operator State,Operator State的名字为`os1`,`os1`中的数据以一个列表的形式存储;名为`mapper-id`的算子使用的是一个Keyed State,Keyed State的名字为`ks1`,`ks1`中的数据是Key-Value对。 +将上节提到的程序中的 Savepoint 进一步分解,其内在存储形式如下图所示。Savepoint 对数据的存储就像数据库存储数据一样,数据是按照一定的模式来组织和存储的。名为 `source-id` 的算子使用的是一个 Operator State,Operator State 的名字为 `os1`,`os1` 中的数据以一个列表的形式存储;名为 `mapper-id` 的算子使用的是一个 Keyed State,Keyed State 的名字为 `ks1`,`ks1` 中的数据是 Key-Value 对。 -![Savepoint中的数据存储形式](./img/savepoint-data.png) +```{figure} ./img/savepoint-data.png +--- +name: fig-savepoint-data +width: 80% +align: center +--- +Savepoint 中的数据存储形式 +``` -建立好上述的数据模型后,我们就可以像从数据库中读写数据那样,使用State Processor API来读写Savepoint中的数据。 +建立好上述的数据模型后,我们就可以像从数据库中读写数据那样,使用 State Processor API 来读写 Savepoint 中的数据。 -State Processor API默认没有放在Flink的核心库中,使用之前需要先在`pom.xml`中引入正确的依赖: +State Processor API 默认没有放在 Flink 的核心库中,使用之前需要先在 `pom.xml` 中引入正确的依赖: ``` @@ -84,25 +98,25 @@ State Processor API默认没有放在Flink的核心库中,使用之前需要 ``` -### 从Savepoint中读数据 +### 从 Savepoint 中读数据 -首先,我们需要从一个存储路径上读取Savepoint。这里要使用批处理的DataSet API,执行环境为`ExecutionEnvironment`。 +首先,我们需要从一个存储路径上读取 Savepoint。这里要使用批处理的 DataSet API,执行环境为 `ExecutionEnvironment`。 ```java -// 使用批处理DataSet API的ExecutionEnvironment +// 使用批处理 DataSet API 的 ExecutionEnvironment ExecutionEnvironment bEnv = ExecutionEnvironment.getExecutionEnvironment(); -// 存储这个Savepoint所使用的State Backend +// 存储这个 Savepoint 所使用的 State Backend StateBackend backend = ... ExistingSavepoint savepoint = Savepoint.load(bEnv, "hdfs://path/", backend); bEnv.execute("read"); ``` -上面的代码从存储路径上读取一个Savepoint,生成一个`ExistingSavepoint`。`ExistingSavepoint`是一个已经存在的Savepoint,这个类提供了一个从Savepoint中读取数据的入口。 +上面的代码从存储路径上读取一个 Savepoint,生成一个 `ExistingSavepoint`。`ExistingSavepoint` 是一个已经存在的 Savepoint,这个类提供了一个从 Savepoint 中读取数据的入口。 #### Operator State -读取时Operator State,我们需要指定算子ID、Operator State名字、数据类型。下面的代码读取了`source-id`下的`os1`: +读取时 Operator State,我们需要指定算子 ID、Operator State 名字、数据类型。下面的代码读取了 `source-id` 下的 `os1`: ```java DataSet listState = savepoint.readListState<>( @@ -111,7 +125,7 @@ DataSet listState = savepoint.readListState<>( Types.INT); ``` -`readListState`方法读取ListState,它在源代码中的签名为: +`readListState` 方法读取 ListState,它在源代码中的签名为: ```java public DataSet readListState(String uid, String name, TypeInformation typeInfo) { @@ -127,9 +141,9 @@ public DataSet readListState( } ``` -其中,`uid`为上一节中我们设置的算子ID;`name`为这个状态的名字,我们在使用状态时,会在`ListStateDescriptor`里初始化一个名字;`typeInfo`为该状态的类型,用来进行序列化和反序列化;如果默认的序列化器不支持该类型,也可以传入一个自定义的序列化器。 +其中,`uid` 为上一节中我们设置的算子 ID;`name` 为这个状态的名字,我们在使用状态时,会在 `ListStateDescriptor` 里初始化一个名字;`typeInfo` 为该状态的类型,用来进行序列化和反序列化;如果默认的序列化器不支持该类型,也可以传入一个自定义的序列化器。 -UnionListState的读取方法与之类似: +UnionListState 的读取方法与之类似: ```java DataSet listState = savepoint.readUnionState<>( @@ -140,13 +154,13 @@ DataSet listState = savepoint.readUnionState<>( #### Keyed State -流处理中,Keyed State应用在一个`KeyedStream`上,需要在`StateDescriptor`中指定状态的名字和数据类型。例如,在一个流处理作业中,我们继承`KeyedProcessFunction`,实现下面两个状态: +流处理中,Keyed State 应用在一个 `KeyedStream` 上,需要在 `StateDescriptor` 中指定状态的名字和数据类型。例如,在一个流处理作业中,我们继承 `KeyedProcessFunction`,实现下面两个状态: ```java /** - * StatefulFunctionWithTime继承KeyedProcessFunction - * 接收Integer类型的输入,更新状态 - * 第一个泛型为KeyedStream中Key的类型 + * StatefulFunctionWithTime 继承 KeyedProcessFunction + * 接收 Integer 类型的输入,更新状态 + * 第一个泛型为 KeyedStream 中 Key 的类型 * 第二个泛型为输入数据 * 第三个泛型为输出数据 */ @@ -164,7 +178,7 @@ public class StatefulFunctionWithTime extends KeyedProcessFunction out) throws Exception { state.update(value + 1); @@ -173,7 +187,7 @@ public class StatefulFunctionWithTime extends KeyedProcessFunction { @@ -217,28 +231,28 @@ public class ReaderFunction extends KeyedStateReaderFunction keyedState = savepoint.readKeyedState("mapper-id", new ReaderFunction()); ``` -从上面的例子中可以看到,`readKeyedState`需要传入算子的ID和一个`KeyedStateReaderFunction`的具体实现,它在源码中的签名为: +从上面的例子中可以看到,`readKeyedState` 需要传入算子的 ID 和一个 `KeyedStateReaderFunction` 的具体实现,它在源码中的签名为: ```java /* - * 从Savepoint数据中读取Keyed State - * uid:算子ID - * function:一个KeyedStateReaderFunction - * K:Keyed State的Key类型 + * 从 Savepoint 数据中读取 Keyed State + * uid:算子 ID + * function:一个 KeyedStateReaderFunction + * K:Keyed State 的 Key 类型 * OUT:输出类型 */ public DataSet readKeyedState(String uid, KeyedStateReaderFunction function) { @@ -246,50 +260,50 @@ public DataSet readKeyedState(String uid, KeyedStateReaderFunction } ``` -`KeyedStateReaderFunction`允许我们从Savepoint中读取Keyed State数据,我们需要实现`open`方法和`readKey`方法。其中,我们必须在`open`方法中注册`StateDescriptor`,获取状态句柄;在`readKey`方法中逐Key读取数据,输出到`Collector`中。`KeyedStateReaderFunction`和这些方法在源码中的定义为: +`KeyedStateReaderFunction` 允许我们从 Savepoint 中读取 Keyed State 数据,我们需要实现 `open` 方法和 `readKey` 方法。其中,我们必须在 `open` 方法中注册 `StateDescriptor`,获取状态句柄;在 `readKey` 方法中逐 Key 读取数据,输出到 `Collector` 中。`KeyedStateReaderFunction` 和这些方法在源码中的定义为: ```java /** - * 从Savepoint中读取Keyed State - * 泛型K:Keyed State中Key的类型 - * 泛型OUT:输出数据 + * 从 Savepoint 中读取 Keyed State + * 泛型 K:Keyed State 中 Key 的类型 + * 泛型 OUT:输出数据 */ public abstract class KeyedStateReaderFunction extends AbstractRichFunction { /** - * 初始化方法,用来注册StateDescriptor,获取状态句柄 + * 初始化方法,用来注册 StateDescriptor,获取状态句柄 */ public abstract void open(Configuration parameters) throws Exception; /** - * 从Keyed State中逐Key读取数据,输出到Collector - * 参数K为Keyed State中的每个Key - * 参数Context为上下文 - * 参数Collector用来收集输出,可以是零到多个输出 + * 从 Keyed State 中逐 Key 读取数据,输出到 Collector + * 参数 K 为 Keyed State 中的每个 Key + * 参数 Context 为上下文 + * 参数 Collector 用来收集输出,可以是零到多个输出 */ public abstract void readKey(K key, Context ctx, Collector out) throws Exception; /** - * 上下文Context - * Context只在readKey时有效 + * 上下文 Context + * Context 只在 readKey 时有效 */ public interface Context { /** - * 返回当前Key所注册的Event Time Timer + * 返回当前 Key 所注册的 Event Time Timer */ Set registeredEventTimeTimers() throws Exception; /** - * 返回当前Key所注册的Processing Time Timer + * 返回当前 Key 所注册的 Processing Time Timer */ Set registeredProcessingTimeTimers() throws Exception; } } ``` -### 向Savepoint中写入数据 +### 向 Savepoint 中写入数据 -我们也可以从零开始构建状态,向Savepoint中写入数据,这个功能非常适合作业的冷启动。英文常使用Bootstrap这个词描述冷启动的过程,因此Flink设计的类名都会带有Bootstrap字样。具体而言,构建一个新的Savepoint时,需要实现一个名为`BootstrapTransformation`的操作,`BootstrapTransformation`表示一个状态写入的过程。从另一个角度来讲,我们可以将`BootstrapTransformation`理解成流处理时使用的有状态的算子。下面是一个Savepoint构建过程的主逻辑示例: +我们也可以从零开始构建状态,向 Savepoint 中写入数据,这个功能非常适合作业的冷启动。英文常使用 Bootstrap 这个词描述冷启动的过程,因此 Flink 设计的类名都会带有 Bootstrap 字样。具体而言,构建一个新的 Savepoint 时,需要实现一个名为 `BootstrapTransformation` 的操作,`BootstrapTransformation` 表示一个状态写入的过程。从另一个角度来讲,我们可以将 `BootstrapTransformation` 理解成流处理时使用的有状态的算子。下面是一个 Savepoint 构建过程的主逻辑示例: ```java ExecutionEnvironment bEnv = ExecutionEnvironment.getExecutionEnvironment(); @@ -302,18 +316,18 @@ StateBackend backend = ... DataSet accountDataSet = bEnv.fromCollection(accounts); DataSet currencyDataSet = bEnv.fromCollection(currencyRates); -// 构建一个BootstrapTransformation,将accountDataSet数据写入 +// 构建一个 BootstrapTransformation,将 accountDataSet 数据写入 BootstrapTransformation transformation = OperatorTransformation .bootstrapWith(accountDataSet) .keyBy(acc -> acc.id) .transform(new AccountBootstrapper()); -// 构建一个BootstrapTransformation,将currencyDataSet数据写入 +// 构建一个 BootstrapTransformation,将 currencyDataSet 数据写入 BootstrapTransformation broadcastTransformation = OperatorTransformation .bootstrapWith(currencyDataSet) .transform(new CurrencyBootstrapFunction()); -// 创建两个算子,算子ID分别为accounts、currency +// 创建两个算子,算子 ID 分别为 accounts、currency Savepoint .create(backend, maxParallelism) .withOperator("accounts", transformation) @@ -323,28 +337,28 @@ Savepoint bEnv.execute("bootstrap"); ``` -`Savepoint.create(backend, maxParallelism)`创建了一个新的Savepoint。`withOperator`方法向这个Savepoint中添加新的算子,它的两个参数分别为算子ID和一个`BootstrapTransformation`。`transformation`和`broadcastTransformation`就是两个`BootstrapTransformation`对象实例,他们的功能在于去模拟一个流处理中的有状态的算子,并写入状态数据。总体来讲,向Savepoint中写入数据需要三步: +`Savepoint.create(backend, maxParallelism)` 创建了一个新的 Savepoint。`withOperator` 方法向这个 Savepoint 中添加新的算子,它的两个参数分别为算子 ID 和一个 `BootstrapTransformation`。`transformation` 和 `broadcastTransformation` 就是两个 `BootstrapTransformation` 对象实例,他们的功能在于去模拟一个流处理中的有状态的算子,并写入状态数据。总体来讲,向 Savepoint 中写入数据需要三步: -1. 准备好需要写入状态的数据`DataSet`。 -2. 构建一个`BootstrapTransformation`,将第一步准备好的数据写入这个`BootstrapTransformation`。 -3. 将构建好的`BootstrapTransformation`写入Savepoint。 +1. 准备好需要写入状态的数据 `DataSet`。 +2. 构建一个 `BootstrapTransformation`,将第一步准备好的数据写入这个 `BootstrapTransformation`。 +3. 将构建好的 `BootstrapTransformation` 写入 Savepoint。 -Operator State和Keyed State的原理不同,因此所要实现的不同,下面将分别介绍这两种写入方式。 +Operator State 和 Keyed State 的原理不同,因此所要实现的不同,下面将分别介绍这两种写入方式。 #### Operator State -对于Operator State,我们要实现`StateBootstrapFunction`来写入状态数据,重点是实现它的`processElement`方法。每个输入进来之后,`processElement`方法都会被调用一次。下面是一个案例: +对于 Operator State,我们要实现 `StateBootstrapFunction` 来写入状态数据,重点是实现它的 `processElement` 方法。每个输入进来之后,`processElement` 方法都会被调用一次。下面是一个案例: ```java /** - * 继承并实现StateBootstrapFunction + * 继承并实现 StateBootstrapFunction * 泛型参数为输入类型 */ public class SimpleBootstrapFunction extends StateBootstrapFunction { private ListState state; - // 每个输入都会调用一次processElement,这里将输入加入到状态中 + // 每个输入都会调用一次 processElement,这里将输入加入到状态中 @Override public void processElement(Integer value, Context ctx) throws Exception { state.add(value); @@ -369,18 +383,18 @@ ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnviornment(); DataSet data = env.fromElements(1, 2, 3); BootstrapTransformation transformation = OperatorTransformation - // 使用data数据进行初始化 + // 使用 data 数据进行初始化 .bootstrapWith(data) .transform(new SimpleBootstrapFunction()); ``` #### Keyed State -对于Keyed State,我们要实现`KeyedStateBootstrapFunction`来写入状态数据。同样,每来一个输入,`processElement`都会被调用一次。下面的代码中,Key为`Account`中的`id`。 +对于 Keyed State,我们要实现 `KeyedStateBootstrapFunction` 来写入状态数据。同样,每来一个输入,`processElement` 都会被调用一次。下面的代码中,Key 为 `Account` 中的 `id`。 ```java /** - * 表示账户信息的POJO类 + * 表示账户信息的 POJO 类 */ public class Account { public int id; @@ -389,9 +403,9 @@ public class Account { } /** - * AccountBootstrapper继承并实现了KeyedStateBootstrapFunction - * 第一个泛型Integer为Key类型 - * 第二个泛型Account为输入类型 + * AccountBootstrapper 继承并实现了 KeyedStateBootstrapFunction + * 第一个泛型 Integer 为 Key 类型 + * 第二个泛型 Account 为输入类型 */ public class AccountBootstrapper extends KeyedStateBootstrapFunction { ValueState state; @@ -403,7 +417,7 @@ public class AccountBootstrapper extends KeyedStateBootstrapFunction accountDataSet = bEnv.fromCollection(accounts); BootstrapTransformation transformation = OperatorTransformation - // 使用accountDataSet数据进行初始化 + // 使用 accountDataSet 数据进行初始化 .bootstrapWith(accountDataSet) .keyBy(acc -> acc.id) .transform(new AccountBootstrapper()); @@ -431,21 +445,21 @@ Savepoint .write(savepointPath); ``` -我们可以看看`KeyedStateBootstrapFunction`在源码中的签名: +我们可以看看 `KeyedStateBootstrapFunction` 在源码中的签名: ```java /** - * 将Keyed State写入Savepoint - * 第一个泛型K为Key类型 - * 第二个泛型IN为输入类型 + * 将 Keyed State 写入 Savepoint + * 第一个泛型 K 为 Key 类型 + * 第二个泛型 IN 为输入类型 */ public abstract class KeyedStateBootstrapFunction extends AbstractRichFunction { private static final long serialVersionUID = 1L; /** - * 处理输入的每行数据,更新Keyed State - * Context可以用来构建时间相关属性 + * 处理输入的每行数据,更新 Keyed State + * Context 可以用来构建时间相关属性 * 当这个作业在流处理端重启后,时间相关属性可以用来触发计算 */ public abstract void processElement(IN value, Context ctx) throws Exception; @@ -453,20 +467,20 @@ public abstract class KeyedStateBootstrapFunction extends AbstractRichFun /* 上下文 */ public abstract class Context { - // 访问时间,注册Timer + // 访问时间,注册 Timer public abstract TimerService timerService(); - // 返回当前Key + // 返回当前 Key public abstract K getCurrentKey(); } } ``` -可以看到`KeyedStateBootstrapFunction`继承了`AbstractRichFunction`,它拥有RichFunction函数类的方法和属性,比如`open`方法等,因此实现起来也与在流处理中使用状态非常相似。`processElement`对每个输入数据进行处理,我们可以根据业务需要写入到Keyed State中。此外,该方法提供了上下文`Context`,里面包含了第五章[ProcessFunction](../chapter-time-window/process-function.md)中提到的`TimerService`。借助于`TimerService`,我们可以访问时间,注册Timer。这些Timer在当前写入Savepoint的过程并不会触发,仅当Savepoint恢复成一个流处理作业时被触发。 +可以看到 `KeyedStateBootstrapFunction` 继承了 `AbstractRichFunction`,它拥有 RichFunction 函数类的方法和属性,比如 `open` 方法等,因此实现起来也与在流处理中使用状态非常相似。`processElement` 对每个输入数据进行处理,我们可以根据业务需要写入到 Keyed State 中。此外,该方法提供了上下文 `Context`,里面包含了第五章 [ProcessFunction](../chapter-time-window/process-function.md) 中提到的 `TimerService`。借助于 `TimerService`,我们可以访问时间,注册 Timer。这些 Timer 在当前写入 Savepoint 的过程并不会触发,仅当 Savepoint 恢复成一个流处理作业时被触发。 -### 修改Savepoint +### 修改 Savepoint -除了从零开始构建一个新的Savepoint,我们也可以从一个已有的Savepoint基础上做修改,然后再保存起来。比如,下面的代码从一个已存在的Savepoint中获取数据,进行修改,生成新的Savepoint。 +除了从零开始构建一个新的 Savepoint,我们也可以从一个已有的 Savepoint 基础上做修改,然后再保存起来。比如,下面的代码从一个已存在的 Savepoint 中获取数据,进行修改,生成新的 Savepoint。 ```java ExecutionEnvironment bEnv = @@ -480,18 +494,18 @@ BootstrapTransformation transformation = OperatorTransformation Savepoint .load(bEnv, savepointPath, backend) - // 删除名为currency的算子 + // 删除名为 currency 的算子 .removeOperator("currency") - // 增加名为numbers的算子,使用transformation构建其状态数据 + // 增加名为 numbers 的算子,使用 transformation 构建其状态数据 .withOperator("number", transformation) - // 新的Savepoint会写到modifyPath路径下 + // 新的 Savepoint 会写到 modifyPath 路径下 .write(modifyPath); bEnv.execute("modify"); ``` -其中,`removeOperator`方法将一个算子状态数据从Savepoint中删除,`withOperator`方法增加了一个算子。修改完之后,我们可以通过`write`方法,将数据写入一个路径之下。 +其中,`removeOperator` 方法将一个算子状态数据从 Savepoint 中删除,`withOperator` 方法增加了一个算子。修改完之后,我们可以通过 `write` 方法,将数据写入一个路径之下。 -## Queryable State和State Processor API +## Queryable State 和 State Processor API -Flink提供的另外一个读取状态的API为Queryable State。使用Queryable State可以查询状态中的数据,其原理与State Processor API有相通之处。相比而下,两者侧重点各有不同,Queryable State重在查询状态,主要针对正在运行的线上服务,State Processor API可以修改状态,主要针对写入到Savepoint(或Checkpoint)中的数据。从侧重点上可以看到,两者所要解决的问题略有不同。感兴趣的读者前往官方查询Queryable State的使用方法。 \ No newline at end of file +Flink 提供的另外一个读取状态的 API 为 Queryable State。使用 Queryable State 可以查询状态中的数据,其原理与 State Processor API 有相通之处。相比而下,两者侧重点各有不同,Queryable State 重在查询状态,主要针对正在运行的线上服务,State Processor API 可以修改状态,主要针对写入到 Savepoint(或 Checkpoint)中的数据。从侧重点上可以看到,两者所要解决的问题略有不同。感兴趣的读者前往官方查询 Queryable State 的使用方法。 \ No newline at end of file diff --git a/doc/ch-state-checkpoint/state.md b/doc/ch-state-checkpoint/state.md index 0a2f2a4..91d8c07 100644 --- a/doc/ch-state-checkpoint/state.md +++ b/doc/ch-state-checkpoint/state.md @@ -3,7 +3,7 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -17,99 +17,134 @@ * 数据流中的数据有重复,我们想对重复数据去重,需要记录哪些数据已经流入过应用,当新数据流入时,根据已流入数据来判断去重。 * 检查输入流是否符合某个特定的模式,需要将之前流入的元素以状态的形式缓存下来。比如,判断一个温度传感器数据流中的温度是否在持续上升。 -* 对一个时间窗口内的数据进行聚合分析,分析一个小时内某项指标的75分位或99分位的数值。 +* 对一个时间窗口内的数据进行聚合分析,分析一个小时内某项指标的 75 分位或 99 分位的数值。 * 在线机器学习场景下,需要根据新流入数据不断更新机器学习的模型参数。 -我们知道,Flink的一个算子有多个子任务,每个子任务分布在不同实例上,我们可以把状态理解为某个算子子任务在其当前实例上的一个变量,变量记录了数据流的历史信息。当新数据流入时,我们可以结合历史信息来进行计算。实际上,Flink的状态是由算子的子任务来创建和管理的。一个状态更新和获取的流程如下图所示,一个算子子任务接收输入流,获取对应的状态,根据新的计算结果更新状态。一个简单的例子是对一个时间窗口内输入流的某个整数字段求和,那么当算子子任务接收到新元素时,会获取已经存储在状态中的数值,然后将新元素加到状态上,并将状态数据更新。 +我们知道,Flink 的一个算子有多个子任务,每个子任务分布在不同实例上,我们可以把状态理解为某个算子子任务在其当前实例上的一个变量,变量记录了数据流的历史信息。当新数据流入时,我们可以结合历史信息来进行计算。实际上,Flink 的状态是由算子的子任务来创建和管理的。一个状态更新和获取的流程如下图所示,一个算子子任务接收输入流,获取对应的状态,根据新的计算结果更新状态。一个简单的例子是对一个时间窗口内输入流的某个整数字段求和,那么当算子子任务接收到新元素时,会获取已经存储在状态中的数值,然后将新元素加到状态上,并将状态数据更新。 -![状态获取和更新示意图](./img/state-acquisition-and-update.png) +```{figure} ./img/state-acquisition-and-update.png +--- +name: fig-state-acquisition-and-update +width: 80% +align: center +--- +状态获取和更新示意图 +``` 获取和更新状态的逻辑其实并不复杂,但流处理框架还需要解决以下几类问题: * 数据的产出要保证实时性,延迟不能太高。 * 需要保证数据不丢不重,恰好计算一次,尤其是当状态数据非常大或者应用出现故障需要恢复时,要保证状态不出任何错误。 -* 一般流处理任务都是7*24小时运行的,程序的可靠性非常高。 +* 一般流处理任务都是 7*24 小时运行的,程序的可靠性非常高。 基于上述要求,我们不能将状态直接交由内存管理,因为内存的容量是有限制的,当状态数据稍微大一些时,就会出现内存不够的问题。假如我们使用一个持久化的备份系统,不断将内存中的状态备份起来,当流处理作业出现故障时,需要考虑如何从备份中恢复。而且,大数据应用一般是横向分布在多个节点上,流处理框架需要保证横向的伸缩扩展性。可见,状态的管理并不那么容易。 -作为一个计算框架,Flink提供了有状态的计算,封装了一些底层的实现,比如状态的高效存储、Checkpoint和Savepoint持久化备份机制、计算资源扩缩容等问题。因为Flink接管了这些问题,开发者只需调用Flink API,这样可以更加专注于业务逻辑。 +作为一个计算框架,Flink 提供了有状态的计算,封装了一些底层的实现,比如状态的高效存储、Checkpoint 和 Savepoint 持久化备份机制、计算资源扩缩容等问题。因为 Flink 接管了这些问题,开发者只需调用 Flink API,这样可以更加专注于业务逻辑。 -## Flink的几种状态类型 +## Flink 的几种状态类型 -### Managed State和Raw State +### Managed State 和 Raw State -Flink有两种基本类型的状态:托管状态(Managed State)和原生状态(Raw State)。从名称中也能读出两者的区别:Managed State是由Flink管理的,Flink帮忙存储、恢复和优化,Raw State是开发者自己管理的,需要自己序列化。 +Flink 有两种基本类型的状态:托管状态(Managed State)和原生状态(Raw State)。从名称中也能读出两者的区别:Managed State 是由 Flink 管理的,Flink 帮忙存储、恢复和优化,Raw State 是开发者自己管理的,需要自己序列化。 | | Managed State | Raw State | | :----------: | ------------------------------------------------ | ---------------- | -| 状态管理方式 | Flink Runtime托管,自动存储、自动恢复、自动伸缩 | 用户自己管理 | -| 状态数据结构 | Flink提供的常用数据结构,如ListState、MapState等 | 字节数组:byte[] | -| 使用场景 | 绝大多数Flink算子 | 用户自定义算子 | +| 状态管理方式 | Flink Runtime 托管,自动存储、自动恢复、自动伸缩 | 用户自己管理 | +| 状态数据结构 | Flink 提供的常用数据结构,如 ListState、MapState 等 | 字节数组:byte[] | +| 使用场景 | 绝大多数 Flink 算子 | 用户自定义算子 | 上表展示了两者的区别,主要包括: -* 从状态管理的方式上来说,Managed State由Flink Runtime托管,状态是自动存储、自动恢复的,Flink在存储管理和持久化上做了一些优化。当我们横向伸缩,或者说我们修改Flink应用的并行度时,状态也能自动重新分布到多个并行实例上。Raw State是用户自定义的状态。 -* 从状态的数据结构上来说,Managed State支持了一系列常见的数据结构,如ValueState、ListState、MapState等。Raw State只支持字节,任何上层数据结构需要序列化为字节数组。使用时,需要用户自己序列化,以非常底层的字节数组形式存储,Flink并不知道存储的是什么样的数据结构。 -* 从具体使用场景来说,绝大多数的算子都可以通过继承RichFunction函数类或其他提供好的接口类,在里面使用Managed State。Raw State是在已有算子和Managed State不够用时,用户自定义算子时使用。 +* 从状态管理的方式上来说,Managed State 由 Flink Runtime 托管,状态是自动存储、自动恢复的,Flink 在存储管理和持久化上做了一些优化。当我们横向伸缩,或者说我们修改 Flink 应用的并行度时,状态也能自动重新分布到多个并行实例上。Raw State 是用户自定义的状态。 +* 从状态的数据结构上来说,Managed State 支持了一系列常见的数据结构,如 ValueState、ListState、MapState 等。Raw State 只支持字节,任何上层数据结构需要序列化为字节数组。使用时,需要用户自己序列化,以非常底层的字节数组形式存储,Flink 并不知道存储的是什么样的数据结构。 +* 从具体使用场景来说,绝大多数的算子都可以通过继承 RichFunction 函数类或其他提供好的接口类,在里面使用 Managed State。Raw State 是在已有算子和 Managed State 不够用时,用户自定义算子时使用。 -下面将重点介绍Managed State。 +下面将重点介绍 Managed State。 -### Keyed State和Operator State +### Keyed State 和 Operator State -对Managed State继续细分,它又有两种类型:Keyed State和Operator State。这里先简单对比两种状态,后续还将展示具体的使用方法。 +对 Managed State 继续细分,它又有两种类型:Keyed State 和 Operator State。这里先简单对比两种状态,后续还将展示具体的使用方法。 -Keyed State是`KeyedStream`上的状态。假如输入流按照id为Key进行了`keyBy`分组,形成一个`KeyedStream`,数据流中所有id为1的数据共享一个状态,可以访问和更新这个状态,以此类推,每个Key对应一个自己的状态。下图展示了Keyed State,因为一个算子子任务可以处理一到多个Key,算子子任务1处理了两种Key,两种Key分别对应自己的状态。 +Keyed State 是 `KeyedStream` 上的状态。假如输入流按照 id 为 Key 进行了 `keyBy` 分组,形成一个 `KeyedStream`,数据流中所有 id 为 1 的数据共享一个状态,可以访问和更新这个状态,以此类推,每个 Key 对应一个自己的状态。下图展示了 Keyed State,因为一个算子子任务可以处理一到多个 Key,算子子任务 1 处理了两种 Key,两种 Key 分别对应自己的状态。 -![Keyed State示意图](./img/keyedstate.png) +```{figure} ./img/keyedstate.png +--- +name: fig-keyed-state +width: 80% +align: center +--- +Keyed State 示意图 +``` -Operator State可以用在所有算子上,每个算子子任务或者说每个算子实例共享一个状态,流入这个算子子任务的所有数据都可以访问和更新这个状态。下图展示了Operator State,算子子任务1上的所有数据可以共享第一个Operator State,以此类推,每个算子子任务上的数据共享自己的状态。 +Operator State 可以用在所有算子上,每个算子子任务或者说每个算子实例共享一个状态,流入这个算子子任务的所有数据都可以访问和更新这个状态。{numref}`fig-operator-state` 展示了 Operator State,算子子任务 1 上的所有数据可以共享第一个 Operator State,以此类推,每个算子子任务上的数据共享自己的状态。 -![Operator State示意图](./img/operatorstate.png) +```{figure} ./img/operatorstate.png +--- +name: fig-operator-state +width: 80% +align: center +--- +Operator State 示意图 +``` -无论是Keyed State还是Operator State,Flink的状态都是基于本地的,即每个算子子任务维护着自身的状态,不能访问其他算子子任务的状态。 +无论是 Keyed State 还是 Operator State,Flink 的状态都是基于本地的,即每个算子子任务维护着自身的状态,不能访问其他算子子任务的状态。 -在之前各算子的介绍中曾提到,为了自定义Flink的算子,我们可以重写RichFunction函数类,比如`RichFlatMapFunction`。使用Keyed State时,我们也可以通过重写RichFunction函数类,在里面创建和访问状态。对于Operator State,我们还需进一步实现`CheckpointedFunction`接口。 +在之前各算子的介绍中曾提到,为了自定义 Flink 的算子,我们可以重写 RichFunction 函数类,比如 `RichFlatMapFunction`。使用 Keyed State 时,我们也可以通过重写 RichFunction 函数类,在里面创建和访问状态。对于 Operator State,我们还需进一步实现 `CheckpointedFunction` 接口。 | | Keyed State | Operator State | | -------------- | ----------------------------------------------- | -------------------------------- | -| 适用算子类型 | 只适用于`KeyedStream`上的算子 | 可以用于所有算子 | -| 状态分配 | 每个Key对应一个状态 | 一个算子子任务对应一个状态 | -| 创建和访问方式 | 重写Rich Function,通过里面的RuntimeContext访问 | 实现`CheckpointedFunction`等接口 | -| 横向扩展 | 状态随着Key自动在多个算子子任务上迁移 | 有多种状态重新分配的方式 | -| 支持的数据结构 | ValueState、ListState、MapState等 | ListState、BroadcastState等 | +| 适用算子类型 | 只适用于 `KeyedStream` 上的算子 | 可以用于所有算子 | +| 状态分配 | 每个 Key 对应一个状态 | 一个算子子任务对应一个状态 | +| 创建和访问方式 | 重写 Rich Function,通过里面的 RuntimeContext 访问 | 实现 `CheckpointedFunction` 等接口 | +| 横向扩展 | 状态随着 Key 自动在多个算子子任务上迁移 | 有多种状态重新分配的方式 | +| 支持的数据结构 | ValueState、ListState、MapState 等 | ListState、BroadcastState 等 | -上表总结了Keyed State和Operator State的区别。 +上表总结了 Keyed State 和 Operator State 的区别。 ## 横向扩展问题 -状态的横向扩展问题主要是指修改Flink应用的并行度,每个算子的并行实例数或算子子任务数发生了变化,应用需要关停或启动一些算子子任务,某份在原来某个算子子任务上的状态数据需要平滑更新到新的算子子任务上。Flink的Checkpoint可以辅助迁移状态数据。算子的本地状态将数据生成快照(Snapshot),保存到分布式存储(如HDFS)上。横向伸缩后,算子子任务个数变化,子任务重启,相应的状态从分布式存储上重建(Restore)。下图展示了一个算子扩容的状态迁移过程。 +状态的横向扩展问题主要是指修改 Flink 应用的并行度,每个算子的并行实例数或算子子任务数发生了变化,应用需要关停或启动一些算子子任务,某份在原来某个算子子任务上的状态数据需要平滑更新到新的算子子任务上。Flink 的 Checkpoint 可以辅助迁移状态数据。算子的本地状态将数据生成快照(Snapshot),保存到分布式存储(如 HDFS)上。横向伸缩后,算子子任务个数变化,子任务重启,相应的状态从分布式存储上重建(Restore)。{numref}`fig-flink-rescale` 展示了一个算子扩容的状态迁移过程。 -![Flink算子扩容示意图](./img/rescale.png) +```{figure} ./img/rescale.png +--- +name: fig-flink-rescale +width: 80% +align: center +--- +Flink 算子扩容示意图 +``` -对于Keyed State和Operator State这两种状态,他们的横向伸缩机制不太相同。由于每个Keyed State总是与某个Key相对应,当横向伸缩时,Key总会被自动分配到某个算子子任务上,因此Keyed State会自动在多个并行子任务之间迁移。对于一个非`KeyedStream`,流入算子子任务的数据可能会随着并行度的改变而改变。如上图所示,假如一个应用的并行度原来为2,那么数据会被分成两份并行地流入两个算子子任务,每个算子子任务有一份自己的状态,当并行度改为3时,数据流被拆成3支,此时状态的存储也相应发生了变化。对于横向伸缩问题,Operator State有两种状态分配方式:一种是均匀分配,另一种是将所有状态合并,再分发给每个实例上。 +对于 Keyed State 和 Operator State 这两种状态,他们的横向伸缩机制不太相同。由于每个 Keyed State 总是与某个 Key 相对应,当横向伸缩时,Key 总会被自动分配到某个算子子任务上,因此 Keyed State 会自动在多个并行子任务之间迁移。对于一个非 `KeyedStream`,流入算子子任务的数据可能会随着并行度的改变而改变。如上图所示,假如一个应用的并行度原来为 2,那么数据会被分成两份并行地流入两个算子子任务,每个算子子任务有一份自己的状态,当并行度改为 3 时,数据流被拆成 3 支,此时状态的存储也相应发生了变化。对于横向伸缩问题,Operator State 有两种状态分配方式:一种是均匀分配,另一种是将所有状态合并,再分发给每个实例上。 -## Keyed State的使用方法 +## Keyed State 的使用方法 -### Keyed State简介 +### Keyed State 简介 -对于Keyed State,Flink提供了几种现成的数据结构供我们使用,包括`ValueState`、`ListState`等,他们的继承关系如下图所示。首先,`State`主要有三种实现,分别为`ValueState`、`MapState`和`AppendingState`,`AppendingState`又可以细分为`ListState`、`ReducingState`和`AggregatingState`。 +对于 Keyed State,Flink 提供了几种现成的数据结构供我们使用,包括 `ValueState`、`ListState` 等,他们的继承关系如下图所示。首先,`State` 主要有三种实现,分别为 `ValueState`、`MapState` 和 `AppendingState`,`AppendingState` 又可以细分为 `ListState`、`ReducingState` 和 `AggregatingState`。 -![Keyed State继承关系](./img/inheritance-relationships-of-keyedState.png) +```{figure} ./img/inheritance-relationships-of-keyedState.png +--- +name: fig-keyed-state-inheritance +width: 80% +align: center +--- +Keyed State 继承关系 +``` 这几个状态的具体区别在于: -* `ValueState`是单一变量的状态,T是某种具体的数据类型,比如`Double`、`String`,或我们自己定义的复杂数据结构。我们可以使用`T value()`方法获取状态,使用`void update(T value)`更新状态。 -* `MapState`存储一个Key-Value Map,其功能与Java的`Map`几乎相同。`UV get(UK key)`可以获取某个Key下的Value值,`void put(UK key, UV value)`可以对某个Key设置Value,`boolean contains(UK key)`判断某个Key是否存在,`void remove(UK key)`删除某个Key以及对应的Value,`Iterable> entries()`返回`MapState`中所有的元素,`Iterator> iterator()`返回状态的迭代器。需要注意的是,`MapState`中的Key和Keyed State的Key不是同一个Key。 -* `ListState`存储了一个由T类型数据组成的列表。我们可以使用`void add(T value)`或`void addAll(List values)`向状态中添加元素,使用`Iterable get()`获取整个列表,使用`void update(List values)`来更新列表,新的列表将替换旧的列表。 -* `ReducingState`和`AggregatingState`与`ListState`同属于`MergingState`。与`ListState`不同的是,`ReducingState`只有一个元素,而不是一个列表。它的原理是:新元素通过`void add(T value)`加入后,与已有的状态元素使用`ReduceFunction`合并为一个元素,并更新到状态里。`AggregatingState`与`ReducingState`类似,也只有一个元素,只不过`AggregatingState`的输入和输出类型可以不一样。`ReducingState`和`AggregatingState`与窗口上进行`ReduceFunction`和`AggregateFunction`很像,都是将新元素与已有元素做聚合。 +* `ValueState` 是单一变量的状态,T 是某种具体的数据类型,比如 `Double`、`String`,或我们自己定义的复杂数据结构。我们可以使用 `T value()` 方法获取状态,使用 `void update(T value)` 更新状态。 +* `MapState` 存储一个 Key-Value Map,其功能与 Java 的 `Map` 几乎相同。`UV get(UK key)` 可以获取某个 Key 下的 Value 值,`void put(UK key, UV value)` 可以对某个 Key 设置 Value,`boolean contains(UK key)` 判断某个 Key 是否存在,`void remove(UK key)` 删除某个 Key 以及对应的 Value,`Iterable> entries()` 返回 `MapState` 中所有的元素,`Iterator> iterator()` 返回状态的迭代器。需要注意的是,`MapState` 中的 Key 和 Keyed State 的 Key 不是同一个 Key。 +* `ListState` 存储了一个由 T 类型数据组成的列表。我们可以使用 `void add(T value)` 或 `void addAll(List values)` 向状态中添加元素,使用 `Iterable get()` 获取整个列表,使用 `void update(List values)` 来更新列表,新的列表将替换旧的列表。 +* `ReducingState` 和 `AggregatingState` 与 `ListState` 同属于 `MergingState`。与 `ListState` 不同的是,`ReducingState` 只有一个元素,而不是一个列表。它的原理是:新元素通过 `void add(T value)` 加入后,与已有的状态元素使用 `ReduceFunction` 合并为一个元素,并更新到状态里。`AggregatingState` 与 `ReducingState` 类似,也只有一个元素,只不过 `AggregatingState` 的输入和输出类型可以不一样。`ReducingState` 和 `AggregatingState` 与窗口上进行 `ReduceFunction` 和 `AggregateFunction` 很像,都是将新元素与已有元素做聚合。 :::info -Flink的核心代码目前使用Java实现的,而Java的很多类型与Scala的类型不太相同,比如`List`和`Map`。这里不再详细解释Java和Scala的数据类型的异同,但是开发者在使用Scala调用这些接口,比如状态的接口,需要注意两种语言间的转换。对于`List`和`Map`的转换,只需要引用`import scala.collection.JavaConversions._`,并在必要的地方添加后缀`asScala`或`asJava`来进行转换。此外,Scala和Java的空对象使用习惯不太相同,Java一般使用`null`表示空,Scala一般使用`None`。 +Flink 的核心代码目前使用 Java 实现的,而 Java 的很多类型与 Scala 的类型不太相同,比如 `List` 和 `Map`。这里不再详细解释 Java 和 Scala 的数据类型的异同,但是开发者在使用 Scala 调用这些接口,比如状态的接口,需要注意两种语言间的转换。对于 `List` 和 `Map` 的转换,只需要引用 `import scala.collection.JavaConversions._`,并在必要的地方添加后缀 `asScala` 或 `asJava` 来进行转换。此外,Scala 和 Java 的空对象使用习惯不太相同,Java 一般使用 `null` 表示空,Scala 一般使用 `None`。 ::: -### Keyed State的使用方法 +### Keyed State 的使用方法 -之前的文章中其实已经多次使用过状态,这里基于电商用户行为分析场景来演示如何使用状态,我们采用了阿里巴巴提供的一个淘宝用户行为数据集,为了精简需要,只节选了部分数据。电商平台会将用户与商品的交互行为收集记录下来,行为数据主要包括几个字段:userId、itemId、categoryId、behavior和timestamp。其中userId和itemId分别代表用户和商品的唯一ID,categoryId为商品类目ID,behavior表示用户的行为类型,包括点击(pv)、购买(buy)、加购物车(cart)、喜欢(fav)等,timestamp记录行为发生时间。我们定义相应的数据结构为: +之前的文章中其实已经多次使用过状态,这里基于电商用户行为分析场景来演示如何使用状态,我们采用了阿里巴巴提供的一个淘宝用户行为数据集,为了精简需要,只节选了部分数据。电商平台会将用户与商品的交互行为收集记录下来,行为数据主要包括几个字段:userId、itemId、categoryId、behavior 和 timestamp。其中 userId 和 itemId 分别代表用户和商品的唯一 ID,categoryId 为商品类目 ID,behavior 表示用户的行为类型,包括点击 (pv)、购买(buy)、加购物车(cart)、喜欢(fav) 等,timestamp 记录行为发生时间。我们定义相应的数据结构为: ```java public class UserBehavior { @@ -119,7 +154,7 @@ public class UserBehavior { public String behavior; public long timestamp; - public UserBehavior() {} + public UserBehavior(){} public UserBehavior(long userId, long itemId, int categoryId, String behavior, long timestamp) { this.userId = userId; @@ -141,47 +176,47 @@ public class UserBehavior { } ``` -我们先在主逻辑中读取数据流,生成一个按照用户ID分组的`KeyedStream`,在这之上使用`RichFlatMapFunction`。 +我们先在主逻辑中读取数据流,生成一个按照用户 ID 分组的 `KeyedStream`,在这之上使用 `RichFlatMapFunction`。 ```java env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); DataStream userBehaviorStream = ... -// 生成一个KeyedStream +// 生成一个 KeyedStream KeyedStream keyedStream = userBehaviorStream.keyBy(user -> user.userId); -// 在KeyedStream上进行flatMap +// 在 KeyedStream 上进行 flatMap DataStream> behaviorCountStream = keyedStream.flatMap(new MapStateFunction()); ``` -下面的代码演示了继承`RichFlatMapFunction`,这里使用`MapState`来记录某个用户某种行为出现的次数。 +下面的代码演示了继承 `RichFlatMapFunction`,这里使用 `MapState` 来记录某个用户某种行为出现的次数。 ```scala /** - * MapStateFunction继承并实现RichFlatMapFunction + * MapStateFunction 继承并实现 RichFlatMapFunction * 两个泛型分别为输入数据类型和输出数据类型 */ public static class MapStateFunction extends RichFlatMapFunction> { - // 指向MapState的句柄 + // 指向 MapState 的句柄 private MapState behaviorMapState; @Override public void open(Configuration configuration) { - // 创建StateDescriptor + // 创建 StateDescriptor MapStateDescriptor behaviorMapStateDescriptor = new MapStateDescriptor("behaviorMap", Types.STRING, Types.INT); - // 通过StateDescriptor获取运行时上下文中的状态 + // 通过 StateDescriptor 获取运行时上下文中的状态 behaviorMapState = getRuntimeContext().getMapState(behaviorMapStateDescriptor); } @Override public void flatMap(UserBehavior input, Collector> out) throws Exception { int behaviorCnt = 1; - // behavior有可能为pv、cart、fav、buy等 - // 判断状态中是否有该behavior + // behavior 有可能为 pv、cart、fav、buy 等 + // 判断状态中是否有该 behavior if (behaviorMapState.contains(input.behavior)) { behaviorCnt = behaviorMapState.get(input.behavior) + 1; } @@ -192,31 +227,31 @@ public static class MapStateFunction extends RichFlatMapFunction behaviorMapStateDescriptor = new MapStateDescriptor("behaviorMap", Types.STRING, Types.INT); ``` -接着我们通过`StateDescriptor`向`RuntimeContext`中获取状态句柄。状态句柄并不存储状态,它只是Flink提供的一种访问状态的接口,状态数据实际存储在State Backend中。本例中对应的代码为: +接着我们通过 `StateDescriptor` 向 `RuntimeContext` 中获取状态句柄。状态句柄并不存储状态,它只是 Flink 提供的一种访问状态的接口,状态数据实际存储在 State Backend 中。本例中对应的代码为: ```java -// 通过StateDescriptor获取运行时上下文中的状态 +// 通过 StateDescriptor 获取运行时上下文中的状态 behaviorMapState = getRuntimeContext().getMapState(behaviorMapStateDescriptor); ``` -使用和更新状态发生在实际的处理函数上,比如`RichFlatMapFunction`中的`flatMap`方法。在实现自己的业务逻辑时需要访问和修改状态,比如我们可以通过`MapState.get`方法获取状态,通过`MapState.put`方法更新状态中的数据。 +使用和更新状态发生在实际的处理函数上,比如 `RichFlatMapFunction` 中的 `flatMap` 方法。在实现自己的业务逻辑时需要访问和修改状态,比如我们可以通过 `MapState.get` 方法获取状态,通过 `MapState.put` 方法更新状态中的数据。 -其他类型的状态使用方法与本例中所展示的大致相同。`ReducingState`和`AggregatingState`在注册`StateDescriptor`时,还需要实现一个`ReduceFunction`或`AggregationFunction`。下面的代码注册`ReducingStateDescriptor`时实现一个`ReduceFunction`。 +其他类型的状态使用方法与本例中所展示的大致相同。`ReducingState` 和 `AggregatingState` 在注册 `StateDescriptor` 时,还需要实现一个 `ReduceFunction` 或 `AggregationFunction`。下面的代码注册 `ReducingStateDescriptor` 时实现一个 `ReduceFunction`。 ```java /** - * ReducingStateFlatMap继承并实现了了RichFlatMapFunction - * 第一个泛型Tuple2是输入类型 - * 第二个泛型Integer是输出类型 + * ReducingStateFlatMap 继承并实现了了 RichFlatMapFunction + * 第一个泛型 Tuple2 是输入类型 + * 第二个泛型 Integer 是输出类型 */ private static class ReducingStateFlatMap extends RichFlatMapFunction, Integer> { @@ -224,8 +259,8 @@ private static class ReducingStateFlatMap extends RichFlatMapFunction stateDescriptor = new ReducingStateDescriptor<>( "reducing-state", @@ -240,7 +275,7 @@ private static class ReducingStateFlatMap extends RichFlatMapFunction { @Override @@ -251,31 +286,31 @@ private static class ReducingStateFlatMap extends RichFlatMapFunction>, CheckpointedFunction { private final int threshold; - // Operator List State句柄 + // Operator List State 句柄 private transient ListState> checkpointedState; // 本地缓存 @@ -316,7 +351,7 @@ public class BufferingSink this.bufferedElements = new ArrayList<>(); } - // Sink的核心处理逻辑,将上游数据value输出到外部系统 + // Sink 的核心处理逻辑,将上游数据 value 输出到外部系统 @Override public void invoke(Tuple2 value, Context contex) throws Exception { // 先将上游数据缓存到本地的缓存 @@ -331,11 +366,11 @@ public class BufferingSink } } - // 重写CheckpointedFunction中的snapshotState - // 将本地缓存Snapshot到存储上 + // 重写 CheckpointedFunction 中的 snapshotState + // 将本地缓存 Snapshot 到存储上 @Override public void snapshotState(FunctionSnapshotContext context) throws Exception { - // 将之前的Checkpoint清理 + // 将之前的 Checkpoint 清理 checkpointedState.clear(); for (Tuple2 element : bufferedElements) { // 将最新的数据写到状态中 @@ -343,17 +378,17 @@ public class BufferingSink } } - // 重写CheckpointedFunction中的initializeState + // 重写 CheckpointedFunction 中的 initializeState // 初始化状态 @Override public void initializeState(FunctionInitializationContext context) throws Exception { - // 注册ListStateDescriptor + // 注册 ListStateDescriptor ListStateDescriptor> descriptor = new ListStateDescriptor<>( "buffered-elements", TypeInformation.of(new TypeHint>() {})); - // 从FunctionInitializationContext中获取OperatorStateStore,进而获取ListState + // 从 FunctionInitializationContext 中获取 OperatorStateStore,进而获取 ListState checkpointedState = context.getOperatorStateStore().getListState(descriptor); // 如果是作业重启,读取存储中的状态数据并填充到本地缓存中 @@ -366,9 +401,9 @@ public class BufferingSink } ``` -上面的代码中,在输出到Sink之前,程序先将数据放在本地缓存中,并定期进行Snapshot,这实现了批量输出的功能,批量输出能够减少网络等开销。同时,程序能够保证数据一定会输出外部系统,因为即使程序崩溃,状态中存储着还未输出的数据,下次启动后还会将这些未输出数据读取到内存,继续输出到外部系统。 +上面的代码中,在输出到 Sink 之前,程序先将数据放在本地缓存中,并定期进行 Snapshot,这实现了批量输出的功能,批量输出能够减少网络等开销。同时,程序能够保证数据一定会输出外部系统,因为即使程序崩溃,状态中存储着还未输出的数据,下次启动后还会将这些未输出数据读取到内存,继续输出到外部系统。 -注册和使用Operator State的代码和Keyed State相似,也是先注册一个`StateDescriptor`,并指定状态名字和数据类型,然后从`FunctionInitializationContext`中获取`OperatorStateStore`,进而获取ListState。 +注册和使用 Operator State 的代码和 Keyed State 相似,也是先注册一个 `StateDescriptor`,并指定状态名字和数据类型,然后从 `FunctionInitializationContext` 中获取 `OperatorStateStore`,进而获取 ListState。 ```java ListStateDescriptor> descriptor = @@ -379,40 +414,47 @@ ListStateDescriptor> descriptor = checkpointedState = context.getOperatorStateStore().getListState(descriptor); ``` -如果是UnionListState,那么代码改为:`context.getOperatorStateStore().getUnionListState()`。 +如果是 UnionListState,那么代码改为:`context.getOperatorStateStore().getUnionListState()`。 -在之前代码的`initializeState`方法里,我们进行了状态的初始化逻辑,我们用`context.isRestored()`来判断是否为重启作业,然后从之前的Checkpoint中恢复并写到本地缓存中。 +在之前代码的 `initializeState` 方法里,我们进行了状态的初始化逻辑,我们用 `context.isRestored()` 来判断是否为重启作业,然后从之前的 Checkpoint 中恢复并写到本地缓存中。 :::info -`CheckpointedFunction`接口类的`initializeState`方法的参数为`FunctionInitializationContext`,基于这个上下文对象我们不仅可以通过`getOperatorStateStore`获取`OperatorStateStore`,也可以通过`getKeyedStateStore`来获取`KeyedStateStore`,进而通过`getState`、`getMapState`等方法获取Keyed State,比如:`context.getKeyedStateStore().getState(stateDescriptor)`。这与在RichFunction函数类中使用Keyed State的方式并不矛盾,因为`CheckpointedFunction`是Flink有状态计算的最底层接口,它提供了最丰富的状态接口。 +`CheckpointedFunction` 接口类的 `initializeState` 方法的参数为 `FunctionInitializationContext`,基于这个上下文对象我们不仅可以通过 `getOperatorStateStore` 获取 `OperatorStateStore`,也可以通过 `getKeyedStateStore` 来获取 `KeyedStateStore`,进而通过 `getState`、`getMapState` 等方法获取 Keyed State,比如:`context.getKeyedStateStore().getState(stateDescriptor)`。这与在 RichFunction 函数类中使用 Keyed State 的方式并不矛盾,因为 `CheckpointedFunction` 是 Flink 有状态计算的最底层接口,它提供了最丰富的状态接口。 ::: -`ListCheckpointed`接口类是`CheckpointedFunction`接口类的一种简写,`ListCheckpointed`提供的功能有限,只支持均匀分布的ListState,不支持全量广播的UnionListState。 +`ListCheckpointed` 接口类是 `CheckpointedFunction` 接口类的一种简写,`ListCheckpointed` 提供的功能有限,只支持均匀分布的 ListState,不支持全量广播的 UnionListState。 ```java public interface ListCheckpointed { - // Checkpoint时会调用这个方法,我们要实现具体的snapshot逻辑,比如将哪些本地状态持久化 + // Checkpoint 时会调用这个方法,我们要实现具体的 snapshot 逻辑,比如将哪些本地状态持久化 List snapshotState(long checkpointId, long timestamp) throws Exception; - // 从上次Checkpoint中恢复数据到本地内存 + // 从上次 Checkpoint 中恢复数据到本地内存 void restoreState(List state) throws Exception; } ``` -跟`CheckpointedFunction`中的`snapshotState`方法一样,这里的`snapshotState`也是在做备份,但这里的参数列表更加精简,其中`checkpointId`是一个单调递增的数字,用来表示某次Checkpoint,`timestamp`是Checkpoint发生的实际时间,这个方法以列表形式返回需要写入存储的状态,Flink会将返回值`List`写入存储。`restoreState`方法用来初始化状态,包括作业第一次启动或者作业失败重启。参数`state`是一个列表形式的状态,是从存储中读取出来的、需要均匀分布给这个算子子任务的状态数据。启动时,Flink会读取存储中的数据,传入参数`state`中,开发者根据业务需求决定如何恢复这些数据。 +跟 `CheckpointedFunction` 中的 `snapshotState` 方法一样,这里的 `snapshotState` 也是在做备份,但这里的参数列表更加精简,其中 `checkpointId` 是一个单调递增的数字,用来表示某次 Checkpoint,`timestamp` 是 Checkpoint 发生的实际时间,这个方法以列表形式返回需要写入存储的状态,Flink 会将返回值 `List` 写入存储。`restoreState` 方法用来初始化状态,包括作业第一次启动或者作业失败重启。参数 `state` 是一个列表形式的状态,是从存储中读取出来的、需要均匀分布给这个算子子任务的状态数据。启动时,Flink 会读取存储中的数据,传入参数 `state` 中,开发者根据业务需求决定如何恢复这些数据。 -## BroadcastState的使用方法 +## BroadcastState 的使用方法 -BroadcastState是Flink 1.5引入的功能,本节将跟大家分享BroadcastState的潜在使用场景,并继续使用电商用户行为分析的案例来演示BroadcastState的使用方法。 +BroadcastState 是 Flink 1.5 引入的功能,本节将跟大家分享 BroadcastState 的潜在使用场景,并继续使用电商用户行为分析的案例来演示 BroadcastState 的使用方法。 -### BroadcastState使用场景 +### BroadcastState 使用场景 -无论是分布式批处理还是流处理,将部分数据同步到所有实例上是一个十分常见的需求。例如,我们需要依赖一个不断变化的控制规则来处理主数据流的数据,主数据流数据量比较大,只能分散到多个算子实例上,控制规则数据相对比较小,可以分发到所有的算子实例上。BroadcastState与直接在时间窗口进行两个数据流的Join的不同点在于,控制规则数据量较小,可以直接放到每个算子实例里,这样可以大大提高主数据流的处理速度。下图为BroadcastState工作原理示意图。 +无论是分布式批处理还是流处理,将部分数据同步到所有实例上是一个十分常见的需求。例如,我们需要依赖一个不断变化的控制规则来处理主数据流的数据,主数据流数据量比较大,只能分散到多个算子实例上,控制规则数据相对比较小,可以分发到所有的算子实例上。BroadcastState 与直接在时间窗口进行两个数据流的 Join 的不同点在于,控制规则数据量较小,可以直接放到每个算子实例里,这样可以大大提高主数据流的处理速度。{numref}`fig-broadcast-state` 为 BroadcastState 工作原理示意图。 -![BroadcastState](./img/broadcast-state.png) +```{figure} ./img/broadcast-state.png +--- +name: fig-broadcast-state +width: 80% +align: center +--- +BroadcastState 示意图 +``` -我们继续使用电商平台用户行为分析为例,不同类型的用户往往有特定的行为模式,有些用户购买欲望强烈,有些用户反复犹豫才下单,有些用户频繁爬取数据,有盗刷数据的嫌疑,电商平台运营人员为了提升商品的购买转化率,保证平台的使用体验,经常会进行一些用户行为模式分析。基于这个场景,我们可以构建一个Flink作业,实时监控识别不同模式的用户。为了避免每次更新规则模式后重启部署,我们可以将规则模式作为一个数据流与用户行为数据流`connect`在一起,并将规则模式以BroadcastState的形式广播到每个算子实例上。 +我们继续使用电商平台用户行为分析为例,不同类型的用户往往有特定的行为模式,有些用户购买欲望强烈,有些用户反复犹豫才下单,有些用户频繁爬取数据,有盗刷数据的嫌疑,电商平台运营人员为了提升商品的购买转化率,保证平台的使用体验,经常会进行一些用户行为模式分析。基于这个场景,我们可以构建一个 Flink 作业,实时监控识别不同模式的用户。为了避免每次更新规则模式后重启部署,我们可以将规则模式作为一个数据流与用户行为数据流 `connect` 在一起,并将规则模式以 BroadcastState 的形式广播到每个算子实例上。 ### 电商用户行为识别案例 @@ -428,7 +470,7 @@ public class BehaviorPattern { public String firstBehavior; public String secondBehavior; - public BehaviorPattern() {} + public BehaviorPattern(){} public BehaviorPattern(String firstBehavior, String secondBehavior) { this.firstBehavior = firstBehavior; @@ -447,14 +489,14 @@ public class BehaviorPattern { ```java // 主数据流 DataStream userBehaviorStream = ... -// BehaviorPattern数据流 +// BehaviorPattern 数据流 DataStream patternStream = ... ``` -目前BroadcastState只支持使用Key-Value形式,需要使用`MapStateDescriptor`来描述。这里我们使用一个比较简单的行为模式,因此Key是一个空类型。当然我们也可以根据业务场景,构造复杂的Key-Value。然后,我们将模式流使用`broadcast`方法广播到所有算子子任务上。 +目前 BroadcastState 只支持使用 Key-Value 形式,需要使用 `MapStateDescriptor` 来描述。这里我们使用一个比较简单的行为模式,因此 Key 是一个空类型。当然我们也可以根据业务场景,构造复杂的 Key-Value。然后,我们将模式流使用 `broadcast` 方法广播到所有算子子任务上。 ```java -// BroadcastState只能使用 Key->Value 结构,基于MapStateDescriptor +// BroadcastState 只能使用 Key->Value 结构,基于 MapStateDescriptor MapStateDescriptor broadcastStateDescriptor = new MapStateDescriptor<>("behaviorPattern", Types.VOID, Types.POJO(BehaviorPattern.class)); @@ -462,24 +504,24 @@ BroadcastStream broadcastStream = patternStream.broadcast(broadcastStateDescriptor); ``` -用户行为模式流先按照用户ID进行`keyBy`,然后与广播流合并: +用户行为模式流先按照用户 ID 进行 `keyBy`,然后与广播流合并: ```scala -// 生成一个KeyedStream +// 生成一个 KeyedStream KeyedStream keyedStream = userBehaviorStream.keyBy(user -> user.userId); -// 在KeyedStream上进行connect和process +// 在 KeyedStream 上进行 connect 和 process DataStream> matchedStream = keyedStream .connect(broadcastStream) .process(new BroadcastPatternFunction()); ``` -下面的代码展示了BroadcastState完整的使用方法。`BroadcastPatternFunction`是`KeyedBroadcastProcessFunction`的具体实现,它基于BroadcastState处理主数据流,输出`(Long, BehaviorPattern)`,分别表示用户ID和行为模式。 +下面的代码展示了 BroadcastState 完整的使用方法。`BroadcastPatternFunction` 是 `KeyedBroadcastProcessFunction` 的具体实现,它基于 BroadcastState 处理主数据流,输出 `(Long, BehaviorPattern)`,分别表示用户 ID 和行为模式。 ```java /** * 四个泛型分别为: - * 1. KeyedStream中Key的数据类型 + * 1. KeyedStream 中 Key 的数据类型 * 2. 主数据流的数据类型 * 3. 广播流的数据类型 * 4. 输出类型 @@ -504,8 +546,8 @@ extends KeyedBroadcastProcessFunction> collector) throws Exception { BroadcastState bcPatternState = context.getBroadcastState(bcPatternDesc); - // 将新数据更新至BroadcastState,这里使用一个null作为Key - // 在本场景中所有数据都共享一个Pattern,因此这里伪造了一个Key + // 将新数据更新至 BroadcastState,这里使用一个 null 作为 Key + // 在本场景中所有数据都共享一个 Pattern,因此这里伪造了一个 Key bcPatternState.put(null, pattern); } @@ -514,7 +556,7 @@ extends KeyedBroadcastProcessFunction> collector) throws Exception { - // 获取最新的BroadcastState + // 获取最新的 BroadcastState BehaviorPattern pattern = context.getBroadcastState(bcPatternDesc).get(null); String lastBehavior = lastBehaviorState.value(); if (pattern != null && lastBehavior != null) { @@ -530,15 +572,15 @@ extends KeyedBroadcastProcessFunction ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -## WordCount程序和数据流图 +## WordCount 程序和数据流图 -上一章的案例中,我们尝试构建了一个文本数据流管道,这个Flink程序可以计算数据流中单词出现的频次。如果输入数据流是“Hello Flink Hello World“,这个程序将统计出“Hello”的频次为2,“Flink”和“World”的频次为1。在大数据领域,WordCount程序就像是一个编程语言的HelloWorld程序,它展示了一个大数据引擎的基本规范。麻雀虽小,五脏俱全,从这个样例中,我们可以一窥Flink设计和运行原理。 +上一章的案例中,我们尝试构建了一个文本数据流管道,这个 Flink 程序可以计算数据流中单词出现的频次。如果输入数据流是“Hello Flink Hello World“,这个程序将统计出“Hello”的频次为 2,“Flink”和“World”的频次为 1。在大数据领域,WordCount 程序就像是一个编程语言的 HelloWorld 程序,它展示了一个大数据引擎的基本规范。麻雀虽小,五脏俱全,从这个样例中,我们可以一窥 Flink 设计和运行原理。 -如下图所示,程序分为三大部分,第一部分读取数据源(Source),第二部分对数据做转换操作(Transformation),最后将转换结果输出到一个目的地(Sink)。 +如 {numref}`code` 所示,程序分为三大部分,第一部分读取数据源(Source),第二部分对数据做转换操作(Transformation),最后将转换结果输出到一个目的地(Sink)。 -![Flink样例程序示意图](./img/code.png) +```{figure} ./img/code.png +--- +name: code +width: 60% +--- +Flink 样例程序示意图 +``` -代码中的方法被称为函数(Function),是Flink提供给程序员的接口,程序员需要调用并实现这些函数,对数据进行操作,进而完成特定的业务逻辑。通常一到多个函数会组成一个算子(Operator), 算子执行对数据的操作(Operation)。在WordCount的例子中,有三类算子:Source算子读取数据源中的数据,数据源可以是数据流、也可以存储在文件系统中的文件。Transformation算子对数据进行必要的计算处理。Sink算子将处理结果输出,数据一般被输出到数据库、文件系统或下一个数据流程序。 +代码中的方法被称为函数(Function), 是 Flink 提供给程序员的接口,程序员需要调用并实现这些函数,对数据进行操作,进而完成特定的业务逻辑。通常一到多个函数会组成一个算子(Operator), 算子执行对数据的操作(Operation)。在 WordCount 的例子中,有三类算子:Source 算子读取数据源中的数据,数据源可以是数据流、也可以存储在文件系统中的文件。Transformation 算子对数据进行必要的计算处理。Sink 算子将处理结果输出,数据一般被输出到数据库、文件系统或下一个数据流程序。 -我们可以把算子理解为1 + 2 运算中的加号,加号(+)是这个算子的一个符号表示,它表示对数字1和数字2做加法运算。同样,在Flink或Spark这样的大数据引擎中,算子对数据进行某种操作,程序员可以根据自己的需求调用合适的算子,完成所需计算任务。Flink常用的算子有`map()`、`flatMap()`、`keyBy()`、`timeWindow()`等,它们分别对数据流执行不同类型的操作。 +我们可以把算子理解为 1 + 2 运算中的加号,加号(+)是这个算子的一个符号表示,它表示对数字 1 和数字 2 做加法运算。同样,在 Flink 或 Spark 这样的大数据引擎中,算子对数据进行某种操作,程序员可以根据自己的需求调用合适的算子,完成所需计算任务。Flink 常用的算子有 `map()`、`flatMap()`、`keyBy()`、`timeWindow()` 等,它们分别对数据流执行不同类型的操作。 我们先对这个样例程序中各个算子做一个简单的介绍,关于这些算子的具体使用方式将在后续章节中详细说明。 * flatMap -`flatMap()`对输入进行处理,生成零到多个输出。本例中它执行一个简单的分词过程,对一行字符串按照空格切分,生成一个(word, 1)的二元组。 +`flatMap()` 对输入进行处理,生成零到多个输出。本例中它执行一个简单的分词过程,对一行字符串按照空格切分,生成一个 (word, 1) 的二元组。 * keyBy -`keyBy()`根据某个Key对数据重新分组。本例中是将二元组(word, 1)中第一项作为Key进行分组,相同的单词会被分到同一组。 +`keyBy()` 根据某个 Key 对数据重新分组。本例中是将二元组 (word, 1) 中第一项作为 Key 进行分组,相同的单词会被分到同一组。 * timeWindow -`timeWindow()`是时间窗口函数,用来界定对多长时间之内的数据做统计。 +`timeWindow()` 是时间窗口函数,用来界定对多长时间之内的数据做统计。 * sum -`sum()`为求和函数。`sum(1)`表示对二元组中第二个元素求和,因为经过前面的keyBy,所有相同的单词都被分到了一组,因此,在这个分组内,将单词出现次数做加和,就得到出现的总次数。 +`sum()` 为求和函数。`sum(1)` 表示对二元组中第二个元素求和,因为经过前面的 keyBy,所有相同的单词都被分到了一组,因此,在这个分组内,将单词出现次数做加和,就得到出现的总次数。 -在程序实际运行前,Flink会将用户编写的代码做一个简单处理,生成一个如下图所示的逻辑视图。下图展示了WordCount程序中,数据从不同算子间流动的情况。图中,圆圈代表算子,圆圈间的箭头代表数据流,数据流在Flink程序中经过不同算子的计算,最终生成结果。其中,`keyBy()`、`timeWindow()`和`sum()`共同组成了一个时间窗口上的聚合操作,被归结为一个算子。我们可以在Flink的Web UI中,点击一个作业,查看这个作业的逻辑视图。 +在程序实际运行前,Flink 会将用户编写的代码做一个简单处理,生成一个如下图所示的逻辑视图。{numref}`logical-view` 展示了 WordCount 程序中,数据从不同算子间流动的情况。图中,圆圈代表算子,圆圈间的箭头代表数据流,数据流在 Flink 程序中经过不同算子的计算,最终生成结果。其中,`keyBy()`、`timeWindow()` 和 `sum()` 共同组成了一个时间窗口上的聚合操作,被归结为一个算子。我们可以在 Flink 的 Web UI 中,点击一个作业,查看这个作业的逻辑视图。 -![WordCont程序的逻辑视图](./img/logical-view.png) +```{figure} ./img/logical-view.svg +--- +name: logical-view +width: 60% +--- +WordCount 程序的逻辑视图 +``` -对于词频统计这个案例,逻辑上来讲无非是对数据流中的单词做提取,然后使用一个Key-Value结构对单词做词频计数,最后输出结果即可,这样的逻辑本可以用几行代码完成,改成使用算子形式,反而让新人看着一头雾水,为什么一定要用算子的形式来写程序呢?实际上,算子进化成当前这个形态,就像人类从石块计数,到手指计数,到算盘计数,再到计算机计数这样的进化过程一样,尽管更低级的方式可以完成一定的计算任务,但是随着计算规模的增长,古老的计数方式存在着低效的弊端,无法完成更高级别和更大规模的计算需求。试想,如果我们不使用大数据框架提供的算子,而是自己实现一套上述的计算逻辑,尽管我们可以快速完成当前的词频统计的任务,但是当面临一个新计算任务时,我们需要重新编写程序,完成一整套计算任务。我们自己编写代码的横向扩展性可能很低,当输入数据暴增时,我们需要做很大改动,以部署在更多机器上。 +对于词频统计这个案例,逻辑上来讲无非是对数据流中的单词做提取,然后使用一个 Key-Value 结构对单词做词频计数,最后输出结果即可,这样的逻辑本可以用几行代码完成,改成使用算子形式,反而让新人看着一头雾水,为什么一定要用算子的形式来写程序呢?实际上,算子进化成当前这个形态,就像人类从石块计数,到手指计数,到算盘计数,再到计算机计数这样的进化过程一样,尽管更低级的方式可以完成一定的计算任务,但是随着计算规模的增长,古老的计数方式存在着低效的弊端,无法完成更高级别和更大规模的计算需求。试想,如果我们不使用大数据框架提供的算子,而是自己实现一套上述的计算逻辑,尽管我们可以快速完成当前的词频统计的任务,但是当面临一个新计算任务时,我们需要重新编写程序,完成一整套计算任务。我们自己编写代码的横向扩展性可能很低,当输入数据暴增时,我们需要做很大改动,以部署在更多机器上。 -大数据引擎的算子对计算做了一些抽象,对于新人来说有一定学习成本,而一旦掌握这门技术,人们所能处理的数据规模将成倍增加。算子的出现,正是针对大数据场景下,人们需要一种统一的计算描述语言来对数据做计算而进化出的新计算形态。基于Flink的算子,我们可以定义一个数据流的逻辑视图,以此完成对大数据的计算。剩下那些数据交换、横向扩展、故障恢复等问题全交由大数据引擎来解决。 +大数据引擎的算子对计算做了一些抽象,对于新人来说有一定学习成本,而一旦掌握这门技术,人们所能处理的数据规模将成倍增加。算子的出现,正是针对大数据场景下,人们需要一种统一的计算描述语言来对数据做计算而进化出的新计算形态。基于 Flink 的算子,我们可以定义一个数据流的逻辑视图,以此完成对大数据的计算。剩下那些数据交换、横向扩展、故障恢复等问题全交由大数据引擎来解决。 ## 从逻辑视图到物理执行 @@ -53,30 +65,44 @@ 前一小节已经提到,大数据引擎的算子提供了编程接口,我们可以使用算子构建数据流的逻辑视图。考虑到数据分布在多个节点的情况,逻辑视图只是一种抽象,需要将逻辑视图转化为物理执行图,才能在分布式环境下执行。 -下图为WordCount程序的物理执行示意图,数据流分布在2个分区上。箭头部分表示数据流分区,圆圈部分表示算子在分区上的算子子任务(Operator Subtask)。从逻辑视图变为物理执行图后,FlatMap算子在每个分区都有一个算子子任务,以处理该分区上的数据:FlatMap[1/2]算子子任务处理第一个数据流分区上的数据,以此类推。 +如 {numref}`physical-execution` 为 WordCount 程序的物理执行示意图,数据流分布在 2 个分区上。箭头部分表示数据流分区,圆圈部分表示算子在分区上的算子子任务(Operator Subtask)。从逻辑视图变为物理执行图后,FlatMap 算子在每个分区都有一个算子子任务,以处理该分区上的数据:FlatMap[1/2] 算子子任务处理第一个数据流分区上的数据,以此类推。 -![WordCount程序物理执行示意图](./img/physical-execution.png) +```{figure} ./img/physical-execution.svg +--- +name: physical-execution +width: 60% +align: center +--- +WordCount 程序物理执行示意图 +``` -在分布式计算环境下,执行计算的单个节点(物理机或虚拟机)被称为实例,一个算子在并行执行时,算子子任务会分布到多个节点上,所以算子子任务又被称为算子实例(Instance)。即使输入数据增多,我们也可以通过部署更多的算子实例来进行横向扩展。从图 3‑3中可以看到,除去Sink外的算子都被分成了2个算子实例,他们的并行度(Parallelism)为2,Sink算子的并行度为1。并行度是可以被设置的,当设置某个算子的并行度为2时,也就意味着这个算子有2个算子子任务(或者说2个算子实例)并行执行。实际应用中一般根据输入数据量的大小,计算资源的多少等多方面的因素来设置并行度。 +在分布式计算环境下,执行计算的单个节点(物理机或虚拟机)被称为实例,一个算子在并行执行时,算子子任务会分布到多个节点上,所以算子子任务又被称为算子实例(Instance)。即使输入数据增多,我们也可以通过部署更多的算子实例来进行横向扩展。从图 3‑3 中可以看到,除去 Sink 外的算子都被分成了 2 个算子实例,他们的并行度(Parallelism)为 2,Sink 算子的并行度为 1。并行度是可以被设置的,当设置某个算子的并行度为 2 时,也就意味着这个算子有 2 个算子子任务(或者说 2 个算子实例)并行执行。实际应用中一般根据输入数据量的大小,计算资源的多少等多方面的因素来设置并行度。 :::{tip} -在本例中,为了演示,我们把所有算子的并行度设置为了2:`env.setParallelism(2);`,把Sink的并行度设置成了1:`wordCount.print().setParallelism(1);`。如果不单独设置print的并行度的话,它的并行度也是2。 +在本例中,为了演示,我们把所有算子的并行度设置为了 2:`env.setParallelism(2);`,把 Sink 的并行度设置成了 1:`wordCount.print().setParallelism(1);`。如果不单独设置 print 的并行度的话,它的并行度也是 2。 ::: -算子子任务是Flink物理执行的基本单元,算子子任务之间是相互独立的,某个算子子任务有自己的线程,不同算子子任务可能分布在不同的机器节点上。后文在Flink的资源分配部分我们还会重点介绍算子子任务。 +算子子任务是 Flink 物理执行的基本单元,算子子任务之间是相互独立的,某个算子子任务有自己的线程,不同算子子任务可能分布在不同的机器节点上。后文在 Flink 的资源分配部分我们还会重点介绍算子子任务。 在本书后文的描述中,算子子任务、分区、实例都是指对算子的并行切分。 ## 数据交换策略 -下图中出现了数据流动的现象,即数据在不同的算子子任务上进行着数据交换。无论是Hadoop、Spark还是Flink,都会涉及到数据交换策略。常见的据交换策略有4种,如下图所示。 +如 {numref}`data-exchange` 中出现了数据流动的现象,即数据在不同的算子子任务上进行着数据交换。无论是 Hadoop、Spark 还是 Flink,都会涉及到数据交换策略。常见的据交换策略有 4 种,如下图所示。 -![Flink数据交换策略](./img/data-exchange.png) +```{figure} ./img/data-exchange.svg +--- +name: data-exchange +width: 60% +align: center +--- +Flink 数据交换策略 +``` -* 前向传播(Forward):前一个算子子任务将数据直接传递给后一个算子子任务,数据不存在跨分区的交换,也避免了因数据交换产生的各类开销,图 3‑3中Source和和FlatMap之间就是这样的情形。 +* 前向传播(Forward):前一个算子子任务将数据直接传递给后一个算子子任务,数据不存在跨分区的交换,也避免了因数据交换产生的各类开销,图 3‑3 中 Source 和和 FlatMap 之间就是这样的情形。 -* 按Key分组(Key-Based):数据以(Key, Value)形式存在,该策略将所有数据按照Key进行分组,相同Key的数据会被分到一组,发送到同一个分区上。WordCount程序中,keyBy将单词作为Key,把相同单词都发送到同一分区,以方便后续算子的聚合统计。 +* 按 Key 分组(Key-Based):数据以 (Key, Value) 形式存在,该策略将所有数据按照 Key 进行分组,相同 Key 的数据会被分到一组,发送到同一个分区上。WordCount 程序中,keyBy 将单词作为 Key,把相同单词都发送到同一分区,以方便后续算子的聚合统计。 -* 广播(Broadcast):将某份数据发送到所有分区上,这种策略涉及到了数据在全局的拷贝,因此非常消耗资源。 +* 广播(Broadcast): 将某份数据发送到所有分区上,这种策略涉及到了数据在全局的拷贝,因此非常消耗资源。 * 随机策略(Random):该策略将所有数据随机均匀地发送到多个分区上,以保证数据平均分配到不同分区上。该策略通常为了防止数据倾斜到某些分区,导致部分分区数据稀疏,另外一些分区数据拥堵。 \ No newline at end of file diff --git a/doc/ch-system-design/exercise-wordcount.md b/doc/ch-system-design/exercise-wordcount.md index 42f57b3..a381479 100644 --- a/doc/ch-system-design/exercise-wordcount.md +++ b/doc/ch-system-design/exercise-wordcount.md @@ -3,7 +3,7 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -12,19 +12,19 @@ ## 实验目的 -熟悉Flink开发环境,尝试对Flink WordCount程序进行简单的修改。 +熟悉 Flink 开发环境,尝试对 Flink WordCount 程序进行简单的修改。 ## 实验内容 -对Flink WordCount程序做一些修改。 +对 Flink WordCount 程序做一些修改。 ## 实验要求 -2.4章节展示了如何使用Flink的WordCount样例程序,如何调试和提交作业。在这基础上,你可以开始尝试: +2.4 章节展示了如何使用 Flink 的 WordCount 样例程序,如何调试和提交作业。在这基础上,你可以开始尝试: -1. 修改WordCount程序:2.4章节中的样例程序将输入按照空格隔开,真实世界中的文本通常包含各类标点符号,请修改代码,使你的程序不仅可以切分空格,也可以切分包括逗号、句号、冒号在内的标点符号(非单词字符),并统计词频。提示:可以使用正则表达式来判断哪些为非单词字符。 +1. 修改 WordCount 程序:2.4 章节中的样例程序将输入按照空格隔开,真实世界中的文本通常包含各类标点符号,请修改代码,使你的程序不仅可以切分空格,也可以切分包括逗号、句号、冒号在内的标点符号(非单词字符),并统计词频。提示:可以使用正则表达式来判断哪些为非单词字符。 -2. 使用Flink命令行工具提交该作业,并在集群监控看板上查看作业运行状态,Task Slot的数量。 +2. 使用 Flink 命令行工具提交该作业,并在集群监控看板上查看作业运行状态,Task Slot 的数量。 你可以使用《哈姆雷特》中的经典台词作为输入数据: @@ -37,17 +37,17 @@ The slings and arrows of outrageous fortune, Or to take arms against a sea of troubles, :::{tip} -我们可以在IntelliJ Idea的本地环境上进行本实验,无需启动一个Flink集群,执行环境的配置如下所示,打开相应链接也可以查看Flink Web UI。如果输入依赖了Kafka,需要提前启动Kafka集群,并向对应Topic里填充数据。 +我们可以在 IntelliJ Idea 的本地环境上进行本实验,无需启动一个 Flink 集群,执行环境的配置如下所示,打开相应链接也可以查看 Flink Web UI。如果输入依赖了 Kafka,需要提前启动 Kafka 集群,并向对应 Topic 里填充数据。 ::: ```java Configuration conf = new Configuration(); -// 访问http://localhost:8082 可以看到Flink Web UI +// 访问 http://localhost:8082 可以看到 Flink Web UI conf.setInteger(RestOptions.PORT, 8082); -// 创建本地执行环境,并行度为2 +// 创建本地执行环境,并行度为 2 StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(2, conf); ``` ## 实验报告 -将思路和代码整理成实验报告。实验报告中包括你的代码,不同输入数据集时的输出内容,Flink集群看板的运行截屏。 \ No newline at end of file +将思路和代码整理成实验报告。实验报告中包括你的代码,不同输入数据集时的输出内容,Flink 集群看板的运行截屏。 \ No newline at end of file diff --git a/doc/ch-system-design/flink-core.md b/doc/ch-system-design/flink-core.md index 3ce9061..6c22f31 100644 --- a/doc/ch-system-design/flink-core.md +++ b/doc/ch-system-design/flink-core.md @@ -3,114 +3,128 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -为了支持分布式运行,Flink跟其他大数据引擎一样,采用了主从(Master-Worker)架构。Flink运行时主要包括两个组件: +为了支持分布式运行,Flink 跟其他大数据引擎一样,采用了主从(Master-Worker)架构。Flink 运行时主要包括两个组件: -• Master是一个Flink作业的主进程。它起到了协调管理的作用。 +• Master 是一个 Flink 作业的主进程。它起到了协调管理的作用。 -• TaskManager,又被称为Worker或Slave,是执行计算任务的进程。它拥有CPU、内存等计算资源。Flink作业需要将计算任务分发到多个TaskManager上并行执行。 +• TaskManager,又被称为 Worker 或 Slave,是执行计算任务的进程。它拥有 CPU、内存等计算资源。Flink 作业需要将计算任务分发到多个 TaskManager 上并行执行。 -下面将从作业执行层面来分析Flink各个模块如何工作。 +下面将从作业执行层面来分析 Flink 各个模块如何工作。 -## Flink作业提交过程 +## Flink 作业提交过程 -Flink为适应不同的基础环境(Standalone集群、YARN、Kubernetes),在不断的迭代开发过程中已经逐渐形成了一个兼容性很强的架构。不同的基础环境对计算资源的管理方式略有不同,不过都大同小异,下图以Standalone集群为例,分析作业的分布式执行流程。Standalone模式指Flink独占该集群,集群上无其他任务。 +Flink 为适应不同的基础环境(Standalone 集群、YARN、Kubernetes),在不断的迭代开发过程中已经逐渐形成了一个兼容性很强的架构。不同的基础环境对计算资源的管理方式略有不同,不过都大同小异,{numref}`fig-standalone-arch` 以 Standalone 集群为例,分析作业的分布式执行流程。Standalone 模式指 Flink 独占该集群,集群上无其他任务。 -![Standalone模式下,Flink作业提交流程](./img/standalone-arch.png) +```{figure} ./img/standalone-arch.svg +--- +name: fig-standalone-arch +width: 80% +align: center +--- +Standalone 模式下,Flink 作业提交流程 +``` -在一个作业提交前,Master和TaskManager等进程需要先被启动。我们可以在Flink主目录中执行脚本来启动这些进程:`bin/start-cluster.sh`。Master和TaskManager被启动后,TaskManager需要将自己注册给Master中的ResourceManager。这个初始化和资源注册过程发生在单个作业提交前,我们称之为第0步。 +在一个作业提交前,Master 和 TaskManager 等进程需要先被启动。我们可以在 Flink 主目录中执行脚本来启动这些进程:`bin/start-cluster.sh`。Master 和 TaskManager 被启动后,TaskManager 需要将自己注册给 Master 中的 ResourceManager。这个初始化和资源注册过程发生在单个作业提交前,我们称之为第 0 步。 -接下来我们根据上图,逐步分析一个Flink作业如何被提交: +接下来我们根据上图,逐步分析一个 Flink 作业如何被提交: -1. 用户编写应用程序代码,并通过Flink客户端(Client)提交作业。程序一般为Java或Scala语言,调用Flink API,构建逻辑视角数据流图。代码和相关配置文件被编译打包,被提交到Master的Dispatcher,形成一个应用作业(Application)。 +1. 用户编写应用程序代码,并通过 Flink 客户端(Client)提交作业。程序一般为 Java 或 Scala 语言,调用 Flink API,构建逻辑视角数据流图。代码和相关配置文件被编译打包,被提交到 Master 的 Dispatcher,形成一个应用作业(Application)。 -2. Dispatcher接收到这个作业,启动JobManager,这个JobManager会负责本次作业的各项协调工作。 +2. Dispatcher 接收到这个作业,启动 JobManager,这个 JobManager 会负责本次作业的各项协调工作。 -3. JobManager向ResourceManager申请本次作业所需资源。 +3. JobManager 向 ResourceManager 申请本次作业所需资源。 -4. 由于在第0步中TaskManager已经向ResourceManager中注册了资源,这时闲置的TaskManager会被反馈给JobManager。 +4. 由于在第 0 步中 TaskManager 已经向 ResourceManager 中注册了资源,这时闲置的 TaskManager 会被反馈给 JobManager。 -5. JobManager将用户作业中的逻辑视图转化为图所示的并行化的物理执行图,将计算任务分发部署到多个TaskManager上。至此,一个Flink作业就开始执行了。 +5. JobManager 将用户作业中的逻辑视图转化为图所示的并行化的物理执行图,将计算任务分发部署到多个 TaskManager 上。至此,一个 Flink 作业就开始执行了。 -TaskManager在执行计算任务过程中可能会与其他TaskManager交换数据,会使用图中的一些数据交换策略。同时,TaskManager也会将一些任务状态信息会反馈给JobManager,这些信息包括任务启动、运行或终止的状态,快照的元数据等。 +TaskManager 在执行计算任务过程中可能会与其他 TaskManager 交换数据,会使用图中的一些数据交换策略。同时,TaskManager 也会将一些任务状态信息会反馈给 JobManager,这些信息包括任务启动、运行或终止的状态,快照的元数据等。 -## Flink核心组件 +## Flink 核心组件 有了这个作业提交流程,我们对各组件的功能应该有了更全面的认识,接下来我们再对涉及到的各个组件进行更为详细的介绍。 ### Client -用户一般使用客户端(Client)提交作业,比如Flink主目录下的`bin`目录中提供的命令行工具。Client会对用户提交的Flink程序进行预处理,并把作业提交到Flink集群上。Client提交作业时需要配置一些必要的参数,比如使用Standalone集群还是YARN集群等。整个作业被打成了Jar包,DataStream API被转换成了`JobGraph`,`JobGraph`是一种类似逻辑视图。 +用户一般使用客户端(Client)提交作业,比如 Flink 主目录下的 `bin` 目录中提供的命令行工具。Client 会对用户提交的 Flink 程序进行预处理,并把作业提交到 Flink 集群上。Client 提交作业时需要配置一些必要的参数,比如使用 Standalone 集群还是 YARN 集群等。整个作业被打成了 Jar 包,DataStream API 被转换成了 `JobGraph`,`JobGraph` 是一种类似逻辑视图。 ### Dispatcher -Dispatcher可以接收多个作业,每接收一个作业,Dispatcher都会为这个作业分配一个JobManager。Dispatcher对外提供一个REST式的接口,以HTTP的形式来对外提供服务。 +Dispatcher 可以接收多个作业,每接收一个作业,Dispatcher 都会为这个作业分配一个 JobManager。Dispatcher 对外提供一个 REST 式的接口,以 HTTP 的形式来对外提供服务。 ### JobManager -JobManager是单个Flink作业的协调者,一个作业会有一个JobManager来负责。JobManager会将Client提交的JobGraph转化为ExceutionGraph,ExecutionGraph是类似并行的物理执行图。JobManager会向ResourceManager申请必要的资源,当获取足够的资源后,JobManager将ExecutionGraph以及具体的计算任务分发部署到多个TaskManager上。同时,JobManager还负责管理多个TaskManager,这包括:收集作业的状态信息,生成检查点,必要时进行故障恢复等问题。 -早期,Flink Master被命名为JobManager,负责绝大多数Master进程的工作。随着迭代和开发,出现了名为JobMaster的组件,JobMaster负责单个作业的执行。本书中,我们仍然使用JobManager的概念,表示负责单个作业的组件。一些Flink文档也可能使用JobMaster的概念,读者可以将JobMaster等同于JobManager看待。 +JobManager 是单个 Flink 作业的协调者,一个作业会有一个 JobManager 来负责。JobManager 会将 Client 提交的 JobGraph 转化为 ExceutionGraph,ExecutionGraph 是类似并行的物理执行图。JobManager 会向 ResourceManager 申请必要的资源,当获取足够的资源后,JobManager 将 ExecutionGraph 以及具体的计算任务分发部署到多个 TaskManager 上。同时,JobManager 还负责管理多个 TaskManager,这包括:收集作业的状态信息,生成检查点,必要时进行故障恢复等问题。 +早期,Flink Master 被命名为 JobManager,负责绝大多数 Master 进程的工作。随着迭代和开发,出现了名为 JobMaster 的组件,JobMaster 负责单个作业的执行。本书中,我们仍然使用 JobManager 的概念,表示负责单个作业的组件。一些 Flink 文档也可能使用 JobMaster 的概念,读者可以将 JobMaster 等同于 JobManager 看待。 ### ResourceManager -如前文所说,Flink现在可以部署在Standalone、YARN或Kubernetes等环境上,不同环境中对计算资源的管理模式略有不同,Flink使用一个名为ResourceManager的模块来统一处理资源分配上的问题。在Flink中,计算资源的基本单位是TaskManager上的任务槽位(Task Slot,简称槽位Slot)。ResourceManager的职责主要是从YARN等资源提供方获取计算资源,当JobManager有计算需求时,将空闲的Slot分配给JobManager。当计算任务结束时,ResourceManager还会重新收回这些Slot。 +如前文所说,Flink 现在可以部署在 Standalone、YARN 或 Kubernetes 等环境上,不同环境中对计算资源的管理模式略有不同,Flink 使用一个名为 ResourceManager 的模块来统一处理资源分配上的问题。在 Flink 中,计算资源的基本单位是 TaskManager 上的任务槽位(Task Slot,简称槽位 Slot)。ResourceManager 的职责主要是从 YARN 等资源提供方获取计算资源,当 JobManager 有计算需求时,将空闲的 Slot 分配给 JobManager。当计算任务结束时,ResourceManager 还会重新收回这些 Slot。 ### TaskManager -TaskManager是实际负责执行计算的节点。一般地,一个Flink作业是分布在多个TaskManager上执行的,单个TaskManager上提供一定量的Slot。一个TaskManager启动后,相关Slot信息会被注册到ResourceManager中。当某个Flink作业提交后,ResourceManager会将空闲的Slot提供给JobManager。JobManager获取到空闲Slot信息后会将具体的计算任务部署到该Slot之上,任务开始在这些Slot上执行。在执行过程,由于要进行数据交换,TaskManager还要和其他TaskManager进行必要的数据通信。 +TaskManager 是实际负责执行计算的节点。一般地,一个 Flink 作业是分布在多个 TaskManager 上执行的,单个 TaskManager 上提供一定量的 Slot。一个 TaskManager 启动后,相关 Slot 信息会被注册到 ResourceManager 中。当某个 Flink 作业提交后,ResourceManager 会将空闲的 Slot 提供给 JobManager。JobManager 获取到空闲 Slot 信息后会将具体的计算任务部署到该 Slot 之上,任务开始在这些 Slot 上执行。在执行过程,由于要进行数据交换,TaskManager 还要和其他 TaskManager 进行必要的数据通信。 -总之,TaskManager负责具体计算任务的执行,启动时它会将Slot资源向ResourceManager注册。 +总之,TaskManager 负责具体计算任务的执行,启动时它会将 Slot 资源向 ResourceManager 注册。 -## Flink组件栈 +## Flink 组件栈 -了解Flink的主从架构、作业提交以及核心组件等知识后,我们再从更宏观的角度来对Flink的组件栈分层剖析。如下图所示,Flink的组件栈分为四层:部署层、运行时层、API层和上层工具。 +了解 Flink 的主从架构、作业提交以及核心组件等知识后,我们再从更宏观的角度来对 Flink 的组件栈分层剖析。如 {numref}`fig-flink-component` 所示,Flink 的组件栈分为四层:部署层、运行时层、API 层和上层工具。 -![Flink组件栈](./img/flink-component.png) +```{figure} ./img/flink-component.svg +--- +name: fig-flink-component +width: 80% +align: center +--- +Flink 组件栈 +``` ### 部署层 -Flink支持多种部署方式,可以部署在单机(Local)、集群(Cluster),以及云(Cloud)上。 +Flink 支持多种部署方式,可以部署在单机 (Local)、集群 (Cluster),以及云(Cloud)上。 -* Local模式 +* Local 模式 -Local模式有两种不同的方式,一种是单节点(SingleNode),一种是单虚拟机(SingleJVM)。 +Local 模式有两种不同的方式,一种是单节点(SingleNode),一种是单虚拟机(SingleJVM)。 -Local-SingleJVM模式大多是开发和测试时使用的部署方式,该模式下JobManager和TaskManager都在同一个JVM里。 +Local-SingleJVM 模式大多是开发和测试时使用的部署方式,该模式下 JobManager 和 TaskManager 都在同一个 JVM 里。 -Local-SingleNode模式下,JobManager和TaskManager等所有角色都运行在一台机器上,虽然是按照分布式集群架构进行部署,但是集群的节点只有1个。该模式大多是在测试或者IoT设备上进行部署时使用。 +Local-SingleNode 模式下,JobManager 和 TaskManager 等所有角色都运行在一台机器上,虽然是按照分布式集群架构进行部署,但是集群的节点只有 1 个。该模式大多是在测试或者 IoT 设备上进行部署时使用。 -* Cluster模式 +* Cluster 模式 -Flink作业投入到生产环境下一般使用Cluster模式,可以是Standalone的独立集群,也可以是YARN或Kubernetes集群。 +Flink 作业投入到生产环境下一般使用 Cluster 模式,可以是 Standalone 的独立集群,也可以是 YARN 或 Kubernetes 集群。 -对于一个Standalone集群,我们需要在配置文件中配置好JobManager和TaskManager对应的机器,然后使用Flink主目录下的脚本启动一个Standalone集群。我们将在9.1.1详细介绍如何部署一个Flink Standalone集群。Standalone集群上只运行Flink作业。除了Flink,绝大多数企业的生产环境运行着包括MapReduce、Spark等各种各样的计算任务,一般都会使用YARN或Kubernetes等方式对计算资源进行管理和调度。Flink目前已经支持了YARN、Mesos以及Kubernetes,开发者提交作业的方式变得越来越简单。 +对于一个 Standalone 集群,我们需要在配置文件中配置好 JobManager 和 TaskManager 对应的机器,然后使用 Flink 主目录下的脚本启动一个 Standalone 集群。我们将在 9.1.1 详细介绍如何部署一个 Flink Standalone 集群。Standalone 集群上只运行 Flink 作业。除了 Flink,绝大多数企业的生产环境运行着包括 MapReduce、Spark 等各种各样的计算任务,一般都会使用 YARN 或 Kubernetes 等方式对计算资源进行管理和调度。Flink 目前已经支持了 YARN、Mesos 以及 Kubernetes,开发者提交作业的方式变得越来越简单。 -* Cloud模式 +* Cloud 模式 -Flink也可以部署在各大云平台上,包括Amazon、Google和阿里云。 +Flink 也可以部署在各大云平台上,包括 Amazon、Google 和阿里云。 ### 运行时层 -运行时(Runtime)层为Flink各类计算提供了实现。这一层读本章提到的分布式执行进行了支持。Flink Runtime层是Flink最底层也是最核心的组件。 +运行时(Runtime)层为 Flink 各类计算提供了实现。这一层读本章提到的分布式执行进行了支持。Flink Runtime 层是 Flink 最底层也是最核心的组件。 -### API层 +### API 层 -API层主要实现了流处理DataStream API和批处理DataSet API。目前,DataStream API针对有界和无界数据流,DataSet API针对有界数据集。用户可以使用这两大API进行数据处理,包括转换(Transformation)、连接(Join)、聚合(Aggregation)、窗口(Window)以及状态(State)的计算。 +API 层主要实现了流处理 DataStream API 和批处理 DataSet API。目前,DataStream API 针对有界和无界数据流,DataSet API 针对有界数据集。用户可以使用这两大 API 进行数据处理,包括转换(Transformation)、连接(Join)、聚合(Aggregation)、窗口(Window)以及状态(State)的计算。 ### 上层工具 -在DataStream和DataSet两大API之上,Flink还提供了更丰富的工具,包括: +在 DataStream 和 DataSet 两大 API 之上,Flink 还提供了更丰富的工具,包括: * 面向流处理的:复杂事件处理(Complex Event Process,CEP)。 * 面向批处理的:机器学习计算库(Machine Learning, ML)、图计算库(Graph Processing, Gelly)。 -* 面向SQL用户的Table API和SQL。数据被转换成了关系型数据库式的表,每个表拥有一个表模式(Schema),用户可以像操作表那样操作流式数据,例如可以使用SELECT、JOIN、GROUP BY等操作。 +* 面向 SQL 用户的 Table API 和 SQL。数据被转换成了关系型数据库式的表,每个表拥有一个表模式(Schema),用户可以像操作表那样操作流式数据,例如可以使用 SELECT、JOIN、GROUP BY 等操作。 -* 针对Python用户推出的PyFlink,方便Python社区使用Flink。目前,PyFlink主要基于Java的Table API之上。 \ No newline at end of file +* 针对 Python 用户推出的 PyFlink,方便 Python 社区使用 Flink。目前,PyFlink 主要基于 Java 的 Table API 之上。 \ No newline at end of file diff --git a/doc/ch-system-design/img/code.png b/doc/ch-system-design/img/code.png index 4018d82797ad9a99ee00323e2e33e4899d67f720..9d22cbc5e03d6bed855c0f173926c5e0be1c2f67 100644 GIT binary patch literal 53743 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 Gq5liG2#*K= literal 138903 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

&kOlDL$|;iGIN zBdchD3Yyc|xej+T2-?mIpLRSL#nm$Zypn~8H_#eOOLp2N-2I41KcPI9(c{n|J5lV! zMS9u{D)&4&`IEwo)?FLqq4V>@bSWhkku2UjIE?pUtvbHc7(se&O;g$2yZC2ho0Q>J zhE^4JTo2X2kqFukLc_xrA3BD~eWjbZO6VHU(XD$yVnL*}`b#g?V`)rRcI)~|@a=7@ zwMHXnnY8faVoh)Ps$a~{G24k;+z%boF5H)Ko$tANaJbzRH(&)A{0%__mHa*Z*8_3S zxB62TqIF|vbLdawFHX*xqTif5c+QMg)h_~XC;98XSUjLp>vK-oo4Cu)qz@;##5x8?z$9!uGhP%t9|NM7xr&%w{mn;Jr! z95)6tV&(g&7%$tP-$;pQjJ$=zS!Ip1BlAb?6@(d2Mfv;*F`5^f*a@d#5P7RnpqUU( z+%?)v+;`UEMdVp}{l zodph^k$lUOkTOGc8!jsZiAqjpRc&FfKk(nAm~!d1?|*u(0cl zY-J=YL=YF3F?JcR{6Q~?s$Z4WZQxQPS-+qlKXsB^Z2%mIC)?+$S26J?GyvUGBW0%vI*`S3XKiM;&3C`8V0Y~3Z^Tjc!iWd%V956%?r_WgXbbMD z)wCP?_3Kv!dw&*!x#V5~;iQt;M7sy#W2vc^Yd3dybmJYdihNpgb5lj5cG_?MB5$c# zoYEwj-PB;#XxBA&EdNGIO3JR}(cDpdIIMq_-Izv1ntkIA?r?ujGHLv{Y~R85#7Y$T z*`zGK2`AYs_#8<&(pJxgM*`Z z2YX4)JdiUqPl|cUW38J8Q=BiA&>mTf{p_{ln1j!$E#*@LIOZ{xa`WI<&3VN0b#?AM zXK?P&XuYE)ay=k0F#p}Vp6|ELP*RG0>(uP}MG5Zw;nxZ2AkxLb#W|=OzF=5_;)Hn( zdw*`Bk6b-F`p3ny!U}FGwmDfBJ25!KE;$G?ihqQg&uI+w7X;9jBFm3s77eKED8FcS zst?x3W5YG4f)FCATkA*YHefVw=9%mgTM^tE7Z^b4Gb2gaoq*!4M<8R;O-4p{NdBAyF@Q$yjlS-5CdX&eB2b*StBni&eL&XCnKAW7K zX)8W#n~jZ)wFg_HVf9s=Pm@adS62>~S1L?ClQEC}`QhB%`JKQ0iT7&S(N0?H_~@{L z!pO$ojyZMJ@nZKIDz!_2Bns}Ew4bB{77F4P_Z!$2`UUth6pi#P&~HY`C@F^$g{(vC zU44CzLT}x<#@wlpw!bxMPwzf4tO*OuW+;(U+<0zG`!&uiL>vFB{7Vvzq`};Z&rChA z1==*9J_Fq|scCa7$!GJIXiA=imePYli8h1tT1)Tgso6!El@aGFl}s6w9FOEY9g;~* zkzQM))#URh8P1O<{Y!Trww^PMv!@_Pelspp2tel0M4@x2C8cmDCntqA)a3CK zfvp<_G~M|b=`sPsuXHO}K4MsMU!g_jT zu_$cONk~#iHz=5XW02g8_+32fv0* z$iqUD!jD%sM6J0Tj5@PM-L80S%LA9YNd3E{&aPbx$tO+~54suaw+OjE(;PHbvUa*QlJ&Sm_-Qm z7t~M~pve@xi&B&OI=TtV|8=5UkA7&DLrCHWTy1i3Dm%>DIX3cQp0IL1VVHOZ$NZQY z>a$5|pUoDX*a57iv|(^@x3Ump+st%l$WZO#Y+knWqb9GPp&q0%$YUzm%BT74?9)QY zZgG$(EvFpH$Jjpe!{fk<`)eq^cfE7BTbL&?oET+iZ}CJQIdNfhx6;EB2V0aFKJA1o zXIOw`zRmAm-ZaSqK=;TN)jS##9oyG#x~}!7Hyy`ZlgwM9n;V+-a7j$3goZ*ZG5k3# z6m@SyJJHm-f@_+LXDmEUs%(-i3AZIUSA)7JFa&VSGPWK&MCGL{b&J{p6a$!U%UGN zGa7a}Ci0>sI;x{?sg(qlwP*YS7OJr>3`3lzrY6oj)%^iCH#gAF4t#Y-UWPQh%Jy|E zZ0+!CR|C6X>N%DL@Pos3Y+_%t{`_yo!3!nHL-T)M*fqJQpLbg`9UNb^xc^n3CKPW14NDBVH6l{O1X$+xvL%;`_!&tZ z+?5+V?m{V#1U5NECa_! zPgFF+^ORdz2HuQjt~^q2pr96x4=1iJ6c6H1SM4osA$j%9Q=$#{yUiVX8g?kfl#gco z=|*7uzP>T-{XY#RR1s%Fr9!m++-?={W{bppH}y{vHmvgf2%! z98l_28FVWu;eNOrc#-Vx%}W~A<-X~MN*c@-nCS4_oU=EsarMB8%}gz215$`%IT)g+(YeSNf0sMu zIpUWbz)e;a#+$>{4f{OhL$%VgcX;9Oyvn``uL*7&hIy z+wymb8gWzA;(PpTazXNR*x$!Ou-#eTzA1Rma2lzotH%)7QD^q18s+n?m++k-_}Giq z{BX@|wg(mvypW0#YBAt_c}y4T-IuUBYa6Su4NJojqK~(%6@^k@;W&^Ty_rwv2}L)@ zXPJNn+-CxOT(-Y+Dlv_&h}j(K=xgi8iH8;{p_VUwFW*7U$|=s@f??2qKkFp05V6-W z&~f_%iZ2t`RO}??`OTtz?+?I_4SomogiFGRl)rfo~JhtxC1U_g5J5AQ~ zwr(=?Dv&FUyjoj&1>CM)*)J_Zle@iVa`pShpOYwurR&#iJ(lkTc-1%Lt~2)Jvu<_2 zFlBPE<>|**9p!msv);FGbjcuyxTU>(cc(}2aa695k}3UkpVIS4nH7IoD9+8}nN8K;rJUvw(7qXciDcU)x^}{OO}k;jk89Bt_}BoDSj` z7#GM&qRHVD{4#-I*pCGY$j&gi7%HxYHJ3_)h#%hL=j(Lv>D$T7lHxb~s8kewd$FPtUy8Dh)TQgdA?0*oYnL<5}-9_vq1RDXSp73LksFnEQs zipnBRls1v4>D=arJeE6@?9fkHY;6$)LKf0Ygriz|gXre@(-~rn5FV4q(v#p34>{FWB{iZpzKRV%99A-eB3x^{So4uziJkERXAt%LN&y_#56MT1cClCoi>);D zAh2RFnE3Ex&3=+bJ{iXOfiI?N8~xBs)pTPA%pNngd*mq{)W97*S3V0^cul$;aVkC5 zFfc~}pt_p#kVeD&&QtIl6Mkd1vzDj&`T}G*0MgXWB_XEKY7{=0TjzTp_HKGfdS`YX zVmCV!A`pBL!~^ugWDKw+_?-nMSb5`MJ+{{j)+&JclwvCh_Y`xGW%%3COQ)zXf-$%p zW@!EnEcnASACFB7a#)3PU2lm*D#1SFqTbBi+>9;PZe*7}Y#hg@G5RSF3X9|qg%2RN ztI<(7`pE^^z4udASSbanxX-%H3fee%Gc`ZXEx|9!d^Jm&I!Y<4&yz15KszC~;>AfI zfnd!!Ckce~nUJV~G0A%=EB6s=(9IS~L2C`9|0r~m*6~+p`#`m}`KK=`K-OxRVY*ah zlI%CIhObW1M|=`X_%{8JwM_>DUO3_zsL)1)%2`_updP5)u(VW)I(Fc#2xphQIF6V< z&wy(|R>l~Hq4{Tnd%aRrh0WtA0{h=HYqOs@Z*n~X*3=SXgLpX+viF0H(VJ0OtfH@Q znUey#QPEjgc=)r-V9A4k;yu|6+L{w1{*)PyScczyI8`> z%i9fc)Y;;w-DAhY(^8g#h9sr)m(5aMQI>pCGniiQ86hubNk`JJ)jR*J+Vv)kfYLbbs&=7Dd8tCJvmBd4auHq&h`;bk5x zDG5|YD*BtCc5@rDrC;9N0gB}oBZ<}xz&bWj;~bVZ8A(vdEk6n9wArTeuW9B-zjN20 zMIeR)T_w5ja`wm^$z;vL`s14vp$lJV7rbO-AQs{Y1g2hOZQh(spIeZofiBT@uubsgVD2A>Gb1DHpk9K-<;$>zgxEz5&+@6;j&Q1*X zx31vB8?GvP<51(y8~V}p^|vcumv#}jzr9q`ns^B=lmI<+iluo`PsJ~#-8+gyJ9F@U zO)eW=(f6M33-Jcz)Tbmsi=X=Gr#xIuToRg*0q8}gx$gngNUu;Jf#g|=0mkihl*va7 zAP4A!gHJO&kkV`VO79U9eVLibepb@e1prl4mT7jO`-YDA_77*>8mH{wkPv9?^O1%d zSg1hr1}srg=7W%27^Rk*#g#UR$rAlsg1Yrk561iC+?(jfM+^}HgQAGKBw5Z~stVfI zLXxp2A2hxxhxI}qT}j_Yh>^tM5?jabqs!D;{DU?AZ&5~O*JTKRDm_TG&m5FnSXuS` z{1`NV|7d{qD-hEe%>NMS$o+6C+(N7L3b!uOt1%k01n1yWGR*37W$lF)WeC}fN8od0 zQS*`;`+3?Wa?tu8>(%$n-FMHceMG6j0=Az&-<g3Wc6(ohLLzP2ic}i8`ct~0unIw}v1e67R zji3`UNY)H3uv^y9+kOq;5til*w49<~Cm>@Zl87Jy=v_l02i?5#zcr^%QIbO^^dziX zSyZq~Sf~=az$^4b>=T33)P}78-cB$-(PLmhxG?n7NxTZ*$39*fzc~&uP;G=J?Yh2B z{qic3^Uub{BM*}okoql+-M%64m>sx%A%06WG`6urRynl4xhMV~FgSKeSYyt-2jzI< z>Rq4U2#SGWj$(5W4rGH`13H}BaMvA7rmgzUx3CV=ydeHD26>N!-gMt0}8CfYU;XBN-zbbCPG}Z$3M0_bq*=j zvv=+ADy!$}6-k>bMZI?`l+q+@(XB#zLB4-U@#mg?Iy#&<8pRxkqGKo0AtL7AT{>Dw(U? z*NQoB9?4=*xY*ZcBQeE!?!tx4_)FVAv`8r!dY%!JDzsHU1=>W2@n<4AIXP_!rT!R1 zAZcCyYW8{mjE~Q$&QF`ycey?&sb32=bf2L@c*CZ{#iqpY$+J*Z4vYzBWS`cV`$Cod zNoT{Q^uX;FZ@USa;*gB|ESu(|N5<%u(C_aaKPQ|NXwi_Mlo0}<2cUGb(!Vtwa-o&; zpLWn7%HZVpSRQhF6&|jMsaU7U49)8*s&ABuia}5%N%<8(%+Q1W2S7+Dy8c6oksLp6 z@v|iWXIfnW!j8)AGkL~7{;rlN^yX(LaOgL;M{?%d{q8@#*G;e=?8JZdzYjr~`LLo% ze@}S;Sl>6`GRA0%rymYYXEs+ampf064uR(NUuhuCvGg3_eD#?R=y4!sm$N{&hM1k7 z-4&FyKwwhQnm9Qmps)W;J!Rsn_M8QhrpPvJ4}!@k&r_bOeLuf?MF@KaDzHAxMdL1^ z_nX$x2!Rj5i$hwZmS~>Qjac~UgAGumhl@r&vpFzQ<*4>;-U~f+LEa{>Ygm?NfF{B5fpnrz~;SYj_ z`h-|y$tcZ~ytITjX{#{gpw{|ULnsZuz#K<&nJ#zv@EmzWcoL+a2Z{q;=h7MW^bP*b zbXUisne1{a@rSO;DJ#1zQp5v&qEFB#5T8IXz4P94(a_RL3jag2B);{WG~`&Fg#5b$ z0lO7i2p)D;0G$_>mv60&FO7jn#n=~LM^tXJ;5InksZDCU9DlpjJ2?+6$@RiCtstp* zy{?AuWzEpoSkcmGRZ_vaXCO4Kn0<}x@pZ?_zn%YG^0U`*lYFfri5V1%lf->}eKD!2 z#hppQVhYSzd1G1_-p5Fnk^b#<-k!{ax5q$oRgPN`~5yz?gp^_R5! z?83e0JP}y$P;A;P)8S7h455#e+o|iE#ey%zWrGPIu|o zcT(r~_7jKCj+Pe}lQtiGQEzC|p1XVux47>JSw{jK#w#m`$wxanI+|&>_SJ(g(C9^Q z=*szT=OBNRhdttIPTroly602w9%*6Ge<-{H7ohg?{(ah*0(o82>*0=RPu!j)o2JqK z+59uuGyj5c$-#8Rm+XGuhET+?&5JV;-;ZVwytGkcjDL4WA}l{<_V0v$LUg!tXjAmd zx_JVDpOL8AB!rq%Afv_beR-KIHpbe z9{hTj!F;d6(YBZ{<}bRsH>6~Z!6;CAFYfBNd$&H;e>F0qJ2N-uJH35dTwF+0H1FLz zzA@JcZ-JX9GzB*-=2ny~fn1sCR_1Hii8qt_Xu3O4zG8uWoY7e3l1dPH*O7i8($;ve zWWVUzw3kA-)Eqk8;92FeGF}ABprw5K&!@urHo%1Sw`&Bx8MwK7SeTfsjTp_FY8PpW z?@UMIgfH+IFW3#Ih`CygzPBBz#V%?z4Ssr|7&Sf9{;_7cr30@vRW34E6MT5+GcYh< z`Q+0dnyC7za4`(DzVZBiwEWR+)yg;dA4kXK1Q9wvGbAjTPC&~}qv3FO5w5OevoPD8 zCv@*=R#(%0Vru`6-G`129|ig*FCWsjJH$`I!7aS^Mkj7D5?5c_+gei7(HYJ;{DD(U zs<0h>uhYSA8C@?f!tX?LIZkp>Hc2tHe6?n8Z%=??D!6{N<+PQR)oy>Mqx zwMU6;Qp266xz0?NFRyqnJCL8I;puM)IIY-*D*h77Fm>uOrwxoqBroaVW`45!h~{s;*RjFSQ( z&?K|%MB{;Jldx7;#EtRP%XDee`ETpulPlWs_~-sa4>~t5&3n7=M!b^6-FKq75Pi$t zlfQ>3-jm5SG^wMt?V>$zw@%9L#c(sHzE(^cpB=0--rBoVUj; zQTtYO(7#9muje~WcglI}Z~U*RsqCL09PxD|&QCy%)Hq(abIf^bWugRBnO^gY<)SBc z|ALe1Txbzj7_mu=PmZB99m^T1cQ0?;9VqD<{;b_R;N8#Pb$`kwYE5+Mt5Z9> z4k~A7e~&ll2?+@?{T;E1cqTCp5Ax^FDST3dD4&F#ByNXqQ1s%zpjxs*CNKa`va*;R zp8ELTlRUA}KWx;$_(Jr0Yja-HPA|Vw=#LNmbKkVL3DAbUc=oI@`o!eTaok}sph|6dIj6)Ny}J1QNOs-!Rjj0l0!5}JbtthL}+b`x#G)29Jqwo~ZY}Ig96?#3_V7yGkTMmqql8Ixui4&Dr5fn;^>B z9P&F7=A@AOlJ4feubjY~`SuK&Ch(q|EU($_7zgI@^TA~=U%pJofJ1H!=b}tg{*%HP z^5CXi-<6~KB?aY(KYfOb0&nGoBuiDu-4H=+ZO)uIy#=LlE@8}1v`6yEQSwLsOYpiW zV|A`#3R9+X+OJElU%xIScoT{#kOP9(d2QIZ@ zd?^A>ob;n~sF)36k$&-=_v|KlDErs*PXGX`O!#>h#jT#@Av0NqkdR3ecyUO)xXL?GV%>-m<78{-hRHNiAZY@->vPM{Xj-$U}y-qDryQ6eU&Hi2gg*DCtjOe z^9NdrYayX{y@q{WuC=XgbMiT5BIpciAp};suRq1}OQ@>HHvs`8cuV3clRYoqkuSt! zH*jWYrd=_GA`pRyG#Bie?(|C&f11H=jz~`Bbu&1y@xK8PIWPHHt)T(2+_xwu5>kgM z0n|421v{g&N$819>?Vbr$BICZwN8~?O7FJsdZ)1Biodd;_~2&WZ!C7q`?-F%!<~OG z`TC9#C}Q(7J)s-$t*k4RNLE${y!-9>j7xKsQ~%0_;bNK`rjeR)OrNPlwN7Y zT->Kp#uK3?eR79svYQJ#NSf8c+B>igabHHVeWQY1?@8vrM7GnN;!CWX#s zina}8r#3Y7S=5Y){8+L9p1FtFZlQhiyAo`Hlf?T5x&E{H)Q>MoUCt-C`@zZrfD%c0R%4|M)LPCiCdWlG3h(bt_)5uFK}|@)Y&vCSwW6UJ z^%)8@hfA`(AK<1CtsZZ3iwD0y{;mDkd=rH83b#Kd8X6i2<2KbVAqsSVS$x8(%c3$@ zm)|vhca!3bvTv8eKd%ZSY5%#vcu5n4>7h$gCYcDNu(`W3GEHF%U_f&6ZDchACNu!VGYk z#(^5bSh*-C)f?1)$^9q6f%2X|E$PU!EMsaa!(UU7ailu}+0k_{bVfAh3sS7I&#hHI zOj+@;qFciHxGel&*t=!({Yt?=J~Gb{A+eiF=nT3r(&XDTSZq)rwoJ1N&xlm{5DBQs+wmWtThmblgRkdAM$=vOm9*Cof@Xq0t>%ESB)@LVWw1@-9~qcE z68}738V5!Vaz?qZ(<)Eqe=CDZw(Cj$38>1&HONz7&?LUtezv76MJzV$Kk6{F`&t&k z0L7+aU{C}_nf200B|Op5#?a~0r_Fzh1BZnF^1V8rUaXRxS#{h{-^%sA7YC4sK2Kxl zMm+{bC2hcdADMXvfdu*D2kErafnYo#PMv(yG=3GSvrq(my=LeQ=_}V|}QxjhTpr=|7#1-d%*%NEi_H`wufb~y-oCvvT4k>Vq93+H z8(rOz(8lcz?KUCuxE_c_3$04r2~3$NNqgub@FVO8y2IIIU|i^J;NWH8?Gc@{y2?=T zej$4R$sW>_40V^K{w#BXV4@KMzDAU-QA9_d*1z^!8?TbwC3%3CgyP0XcnlK_&DN(n zuncd^+K>%1Xpq7|dUDUMw{_ZZqkEVKW z>EIoWzd+qlaIm*skdq^GD@hT7*3RAHIZ(V1W|Qm>zf2^wlk`li1WNyj%5v`CQCc#= zCVA`yVWsTqpho}xg&RhnHI5F9Rs+~W_N2~R-d(dNgM))F($R51j4CdM zCeS2muuvy6j9%DkeYTV1#tjvH{U0)i-)vrnoKgQ-ZxK6Ckymcsvr*iv0m5z-L{oVq z4L#9|kn%BWH#1{krs-GN1Avv#*(`XZKbU*Rm#K*3A@E!d+6834X(*J8rmwvguv+@9 z(#!sRDk?H7Hm>`5-g=4})b9|rD)X43sytgYZZfBN`2q|zECo-;A137>)rWEjm1z}EJd-nyC>*fJm-LMjJ#WG_c)nj zQLO*_h$+(MQ_J3(!Y6)~#bt^VwK4hXtEi}W>@8Ixt(c%e9$8i8BR*wMvGnNdO*%SS zI56Bb8jlpFmiX)92OD^g{XcDrZO@3m*Er{-`X0J_Z`Vx>7`TpQLoxl2Y1s=12q@ng zUytVgDjU`_ymlS%WWqSr-%wn!RFMw!N6#SMq6_XF%RrxTfo4HSe8rW?YjxK)SB~`q$oeI>7+Au)p<-2<+AOa^&dy zhsAQcxs?%bhUW7}`IlsaiteZKt>)Dsn}9sxUR&1)@5or~?O_C0$ffC}W;8xK$0#Oq z;gb%7q*e~_itx+Nn3xDEYHFN8oeRXOw7hpee)P{7sjIV4Mr=Q2{a%YLh>Bj?9JLX? zQ>OMYHjOrWovPEyZbhI$-XS17r64vZCrF~|n`0Z=>nxH}Y+>-rEayS)Uz1FjdV{CW zxpbL!sLtFPnatFSb5uE7t(s;O$)QY1+2Hx+X^B9!`e-r4-Ld4fx6|>jt$pvJ9Ha`! zF2r79EOhPe&-Zos1d@Z`uGG7Xl14c&JXoZC$#scWB;^~$R!ev zRB_IB_9C7|b|vN!pGa+$e7?|4bTO}C8sN)G^%kl9jcoe9{*mF5XoY~8)$tp7Z_*;- z8ZlCd1a>7}5fSZIuU@UKPaVJDAY)W}Rq;Y}v+l5=EHbHuHMOg!&U%p)?)(`y=xxlwwY_$jS0d5AJXSZygExw$JnHNj80Q<;jghxs9>2_U$H_3y45p-V%D4#rqNT%dxFOBmoz?~93S^%L@{ z5flPX%r36VdHOtHg7heP#ec`#wzO9mtKq;SK1Uk~!$!^;I4I6=Z8{?1&)GPH_yqGo z)lGGA(iGig{vP=3BEtq<$=%+F4MJV?R8l;O9 zZu`FM5f=a_5-_oZ#$>4aNEnV(N1-QZ|0%IxS`rBXwct{aHK5zC1Cc<jB}S=UWrb9UA@0o_E#*NZq5)bDD>z-W$!CLYG6 zdBn7O3n8V~@~{p5q>(scSxF=7csg~1Sqn(pnkPfHD4O4d)YTe6*v%FW{B!v^pnhDvWVO~a>5V`wf?IPY$Uk-*-K$|ak`&+HB zU)|o<5qH4Ny>OYrfEmBgI=p22#xu?6 z=*@}vqqi5E6M8QQq47tS8~7yzmcIgn3y9V!yj3O=`F|;Sz{{ z{O&)AcYLY8VaujCpGgX)`MrWPg6k{n(-Ri>rAYuu5Ho5OTy8>c6quY9|19 zGFjGmxMKrjH<Nh;^CQuIhUMcWOb16}D zv6__#0FBd|;1v?m025aA_7+!rTyqlO+xWO46&2Nu+qZvUlDnrD)4Gvlk4!6s6^Vna zGNp;3CKtvz4?fxs%SBLvTzTl9TzM1hC?@G#UNp@Db`6k&h+SqOPLWhuo#O^tJE`$C zfS<`en9Rp^(>NouV_Fj&8ftnagok!hFa>3hZ#$Ile?P7cbsQDGoXR`RE-s-iqolRy zWfp>5DyvXsCADY(YWahMIqLXu0nS^tBUy?`w+IR5sl8JXl6K%@AD}wjgdnn5H*rwB zT)PM`RHA(KtfcL3#(~#vw|#7Wfh!D~RQ-u#rqP(_D}o${gYjh0Pts04E+2McP2p!e zj(YkLHrwUkPlZ+D9;PGMT{ouvgY_*KmR$%qn7c?lUBGR`t*+qq7G&po>_tm`-AC$$ zAa$|TPbvV}BH`yT*wzH-6_hrjNhMK&C-V5CP z&J>JjA4j!#)Suo|{?&;L<|0!ktoKPQJG99Dh0DG|0)e1%_wF+^8m+FcUl@8O)#6A5 z#N0@*N9rfRAn=~eA)^wg!{wtO>}zOi=l=Mi9~%>MsoRwsv^fLIT3v`jjecn627B`m zNcrC%xdlL^!>SqjH@a{x`c%I}{;Z3>A*hmkwsK4=UC0-ZaSk!@RybIF=tmLFR$45C zg2TBnlH1qGzLmls3Ge_lJ>ZC;U7;E>N^;QgvoeZlq2y{f9)2|IIXL#<)-n=`z=I=qd4 zL2OD@=Z@)q~@dajAFq6$h4Lh?*x^*r^1dE~Hj~p|7j-Do%FiTbV zbY3I*TVqGumj&S+n_qDkV5`OY67*s|e1k4>vv>uJcb09u0w@G7^sq?IzL}<wPX;O-ByhhNQ`2Olg+|;*tWVoW{IaP4jnO?>M8jhYcw!2UJ)Yq8--W=I_ z7ZXI{bpQudN8rMV4w~k=b2H7gVIbs&yu&Rlaf=r?_lp7p8JcF+;uvH+Fd5)_$koip^>%nx1c1 zK?-dNj-JZ>mfau7qytC^Td}99sDIm|qvXH)7D64F7z5DSH)H2#uv0yBelIfhRrM1GykeLO(5ib0*zy7^2kmwb%RHiIwafOt=8MA`zVGxP(7Qp5N|98 zJT=I-RKwhV$8}X92+O_2#5n{**?`LD(}btnC*o#FQ6f<pMPgsO(d31k*@JS95)?dogKZ9|ySYBK<9!NAmI^Tfc`h z|GEv;{p5!!*}Fs%XrFW)jm?zc5DE>4w`l}zr6t&VEG(Ej^{035(-wC{A^+R4vNy|+ z==8#Pkw$wqH92|2jj*=qlCMxCU{{}H14FsH73ehxZ}jk<`a4)(n2^wz4>U zQiQ#TjJz!6zCD!;li;b-Gg3vV5Ot>?Q|Pr^3=@3+dA_8<@wMg)a*EU|GQNNnR5No* z13iK0_4TW(M4^+lhbB}(M zYVGXE>KbHKhK_D0vs7DuS}stPWGXgm*;eBgJS7keELAlPFuMnIvAi9i2x?&yw^CXW zMQ}OE%}dN*qHgW0z`azEUC_J#a(>S!)Khaoy3Hfle4+odI!r<#=kmGN{N_f(3%)-kQ8-v@Z)X^^$f_wbI+6kS2 z0X<%w6aYD2z0{(B7@X~glWeyyWyI~duk_16lcH-acx08R&@Srm&?NNI)>ieUo!*rw zPX(URa_JYOERP?7K!;MM%M4cA-(#3F^nTzcGQu9$$pCf*79i|^YIAIG(hLe7F&k4* zg6LJYpr@oT_z8LjZMvNM!f%U;G+-}&Z){YBf?M#0St?%;v{hivpO%}eOixcQt)Rd| zW7d@CNH86(E~5&fGe^v>X#qjav(!w>I~+?v<+yk|QBW`;YcMinhWu+ZyvsTW34Of~ zb;UGskug%FYF(0&$|lEVQ!CXcUM_Q7EIsNk4rKf!?(`p=H29Tdi;&4Kzt#YD*JOJw zxo*0(vgs$`uJGKUNUK{HTM|oS{FzX+|>Mp;Z$VcUWe4nX%>fHn8(EU@$ z#eHqP9#`7(_RFLJY$=HM&=n^iKYB3w0MyqcP*PREA%gos#Aeg+hNw#*BQ@DlFAa$q z6SttEk3)lCqr$k<*~+stY*rmWK*s_Idl@=qVE1fhHJ@y-A%uQ$1LD58wwMkI}kK!18$_Eq00C~04f)p7uyLa2M+T)CT z{)6JcdT!*>Uo1+*KwZ4a;nFj{B{c|4`{dTzjYZwaI!fW95> zIFobt&3w5COzN**xuPg3`2?~WvQwuF`NMltQ&R4DdzV9gt*WH-e$m#t%>vka@$33Z zn!1I6wR1E!EKwTmcd0meGGsafs|q!Z>f4IKdA+#Wm+JF@(D2yJ2N)-?;@?dt>7jk) zrI&jBMgL6eH|TbkDJy+|KfvJg?C$v=&v`Fbhs*9q7{xigB^rUmOVp%aW;V+>eKyO6 zChg2*G$j)K;JK(orGD=!cVF2$4yNb@s2TM*d=zP<@k4x(pj{OJn9A10D8nR$-#tkj z{DO2Sey4v#wAQncatg_;uP+pYQV@7X|Mzy++A3BdHgvQg>CIQS^`9nA6LBsvp`(fe zyn1O9M5@x^00lP}(@Pb3xQo6L`eCc`QXvo;po&pLH^KbGiMXE>;>{*6l5t7As7e|C zN(Dg0fGBd_a`OW?w$rZ8-m3eRLRN)V8lJ=ktY4idj(R)rLJ?JbE>|u*0R#$=<=}W{ z-dIys6-@?B5M`K*fl}D^a>$fc_LI+5m`dGJV8UhTc~5(Io9Dr|tG%TE=9sS8(e^WI zbYdEs1FSHO?DsZ~5o*?=Ri7L1Sm;0xI=DN|vpvpJVFm^8PiPOJ?%+Wm6NCT&^eUO5 z>*qct8G*3fH8r9Q6!aE9-`|ajZ+!;^MO{-z$_I~|cBdYc?0t14YZ|>T&jWyejF1#? zRrWpe#BCxtrE}uXBZ`k@f<k;;)W6-( zY7Xqd29P9^$stjF6*p-g@+>BaHSVgFqLp&grKy4$rM21_W!?ST#F#}xpuqvHB_uSe z$7WX(gf>7oMy#Y8`^-vr50zz*yGykpPycuZOM3P@|CO%y&{E#o+M1r6R0OYl{rdH% z_uP=H8W^y4kCF@rQun_6($Z4y_PN^H+N;dWD%RGSK)Co-)#x6Nc*%M23EZyN*b*0JU=_4!g)u}AzHwQqA` zxIsE60rr7Z8^DMAOPDoJ>FnZQ3e^W%GT?U{3vxtZg36**thprp6rY1;E~cH!W#&iX z<%q7IY)>hE1b1dMgh!B1^eE&tCr-rs=uz=lw?|d%-YeT23I1v?xYn-hK9f;MdfI6H za#?w~5G27~omA)1Tn%|`NFB{#o+w`UGrH6vQwqd^lw~H~A_fPKu%4UdlDse%pu>>7 zPeNytH=@EtCf1iYx#c|E)twP%)gghnwW!%%uxbX>HJZ-`HfMly&ctw0{HIwqh{SQz zECk8Q_o!&~r=Eyl!BQM@07aP+cB!8!oI;pxD!O9|JRjdz35nmmBz6@jiJJ9Ixf<>^ zzZX|Ey0F5`uvi()vh6X|x4}us*42=uW@UBN22-Ton@)}p}*D8ywvLrN~$Q{7^gee~yHr`mQJcJs(A(m;m9uqn*2wz(( z0@Lr(4l@PcRJOF7?HdamfJ&gQ4$LM92*bV)cFCk2KMg(ha1qUkL$pZgDpMRd4xz8j z+IlBq09J5WDkkc5V*0Nu_by3%Z@@0ehrfGWep!PiE&@Ra7L_GP{lOLl<7<`0Ml!O zjyu+ByW1tDK#n^Wz`|BpD=Q;pRKtA=cKm+T)gojR6f<7}NwjkA*1xW(_{@0|LB?Rl zV?Ophg5P!V?ejTDdJ`rAq(RoC(j9;L#EErq=Xp8d7isLjFTemywX-+NM7IB1G%=ZD zag)Ncu)_U4Za4M^AYvbk_-t&iCrzIQsi&v~Vim&cebz`xjQ~0MqM@ilO zwOAxEhYRHfQRv6=L)biN>i8niBxT<9^!3ZO_np;Vo3rJ6hInCg$D%eg?8Qhnf<-d zwlr83gQ-J8hFO_$$stV1pu{N0JOXn=u=zQ*bDmixlc4~%)X-Si?UAa6% zQx{MN-U3-Y@ylbRVJ9?jKa(mCX1UOQhle#U?OR=3TSqPsf>C73XS-VDmAJIt(4>w1 z%$`1bM%B(Own@!#QbaD`>h#~uI@QKt^Tw9(}5W}1<--YNSNLI1X zcp-oYU@%rUI8Il;j5?bF>O!@T94OBCHh(=mn+#K+)``eukd9NJC!0e$g1KXjFwA6@ z3JSz42y=Q)2O1}DBE;?nNPJDID;am*(cod{yehT4w2r2bWA|>So@dhXF6VT`!KgRa z^(ym>|BQccx^PxW%I$NLit|T^IQO{L&2j(-Pex0&tQTj4AKrCRAqs%_DeIX;om>50 zqS!(GXQwm!K%i`qc;ZdNpeAZ;!>qjvV0LSjhlma&LZB`;focOLp{=N_0(Su+Ug9u0r1k;n1u2y6{uOhIvOC+ z!NdC=8hqk-}`z2?g}%FJgs$EyyrbA%g)5*K%00l`99)XI6q%V-$NIl)sSCC?7Sd?edSAHU*pLemp61>upMA)}UxMCf6 zqg0sOfzoB#XB)*mzYnzE!pUh1ymQ0=FEVmp9aCxfgX z$lp3H%M!-1kyG*cj}ChlHEraAcB_!y^7?Y=uA{$PL5lI<<|A?OIxbEl;q^75ryor! z^(Hn}34G4Wc&a>GzJ8jMjZx=k%J6a9a3?(7e!zO<*$fKpZPp2Q_T*dSTle#0pX+>m zbHhUghMhnfuIc7yn!fM6~7OV`#%_iC@oEe&P14O*B0O;D5<@(nl^wBCNAY0Rr5AaV;*YihUD@-CTyR0eRSQf+3Cv@8%sV6wq;Lt?K38G0W5 zO|una1W`+vG)Vm7|7nrJm+us`IX;$R`d>z!mx7kKnw3R7rPfYIyCLmNDkVR(3_d4q z;2&SS^OXLk+u7&RPmU|u%RW&W5&1QGDY$K98c;6Npc$in`}QLMc$}9)1BkXG*U=*uBRBq`l4ngxfNM}oQ?071lJ(-M8@Yf>2AZE8j|0OKIx}x|6s)Gbo3oD_A_*hxjtyX}r~@st$RoZheQK>ASCxwr;+w-s-XPfexPc zK+XX4sJVfwEGUD3f^f^`Be@scv4Sw~cmGz`E3=Puhd0zDeZ!D_pBt&`&#<0_b?TZc z9JJ;?it$VbOeBkRSo`}`qD;OHNVw;{J>rDfIqzq!)LrHTp<1b4Nb|6wLa-56ynxt4 zupB|(9mY@;rwILD=lQ-AXwG~$&!5h&JI6s&Kc$(W1_+tyr8-)5clQ$Ll(SqGRD?Mf zcm|F=u2{M0St_;Wv21HwR~@8z3_A-Tlb5Y>y0-MrEw8PI$7e-7-1US8(}z#z^`S85 zuwofMZ1MtQpa=!?!$U>ECwwhV5G@(&*<*aQ@d=j4?$h%Cm^~kD2B_t*uo;}XbX}mj z%tKWuL%gTb;O1AJJOn_sTRa8bgl~#IV*cAeGxEIfrtZ)mMd$mKkm-|>lV65+-qd6f zd%RJ%qrLr`c|N$uz?3YE4hJ~0gHPp2Nhv9SNIVB2YM7?Lq(oY~!14|Zz?|oL5*HU2 z(cIiR1Zq0?1gL0grkKQgsm;xGm45>zc!zrco#+9a{u{UPvp4oPN0UZ*BLFCI(A@&= zf^NUt1jspHY;nL`;KQ4suJ5G^Oo+m!cwwMvV=(dcaHlV0Vp3t+_c14@4Ti=@s1vaz zzBe=&PcvaS5R&%b!|sPlQt$^49^fQZmxw6uq`)*2kkIG~r~X_4G~~|~7}gxM>Mv1c zD_admMKRWnx(7mq)8f!Al+PV>wRtf*cu>I|d<@8E0hwjD{GxdvC$!`5MJjWI}qktuxf z&@=0@HMPC1A6jPxB^DSN*{U+$nka*z1=hZ!!p<3A6 z!$N*2`TQAPDH%2Ok9Kv;eFV%q_!vZzk&>DMgpS{1J-s*Um{Go#sQq*^k!a&NN`?3VkYVZ| z1~q&L&7kN2ZS3;IoSf@0hR3|Rh9+Se8m|g0f4*;OlE>POt2jC3qq*IS7t!0tD_2NB=X!C|GRs9gU4cl{&zoh99q_%h1Y~MpXoS zF@jcNa*bfX3KX0)BsFnk`P)UfTo6#!W`?T#(0nQ1c}@$JG-v3Eybrul`R~1j znP2q)$NcdTuxK;y0?xI4k6=RdJEYx6@W;&Hq9N;;n9VCTWowb;8)XY-NTp3$8X+ru zH46a&hU~2&k_DX4^W=$${?EGyqh_Iu&!4s74baii$$A~Bi# ze{ZaJ8>_E+NQ9l^qVbCPGhjdGvul@_oD9?Z%ErITK>eu0ykmcFXDv5=Pu8L{y%oI3 zUbgT~ewLS<{!UMqti+oFG~9;T_+YpVEj{=G%)gEUBcTMo1&#}-H_u1KanO?|o8RJB z*4DUaoV5O$DMGZt>$-V5_$_j_wu&-QtR25Me((86OGyD58{^9t5grZ_ffu+qIl<$` zggS_UfxCNnfakgtTnqGPjAZzK+~R|^!?-q&H^%0}&Fz6QBkY(p78tE|!WuXYdTp4& z+A(_)Rz64i(0_iOS`j=nNIP~63}l9fpT2kZ?yJyMx@3j;PI#?oiU@xRcR93Y{|fiS zpI@=P3DXNeHMCV$`qs!l=86br5XSIc_`B+UJ;1~+uI2?RAo z8J+!@G<*|?AAzCBK0qgmR9>SI_SQiF6%}o53$#_f!m7)J=iO@{$KJVgZH){w0kS*) z+`Vm@T1Fd6_&c?2rjRwq)B>O|A>lT{Xpyt&S-N*&D(n7wPTmK|b3)a1;5o}YHYn?n z-$WO1>9Y$!9Wm@@=xUw%*C$j;$;$D8yM!SPU-AOLoLL}tK700Tim@0|`TVa(FI^G` zw%CqO#PjEd=#~jD3JdECxXiZ~J4_^X4ZmUngU-*-hjms$OQMT|iU0mDv+T1@6`q;z}msjP4B?7Rw>f{YEe(Vg43 zzoeI`gHeJF+{@NbQBt}9rsckZGbH_s{RsJ=UmCirqy#3dlHl*}uL;N+Sg))s1u-!( zPI&QTe_uQa3gAGr)4Q?qgJZkV#+!p_0cHk-Wx&Mi$+;IiU%DcXjXjBp$N%@u2N2PA zF8KWRfX#XD{(Yn+=PQcbGx)5Yo*uZF_fMZbJ?k+CPSs**q!t3XvXoTdl-v>D<{-vT z=;nBnz(CQ)HaA7cPDm}tC@E86(-53IiChK8c8{{M1$gP`0a;AZ)xTSmp}>33{UEki z?B+mhe}2}j5dpLQ*O$iPVbp<<^v@dna-Qve2dxXQ-#dd{FhtFq%0CG0KygK(U6km? zU3V;IDD|%w(Wz`#QB_t}*Ud;79L%?fnv%oywfHv{Xyx7y@!o3CH{ajgLa|_oR4qd* z5qWb^aA`Y4BxtLe1wr!PfDZGbBp!TBW+31P8X_FOI{x!IFT6w0=Q3rEsYwAU%ql*g@SOu6X zvI=BzjTm2xh#FFjKacNwqW+IBb(-%hX3``20ydDDDgVa?icbDLvP7o^UHOK``ec~T z?uU7ZgkgKd3~yXTP%GI9rVEpRtKg)e!rVXpj}gcMpYfpC?6Vc+)B5np2_)=OIR$2# z3P|`{w{HDorUBkbB_&$Wq6PW{3IMf6*Z$AfP_XH>V-PH(pD z2OsL?CE&v~EBYS(LaKKD}eu=Lp>cJm; zY!Cg(TDC#tHVdUK2caGRe-gaPS|mXOPB*GEOFs)`+$b2ri#49>|J>!siFw8KXG1|c zuIDB;)0Nc)-V2>=Q<>uA;sSmGfX=tUM#4GwD%8@P+_ji7wts(RdfFWIn4#l-uyK>` zgSo4#C!_R{g+(s>C9qde1<+UQfSkwF6AU}k-&~D#I*{Q_3rZI~=8GjDXInT{ZUQ-_ z-Kh8;JWf~q{wf3Z4vxXs|8}F|-^iPsT)J%mcLjz7>7bw!{{I}mr1K2&0)72>$ld6J zYr$$>{NEUS62pN=I`9c_gc<-qf=Ja^y(|2 zrKJZ#Iy?vEnKJ-&#jyJQwa*LC21ybPAe^c?M%xZJ93kvNrhbJUU|KprO*b91T)wO( zLA%fRIP)J{s5~;;Tc`j=hlMFUpmrXldB;KLYi4x{%kRBg6v?VxwyHf!JSSc5p4Wh%o z%FDnnD-LgZMR-s*K&sJ`3I;m%>(`Y_mjK@lJGF^KLGS>_STga(WA)byg{GdJJ}66j za!tbaq2DwOxd34_bWCI}D0@)2^E^l!k~6ywG7m}k?nPMqJ;hm2M2a_ z9^CRRnmb7-bV;9 zf236~L&X1>q8X|JAm}|miQEK~o5@l7-kQRDQwnkmr!kwi|3>Cxh0wA<@G3NBfU3iq zv*AOSP%1>;y`f{mLsD`W!hgC55H*Kn<-OMKB-yi*kz*v#h~(g7YXF|jr0I2QD2)I# ztW5bsFPXs!K?updin6`{;axP?UVQ$4c4OrZ_^h=2eAW8;`r~+bpuvX0T!i)H>xagP zR)u#NVsSt=efR%~xX?7H-1+YSH)=(7^(c712zd1W4M*Wi--SBLk!-yj^LwAxgC7- z2WaE8Ilfjvot>%Ti8ol<-vZsU~HR3*r%pyWjf1&Bysp9`t#>c&CR zM|S4SM@XTN8HOIl{F_iC0t;X~I$A$~6fh3PKprx*wY4>9lYC>0p$&ie`gJ-gOt`tP z!@>vLI#_r}-DYN#!MMf6#Ze3}XhPi(1P_F=h1IUfhsc@RujR`MMtpsvr91`~s9odLE4R7_XFJ|#mD?mWq*mJ^oIYeswUI?W+l zng8sEoy$oDerf88I?JEvgX$5u1yo`fYa%s_*a4dGFIaZpTYrD4=KrzMDc-KTd)sS> zp@=})d#lO99q1@EW6kyXev8>MhRc^7AvB-$@cF0e zBqab&FZUdtFW;YTldmWx4UH<)p+Js5SUT|=OJ7J3&<*%qm-_*20ga15=<7{_RD650 z&%OhA4Ik(V_{RQEnELV~OU!5AyFs_$lNpbGFnloKBR&rO1%jl+7O5RZ6p z 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 + + +
前向传播
前向传播
按Key分组
按Key分组
广播
广播
随机
随机
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/flink-component.png b/doc/ch-system-design/img/flink-component.png deleted file mode 100644 index 9534625c9e315c194820884c3a556f928c73ef36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158853 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

Vjh8d&0>Ao|GuVKd&DBYrXOAn*J9swa;1i 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 + + +
Local
SingleNode, SingleJVM
Local...
Cluster
Standalone, YARN
Cluster...
Cloud
Amazon EC2 
Cloud...
Runtime
Distributed Streaming Dataflow
Runtime...
DataStream/DataSet API
DataStream/DataSet API
CEP
Event Processing
CEP...
Gelly
Graph Processing
Gelly...
...
...
Table API & SQL
Table API & SQL
PyFlink
PyFlink
Libraries
Libraries
APIs
APIs
Core
Core
Deploy
Deploy
Flink组件栈 
Flink组件栈 
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/graph.png b/doc/ch-system-design/img/graph.png deleted file mode 100644 index 1829d4b745cea9a9c2453bb10b2d237c504267fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293503 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
G+C_=R^!Bh6>)6sG_ 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 bvP5so|MUTyj;T0&fYRQzPa{pu + + +
Execution
JobVertex
Exec...
FlatMap
FlatMap
Source
Source
Window
Aggregation
Window...
Sink
Sink
并行度: 2
并行度: 2
并行度: 2
并行度: 2
并行度: 2
并行度: 2
并行度: 1
并行度: 1
StreamGraph
StreamGraph
StreamNode
StreamNo...
StreamEdge
StreamEd...
Window
Aggregation
Window...
Source FlatMap
Source FlatM...
Sink
Sink
算子链
算子链
Intermediate
DataSet
Intermediate...
JobVertex
JobVertex
JobGraph
JobGraph
Window
Aggregation
[1/2]
Window...
Source FlatMap
[1/2]
Source FlatM...
Sink[1/1]
Sink[1/1]
ExecutionGraph
ExecutionGr...
Execution
JobVertex
Exec...
Intermediate
DataSet
Intermediate...
Intermediate
Result
Partition
Intermediate...
Source FlatMap
[2/2]
Source FlatM...
Intermediate
Result
Partition
Intermediate...
Window
Aggregation
[2/2]
Window...
Intermediate
Result
Partition
Intermediate...
Intermediate
Result
Inte...
Intermediate
Result
Inte...
Intermediate
Result
Partition
Intermediate...
ExecutionVertex
Exec...
ExecutionEdge
Exec...
并行度: 1
并行度: 1
Execution
JobVertex
Exec...
并行度: 2
并行度: 2
并行度: 2
并行度: 2
并行度: 1
并行度: 1
并行度: 2
并行度: 2
并行度: 2
并行度: 2
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/logical-view.png b/doc/ch-system-design/img/logical-view.png deleted file mode 100644 index 750b6cca703347ed7e0eb6449c3eb096186099f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121275 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%0Aom9x2fO8zl+-ss6F2gjueB91p+JlLfaFV5ujk-e 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 R!_gOGl{Bv9UA=k#e*p$>r|$p& diff --git a/doc/ch-system-design/img/logical-view.svg b/doc/ch-system-design/img/logical-view.svg new file mode 100644 index 0000000..53787d8 --- /dev/null +++ b/doc/ch-system-design/img/logical-view.svg @@ -0,0 +1,4 @@ + + + +
FlatMap
FlatMap
Source
Source
Window
Aggregation
Window...
逻辑视图
逻辑视图
数据流
数据流
Source
Source
Transformation
Transformation
Sink
Sink
Sink
Sink
keyBy
timeWindow
sum
keyBy...
flatMap
flatMap
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/operator-chain.png b/doc/ch-system-design/img/operator-chain.png deleted file mode 100644 index 91e896aaa42b307eb6b7c6ec33d85bd7a8c0096d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151970 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�u_T|_wKZXwO$IbyA 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%0D3fcGYpW3(Dfbl+=H{6767j9W0YXw{~U?hXoi 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 PFF>g%sww2$)c5-@pkjVx diff --git a/doc/ch-system-design/img/operator-chain.svg b/doc/ch-system-design/img/operator-chain.svg new file mode 100644 index 0000000..757b463 --- /dev/null +++ b/doc/ch-system-design/img/operator-chain.svg @@ -0,0 +1,4 @@ + + + +
FlatMap[1/2]
FlatMap[1/2]
Source[1/2]
Source[1/2]
Window
Aggregation
[1/2]
Window...
Sink[1/1]
Sink[1/1]
Source[2/2]
Source[2/2]
FlatMap[2/2]
FlatMap[2/2]
Task
Task
Window
Aggregation
[2/2]
Window...
算子链
算子链
Subtask
Subtask
线程
线程
线程
线程
线程
线程
线程
线程
线程
线程
keyBy
timeWindow
sum
keyBy...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/physical-execution.png b/doc/ch-system-design/img/physical-execution.png deleted file mode 100644 index 082f2e681f6827a2ae64065b46401921d08f2db4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178231 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

B^XqyS2EH}$y+qu&D54rlKuKC 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%0AB_njD4P4W}q#c17eJfkxNQ5t= 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℘@w@r(-1&LK~o=O=_Z|rpEq>Lp%GT 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 diff --git a/doc/ch-system-design/img/physical-execution.svg b/doc/ch-system-design/img/physical-execution.svg new file mode 100644 index 0000000..ea89e93 --- /dev/null +++ b/doc/ch-system-design/img/physical-execution.svg @@ -0,0 +1,4 @@ + + + +
FlatMap[1/2]
FlatMap[1/2]
Source[1/2]
Source[1/2]
Window
Aggregation[1/2]
Window...
Sink[1/1]
Sink[1/1]
物理执行图
物理执行图
数据流[1/2]
数据流[1/2]
Source[2/2]
Source[2/2]
FlatMap[2/2]
FlatMap[2/2]
Window
Aggregation[2/2]
Window...
算子子任务
算子子任务
数据流[2/2]
数据流[2/2]
数据流分区
数据流分区
并行度:2
并行度:2
并行度:1
并行度:1
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/slot-parallelism.png b/doc/ch-system-design/img/slot-parallelism.png deleted file mode 100644 index 7259a9bba56ed06bd1ac9c44167e748fe0897bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229461 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
o~$G|yQgc;=6wv5 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 diff --git a/doc/ch-system-design/img/slot-parallelism.svg b/doc/ch-system-design/img/slot-parallelism.svg new file mode 100644 index 0000000..d93077a --- /dev/null +++ b/doc/ch-system-design/img/slot-parallelism.svg @@ -0,0 +1,4 @@ + + + +
FlatMap[1/6]
FlatMap[1/6]
Source[1/6]
Source[1/6]
Window
Aggregation
[1/6]
Window...
Sink[1/1]
Sink[1/1]
Source[4/6]
Source[4/6]
FlatMap[4/6]
FlatMap[4/6]
Window
Aggregation
[4/6]
Window...
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
TaskManager
Task...
Task Slot
Task Slot
TaskManager
Task...
Source[2/6]
Source[2/6]
FlatMap[2/6]
FlatMap[2/6]
Window
Aggregation
[2/6]
Window...
Source[3/6]
Source[3/6]
FlatMap[3/6]
FlatMap[3/6]
Window
Aggregation
[3/6]
Window...
Source[5/6]
Source[5/6]
FlatMap[5/6]
FlatMap[5/6]
Source[6/6]
Source[6/6]
FlatMap[6/6]
FlatMap[6/6]
Window
Aggregation
[5/6]
Window...
Window
Aggregation
[6/6]
Window...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/slot-sharing.png b/doc/ch-system-design/img/slot-sharing.png deleted file mode 100644 index 6d17afed6552cf7f70314b3be7e8c7bdf7e1c60e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161593 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 Td{+vu*cgC{;EL@J6<(>3OkT%g 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 z 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 z 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
l6GEDudr4-hpDeuR(`9U_(< zhThb!+uTUI457B-zgu4H&NHU?+bOMku`lcSBxR=S7oxU$O*8|vy9+}(n8`dm7+9Kr z=g`S~{;6@5;?k$}t($&=4<|~&ptgHkyhc5Zs%4x{XdHj97RsK$vc~e zgwS1V^dGp4SZZwgl%IX~Ux1!#yqGm&97+c?1i z@)43UO1hEt$CJa!GAhY6p-}h~^VLRX&VL7uzLrS9f`>DA&L8rK7y<0TJM;4;Kvvc@ zi4&1}1Yj5XFQtZH2s~EA@R-%>Dr{!Z9xGykmf%8NHezI-Nj*IuODCT;P_VU5H>qc! zoeSHY?@{d$VFAlwpmVG2ucV2bkJ@q>#iPtRM3e42Czt$Gb;b>Ilhp zE8#df6WP9KjDsYdw_a00*@$EA7MrczW?T&dN(`_pyWt2fMOP1=QR6nVq_xrp-q@}# zF@ABUuVVQZk4B}w5_}Hj$b$Tte96hC98I^g6`?QOEQ%|kl}0G;cEgxgb(;US34FP# zM=ty4QGULvrsE7$p4;Bfq(;)N^Wv$*WaO6fQq zDN$m8vuTllN6++W1~1;nJ2;215b$7(!I+V&NsO-qlCqj_`8amp#i||l8J=lK%TX`u zx2!f2Z!ah@*T5;8N!l}bm4D$$Epeh+Pe}iyrExk~t`^Gl(}tB?Jy7{{3|lQAzlu}F zzvg1f+5A9vD15CaPU4d&~laM+dG@V zCwMibF-7fI6q9=5xT7_I~4iiuX_* zVfC}J-MmgWV^Pi4&XaorQwqDI;d`LWVYaJ06l$uRp^>9yV-5UAay&>*9rDu zyMBFRW_CTf&`Qyrp{scxQ^@6+?xfGllntC-&SgmrgdjbO-9wp zX9o9Ge>pG!z9f{%LP|ugh~_+QZQ%-99@;>}{ss=R1_Flt8YCzRLix{~vxTzPsZ`}$ zl&~e)6z#jeOyhT?43%Eh`~^<25k5qbf2X*>%QQA zx5Vl0B5FmrD5g3+m}m&Yo;`kM!f4s~DAnP|q`{>qPn$=_lgWpZ*1LaH27(zL{YzwT zocwugVS|7BgP3}SHHF>$552YV?_!jn^`oc*UNuy_!4uv?6m>2}H13hqm)hJRbG0Dd z7u@5%e>Q}jHaJOdfkW4RJ)-pAhGZlW9LbD#KA_z?yvrn zTrX4}2n3&{*~MQ$E`j@jQa&jbNUtjM!Ckl&b)j9^@<<9jmn^`r<2_M=%W1TJR8gb7 z?A+psgw00a8y)rH4@h#?ScVzKQFq0gRA?IhW8*L?rW6TRlhiVK4q(3MXgj zqx2)gL-uZd)AjQ%GHksSsSQE@!J(mlRQwbHnU%$t3Wl5i4CeR^JS*eNh?7FVHXCdxIx$%S%r*up?Cf2N4&{`_n{Gym#sY$xpa zUeTDa^_3xq``W{W%*e(ULh)Quw02GtFKZE`OxTN+0j+tTpA(bjvsq{y1}_-0^Dra3 zAzjHNR8aySC-@YMu=hX0)UoSM4#6U?I3<7N{)$M8b>2z~xr$Z2!tHSh8ASdPpV(@- zpKBMWPR86kEzw+gp^0wJR!>ipYt5Sh5P2OS5zTI6_%FMHV9!?vyZE|h>FYbNdq5wd zPls}CQ3vF8g5thl`Ix~|LRT63nY3Hn+Xufx2sBh0eq^O)l1Zq&bDTx*PoQ@M=HS@Y zXY~_k2y+f2gPZl;s#fmS?9O?gb0%&Opvu~fY{AMNx9b{v`w#B79H>j_)mP;-FPgT# zjngYhqmW`ZVzpGhmPS*f*LRqE8@pn(qIqfS2LK`+Sg)L~0Z;vBakrhMMOQ!y;Ll$o zCo)dZm5S$4SMD4%tw`|d?U)KQXZ))rZJQ>koUO#Ete8oMVYmdAIezd zw<6&dh_;7@4x|xx9v#W%y{gR$3(!`rby?0UAMq>zX0#~!g4d6FP``b<2o@Wfy{!#C z*Q5FDz)|*&K=0clncrizf(-zZvKtQ53mQsrVXfDaakrnMdDdjZKpC*d*3ggSi0%pw=3ssABHBJjEAep#o%tv5KodB zwyPZT3^8N`E*Dtvh;Qh)?;5e3{wezJs+l(220?Tudc_1B^C3QeiTR^QE1&xd0MgmQ zMjR;4+|%i;4|KRlYSeBPcvSePO=`C1NDqLq*6HbE7n9K!_%kyRu?Mf3jrUM_q1*Cb zeq;tbF6#V){}I2ou6%)1WrZEy&tn2UZ@`H^r1Pem&RN-$T=`0>fuW+}&u!8+&pgfo z^ciKd zzmjq}+j39Ri-Alm$NTF&lw_|u8WW!4@64xjk{1LQ?}U95+&NZk38qg@FMfaLzFu~x zsM7@IS&>$E;mA0FiIRISw zd*h!y#%?z+1G(3Ol_>?+G@Pj3W`=W)`Mth*AntkT%TIxkMTX&4u?ef0sUF+}d^3aY(XI<=`r3@nnz z;^N{(orKndX~Nmk?j*t`z}+daH3;nCZgF0p;mR$LzPb(~q*69-q%wL#c(EP{d`?Tkfstr3e89^Z@qBYY zNq%dhfL!h0+z&yBY_W=I^v~U_GK*2y>>}%L*#N?$^`9&|$WUve`P1KL89aaXwRLMU zKw?s}%r`?vyXC!tQD6>(fw?S0LcH~5CwX&InL-y)svI8fK9U|*gQpC3w+I`XKL65> z8e0GJ=a17)ujKdNSSEOAta?$+xSRSVIn5+NYw=2h`YIV#x7_j>{llsLUw<3o6~f){ zEd@U}7n6{*682Fgsi-7Z4ajR7V2j&;YNVL7nD2U8EfPs;{hiZI7~e&v*(MH07YIxv zfB7M>(N}hCvC@$v$#045T-cuX{07*OvSn0;UgXWFRZa9b-= zF(+L~lhPHkC|@9z*_bZI49!zAb$07&MR3T1;0KIGe_NTH&{(rV^dla~4 z43ws^)u;a@0Hs|nYCLc_mCeEa8XXC1XnU%3fP2T4frg{A&heT3jC7ZS+e+wR3lUhWL-JIA`QBYQHwj`X$eKqsgY(C4rgg7a;sTB}`Ur8p<{JQfvRq9df zmaaz`sr0W1@UrZKwYr;Tddsiuoje{^7G${zvKrD1>%W?I#s!jexO@82YcT4?yF*HH zy^+h);|rRu{p=ClAo)vy6oJqmvzT)rp*I;*2RFjz*Gy+||Q2c$Xhd!vjX z2k{cA_)wg_v{L9+pk!~KMsg}DTpsX_z;^NC0tXMdbyK_?A1B(m2(Kd`&45@MGDMR6IR(833;o zMr<6Mvej2FxqbCMw?}_1re%?(AlZ09WUHj`+i2?$he1XD84`D%|mQ zJgl`!R7OXb6i@nBgm}G`^j*6}2|;BD5|YRLTw0d+WVL=TsQp``YA;BssFeENqhfTc zsG=cAmt~JgWs9LD>iN`7fZ~!`5D4v{5|&W)xq2{x`8|9`ZlRA0EVYZo@H!D=T<$2G z5h(TzZg1?L4d8-q9BX`lD;-UM{L)((1q?il+8kYhTv*VZ#LraE`OZE{TBAs>S4_XN zg4NKRtR;jV!FPU|kuVzEuL2B;zK+oN$FGb~8HdWuRm{!D ze(^jVzIw&GnZ-0Cn|@PKq0eSI;m4P+?6lEwK6)>|M23-9kFp2I42MT57#=dUYFEBo z$>4Zhwb5{0uy&D<<#f#E(lJuP5k_qul*q;!GK*8jEGlG_pl3=1v@SQ`Z``53Hhpu} zbKd++UA)~dfvnuObB=~&>nBNPA;KU~ol^5^qL5_}8<$=-C-G2M@Z`2-&7swgL{DL$ z{jngV^!+uFh==7jt~i{R#k~m7^Jw-Kgr*qbrHIF1nkDE0)*Pb2g|x=9cb<- z4)3%V6m!0rj#KVY$g|x?-O;YMOKy$l{fn%w6jLV?N&qdcjnr|x{$zhj7d#;3tUGLu z6o{@_PdE(Qv=EwDLyPMklA5gvAcCTe)3am-zSDI9I^2z0>%FVsP5M!ffI8(GOf`|G z)Rk4b7UfHy#r&k7Gko$&vz)LO3)5zD7WRE3k9Qb6!im=%D!%bq?N@nY+#(AJj_h`* z=;n9~Sk>rB;?)I#{3FlzkaGIRo77g*zQDU?z2KQ(*!4#x&i0SixaDEF_RhHXE#W%X z^_s5o1@f*^hEzD<=-M8zqxl~=RM+vClfHg^&s0!V485lK*`FHy6~{_>uUBv|CO^hfKpB4i;MBXb{~G!!$V zuP_~FXEv6JUvWx%CM~6q#Y0;H!0ysd;41${dxnoFsKccP`H9MSy*o}ceS2J5+IjKq zStti7V#@srFg=ZcEPLQqqaQ^d@Cs(kp}A`zA}>4q$R8RE)hKqiOAIt%dwZZz*y)~K`wcM+b-&HG4YcoOgN zfe%#C{5I6&4|Q8V7CiiQdbDoPBV^2K^oJ8DagQAw9Ezmx3210*lcM>jol)*hN9&J_ z${7rJ4;Kkn_}sP7zZ?CTP@mx=Az_LL@U^sHFb$;OE7Sog*0U>wBz&${a)yRBPbJNq z_Ld~os}UR+wTXRwS3PRUCuq)w$@2jbitWPv*qoVTMXiWysBggql>1PtIDzXSD3ujl zD9#`Am5I_u*K_BwNSfzlKYf5p{Q{RB(cbtD_)(15ZzQiD(jQ*G2pT`bjt94`_tosa z!|~8F9}Dl5iDi#5{PSQ^voa<`*g3=`(K%FIP)gjH@Rv0~NNb6xw4r}}dl4x(6BIec z`TEix3*VY)RpqeQy4uaRMDo1h6c+!yxy4Vh)X$1I*&Rl6CD33lP&J{&J<|TBRasFW zJv2=7RA-7HgDvJkM2CKiYEkE1OfiLfRb=?TK7|Bqu?iOeGYHrXaz?W z3sKT^>bQ^lOZB4!nHOW8g6f$eQeu_*LZOA9{m=t~Pl>YV-NrJ#Z@Y1-#OHLDb>S-q zcsc1e&6u+DVYUKcIAzfUX83MaT)kYa9PV@Nz-XZI{Gh)8uO(JI0IUFV0A&&*dTv1` z{dENe+L?!N%iYig+|^W{$T*7h8}{^8g|)LGwwPxxX9S4LTl2y=#tQQC=+QVpdeACw zCbExm1RmsXM9;GEN@l>nzz>`yugV$ZZEp=~Tr?o|pBlA}0b4y?Jjz{O?o=nLH7I?( z$#TKMR<#o>P_P0y9 zCd>y>(jDQ(Yw?nMDNyQJiv^Sk=YS|ImjJHd`ct${0LZ$Td3i=acK^32o-!5fD)z#5qkG?GW`|kLSDE29 zE7xpX=)HC@0lr7j=0168U_yd*qdz5!ugkaV8nE;|3a+Cw={4t@X?o;EPLbW*J@d>r z8vkt3oab`?Jf3LSB?uzX946?pI=^b``MKF30CT)$-fMqOhc&^LfV%Gs-`#S@R(>lx zzUx?i;6ce~@u^b-;2&lbMHEMoIaV6Yit2qMGpfS=zg(Uoay6p-=V)WfCbMjpX*QF$ za`@j(mn-wb2*1cA!2}}%?RWF)wB$cfhuyQli1SDcZcTM0zGoH_kj??QE_3wfb$Wc2@HiHTv%;!2j-al>){vH{xu>-Qf%h}hWUn6%3>R&xv zvp^+P?SQe5MW{$qy=ayc7-K(AuvGelG3-{Hov+VCU-e39uIczoQM0x&(}8UB?KGPA zaz-*kmal1}*}(>?Vcl-mOx+BH(_UJi{?G5*Sa zAXQ=gVbSAwss*zbDJdQa!z5y~bK7}rgWHPt*+$j%j}oc5FTVxALZ6qX5Mf9cygFAq zu-YXSVi^KL*S9SElaZXq6e27kIjnn?4!NZ>yd#l81_HCiSH8>O^%u6abUe$G*5|w8 zYnqz<3T5Fv|Fj%z233sAcuMtnL4(XH^RbtzLF~EPA+;k`Y5q)A8by1g@1@bW2;Gpe zWbG*1?lvp@4I~WCm_P^}3G#zMjLZ;o_|op;`-@~9lsX+$9`^3j!^7u;!v1-BfkfCH zh2R3l=6UM&Pss!U;3^yQ>q_5rGoR_Q{$^iNtj^-sW8-4Qd>=$+B^{AJ?eC+C6_g`n z*n=!aXW98|qe(vLioWC$TqL|M+vC^GJ6pTQL!(<`G%6O$QK1b67&H)do!t#P5t&vp zMIK6l_APamOZlqddl}Es{H)*YB(hzES}ZrKk!#lC^$UZh{`~O&C42cn3tBvyyrBHZ zX5!z)hGo}Z44rny=XPAvg2~fpd-8b4NrrzCZi4)mL#)2}CDW%#Zy0NmLX;`B7q!+Z zXfOL5FRmz4%JN4)=^r>=#XgiX!6HGi46IxT$bMI>{X(ElDfK?UF);VRX`IL-5!tiw zla=`oQ7Gu~%2tzp?k*?Ozxsl=E6V`DdHv&IGkv5MBSvj33@?M0go=jOt3n$3sDHAN z^9R*ehuJXrJkX(>{}HW(#>`+*19`m+7L+9Vi?_|NP&m-p%09FiLfeC=aLPVW8T7cG z>JSyoGu^zr|4GiUQn&UyjaQ3Jp-j#T;LZDlgMq@yoc?RV>UaoJ68)e=1BVND0g;&J zUz?-_qnpd(EfbY%X3o7G{pY={qBNHU#Slrwg3uvuS$D)A%Ke}B-U#pg-T7EUw8f^s zUR@a}s6B~#?n!W(*co@mG|*9D%EYmDkg@frzIK}!0lzq17N}^h~UF;z*rB>pz<;y`4Z52=$veUvF z2e6mSab48ve-3;Vuo1A~#WsRjM>8m*Da?e?*FlOVl(rpTAZ&u8;@AEwWnt_5s^NJW z>DlwOOo6$UcWwFAxq&PO7YML$+zmoQ3!}iL;fd$e5XYXM+ZR4>E!vM3qokxx8P;(_ zT;RP{h55X*ZPV>R;;oQ~hBJG){(ERqgt~7r?jy30$z_EhG~EI{?P-9Ab{qey{UP;Z zm3meSxay+g0mb>xnc=6bFL`YM`7xSv2!;KU3wp`L{J>i)?AzjK_KZkA&SbkK#gz$%aw z9pov5#>;rBUl+m47J?_&sX28h+vWsD{L~E= z!Bipr56s|!#csix!v5^%`qTaavegzFl5riL`o7x|-PB<+2GO8bJY91`lzAwGAO9Ty z!JN&qlMoRoQ{+48ZOWxZmG0YXH=ABtRxkyj@W~% zj7aAL6v>Ip)xYFv|3V3ot0;h>0Y^G*;M8#Wn%#dlN0Hg5X$||OV1c#is_ky3f0~5! z#Y3O$mE7OmjQtHA%HWyO_jxCtRYTvBZZ@XZut_n-8w~if&fO8o&fZ!40^@6To#_i0 zQoq+ki*bIiK<#AaRV@F(UJx@~x;g|?2qat6a=_H==}(d!=k>7cP71AU?l+qt6M>2S8=k3`nNm`ppR!$N3u!4s72G!)gc?QtI#1a7=;cAGY%Wf zXu1>eM9ZazKk>dw{mk|Y7;@9ON;!FtE^3t4P^D7FG1=&*v5(ux$CRYdGgn}is%+KU zNVR#V&({v49E_MWO{^W+H#HR?UU{wZer1;sez5+#Na8BIX)^+X0v!;=C6dAWPu^rdtcCR}JTLQPJ#xXsGqINYx>E}V3_(GFcoD>@h}OjWp+49S8& z>8tX?QeEFg7gk|2R#F)q+uwG#Ywrm3; zuHn)jvUtD9UKE<6>`M*zsCX7~xJPxuZV=Tl3h`B`BuX-K{H2AS|14bKjLVe1TN|Icl>N-wWvn9C)3Ok1y(i zkVdO|+Db*t#8|Ad|B%IA2b-7%o3s(`ahtI?>P9`S>33XhAqbvnwJjCS;{uPu{P_f1 zl8jc=p2{*?99bN8l=NzO4BF}B{|}qMb2w{EFgMN+3I;dJQ{lKutD+pV;NBOnvpCC4 zCiL0dvviQX)h{?CXL~=|wIe}GvXsZ#LUh)?ilMHQOB;z9eS#YV(7pU}#8s;ax&E#A z?-1X17eSN-8yRdNp`Q8BQVgC>&*gE4Ba2Xcjrw-l*i^*SS}S*l|b;fN79n%g_e^XkerO2m@)*KEfoqh z5Pl#7LhOfFkRsz{h?|P_ikHkc<@80^Z^VK)q%3UIrf$KZ-Q~xBA4~rygx8%hc&e=E z7YgTzl|Myuu{lu+Lmy%4&%CjLI51JJFLenm-Fwt((^eLEqEl4)A$?vZwy=aRfhOU{ z+*#j~vZYVDx)sGg65xrHr01)$R$#^ffJl^xZFUsKin!5KM=5WwRRmO~8~r*o5t2PUA|y z%@$ROq^b{r5M^L~mOzz6VG8{vOv{#m@E1z=fdMrl#7l?$N`P@mEXGOcVg}tUqOb4^ z*kUNd*pTtuYl!7bnBI==XpiuJ7q4jf^R&jwr!1tr(InwEjT?F=Rzgx6Bx?#x)OiH7 zZ)u8QAeOB!-?RgWew3KIiX(33s!xcqM>Lj^%5e?SA3!CO}IH)L^O+`>(!8oh4 zA9oQVO3fBkkAzFUY3MU5{(bKAPP-pQH}r$pp65L8oe*6f9v5Tp{IlDoiHsK@E?M>J z%!3Kl9bYW|`=o4{H}d3Xo02%;Nv-9Ia?lHWB|~QDYYm$?_weR{p^6WBpo5*SS5MH? z@cy?@f&QQ2jPGM`aDqiq7ql=){9uTPy8$#BSi5kBq%E&`iF)t=^#WtLOa=TE9!)7& z5a9JjvP|dWM0sN4w5#Ll{*-)tD=AYzCkaYMu)o!)sK&fox?qc^Nu<TiGVZ8Q_1wqOpu*N{IE*Q}XIBjcw%1@ZP zi0!oDVn5(fXLEy=_&8(v`n;8N#MU zNpkdSyUGntepjy<-UBxl#^>%8+L&&q=)&{gRbHggn1Sc^*=I3?z50Qt^`F?IVDGD^ zF!iO0H8&sW5aDKGZ(tWA#wh8@qL7=34dvLD|E;7>cc9o)MpJ$6m>VXX^kC*qT7Dy4 zzFJp~$_{uc)h6vAexY1?^|Xo}J9y@k+}HN>5?&z<^2)I7SFzliuj5{8hdUX>&Hpuy zA=W?S`Z`*)u*Ul;1}}E`F5DP0f}gv1!W@e#8$<%_QN z-p9@_{O*kSUC4heE1J_v0|WOet>f}K?>S1S+>eRrZ~Co)&X6fwnlQ?x4aCH6hiG;> z4j>c*Q+~1sAh+M02;=MYbQ8xw^9;@uny)qKy+K%L5vy)Mf?7j4bJ|`3Mwo1D>}$)w z`+H#lG^XPN&-jPSr-yBzm;)9(F%R8HA)j0+U+p|Xjn8BG_0EZD4@PzWklMs-_@)tNfa#dN>HgFit+~MD_*kK?*!dydj(+%rd44bU#LUB=l6U}d4<9m zRra-~lue@knX_izS?bT#W@W_RVyvbpVL^G@13vQHU*%=_Mmh@d4apG+NYhYylP zvMCk}*Is&LorX#Ti|+MS3|Sze6VYJm1T_;d>P0T&@u zWZQ}?bGKC9bOYveWE*af5m+E=U#UWeU>KC~!mDHJ@qz%NZue{yxz390{yTm&WwJWC zpP(}UYW|Po7w~V4a4MNU`1IZ@>{aO9XSRLq?Z3kJo8q=;sVOKHK3!^yz0{WMW6a7; zaYZYu%*N^ukrYR&DRRGh$mMK=>bn#NRab%rN9vKCcBNs^UamvIH=)$%@B8b{$9UBf z3dXkg8Nbn9H%m-(Wm}yQYxp?A<9sJ{^Y+Bj)u43QR6T<(wjHzAQB6Ke7mJk5pS1F{ zym+Y6E{~rX$yiF1H{-cEj-_Xv#VHyXs7gOryn|@<_eJ%nxLU2vggBaxvQ)4%+j>X4 zMZByQFB(Xie66Qpd|F*)l7YNi^g#6FTFU2XO8i5-JO6%Z@G~YDNu6}*9zRU=lRVV* zJQ1l5rlh1SJ~qxsKyoM;Z*g@*v{d;NEH~KaKNZCLTF&Is*IH`srj@

Cr9X^cDLpLy7@BpO+3&p(oh@?v8hNPM81+xuqBPTsjkPKf7^ z?DIqR5B6>eW_Aoe?lBmBRPN*=L0QU6C9Yg5u`(+i>t8z5kALw~o)h;0uBE3b>Bdo} zGRoCK?Tzg7xhogCR9&Sk60J^;9FK(^GbqhpM$zKpFgsn;5&QS6>H63MxyXS>XJd~x z2WI3qbv^cLT}Z{n#0=%SB1@7^ynDnrNs?+!^rVF~@xqyI+WIg?yxDg4T;OH#QH-y~ zG8u8T_H|2^>qO8;5X;C#Ep)AKYucw#Qr}&D_t(B)`0_=J^%}Pu2PkPdtcx|yCB*$Y z+(^~@Uq4Dr%9fwzX{Bl9!c3Ev;x7erLN#iLR8uAT!RRk6Y_^;|zlts%;dHTbYv|jj zJj=ICG#I#W!Qntk?1}P=#r*ZQXJDlIX?+c^Kqc^6=!q4+`h zoxJC+(v3XwE&c$1|277rZLVP1h|Hmw3V?&OH?Z6cL-iCt+-BLvuW2DjFHylx;}2f` zUCA=|GRzyMT~%8JWSRTG^bH&BK+~xCL&f-LH-|~)BVd9RL>? zcCd-tvorWn5)vEc>Q-PW$~v7|AkflnA!MJH$`}uC;QY%_<)`MOHEeIn(20|eJIL{N82Bj{NPSvx|Noe}?m(#f_)kNL${uBugzS~=6iQhql)dTfy=N&a zA_NzEZ8uDX*svj;|ZC z#92IHZw5cPWW+S-=42b9-XJeVlZqZA?OeYAX>4^xWDQx)&ZYVj`bkW{0!R-0Tr=8|7NMB2nEnVzVXQ z+^cIj=mgs!WkF>z*WY~Dh>OLR9~x5W6xvBhFexzX10O{xx=pve)8ya>KNL90v$PA5 zG1Y$0d%VM6WCY2G?Z-F7S&%EW5y<&-DirAZxR0(~qxsbihsL`{r-l-Be*Fn{E34^4 z6BM!gHHGBrlZ#@U(VO<6nkR9_EoyC% zG#)@?(>|bzdv*Q%{A?#{Vz~;d&b?|5xsLsDUS_uObcNP)F&6D|g5kXlL9)U_ll2?4 zv$gFB*8IG0UQO~XR&7wrkfdBYz(vwF)EfvyM$nEqBw@CeaE-`J112O*vx-me96jwh z|L}%FI-zRLAzhay4P>mfOOxI$zF6b`>L%T$MnR7Oq_$8gZ}ev|ZH0LGVrgi$*}*YQ zPy)-4Y0!((p@#e6+;I4~iC!Dod!nc8vaIta{hj;`s*NKL|2%ke`W&!skG_lJVh1e+ zhV36>IJAEI&c-o2dvYV)Q1#K^YN!s(6K4txstAT3s9$$OZKZ5XGzA=OHg38&R0nby zl}utRS@ME0vYBHuBbo^>5Rg80-MBP;JN}fskD(!#FZgCxYHif92dn*3@L=mwZcr?* z+5G8IXhRtK_B`wSL&2QOeI4hrUS56M>`&w~zbcbF-%^9bS_<274iTjpe~s~2DswRB zBxfNf>D80E`9;U!m#r`{??S^bLw8AvD6-2$9hZ(jkyz-yr-__T9@SXvh4i!;>jYb} zKG5P+7Gz>!x=OL>=&k=}&0jS%rNYt9IF=R7pBOq=ef_02TsGfCPhmLkVwC@iXkFwT z60)dvukmsJU=lv?CZxvgyVn>KmT0HkGf~CzFD|0o5_(_Ui^Hs0M8So0CalG&6y07r z4`q%bMjmkA_|nMUn|4QhLWq$$l}AYKA@i1Ys4I)I2b(O%f|0iP@4#t?zSv0q*aCHq z;ZzSk)mC@?t|7LBPa&|VC4#_Vl4`%doK!ons+B0oAtnov#l`01;?k%$G1mWe7E6^;H{a_)JQi2 z#aJRC9C!hD!#B%vZn?}cb2g()b(>T#0pBiynNsd!2qq%_1;p@WR*VTK<+cop0ssrt z{p!bw>&QNokvjo1-`#o=H_z{Shg%mst?$zv{JLjKZx)JN50Ua9eKT3&q$?6x`hBqi zj@Z_bpChk16xu1oWZHZQ*Z%%kc(oapFnaWIOtihsg&xsOgYZABF(ch)AE|>h~Q&>y1*AV&Nfnx$M_5}ZmiMNc^0({Nt_yqljFFc2*P%!dvQ0E zVO;q)pSZ71L}Jtn%IVN+`Nv$iiW~4ojDN94k;*czfp%h^X{4oPN zcA@iR*~6BzHN27Md3lNCq;CB9y!Ua;A0C8sFiF6L`~87;(L>6urJn0qHyv)JD1Nt^ z|AKnfE1@Cu=ycY_!+AhOG{@EO&eZPuOL9r!?!OH+3{|^iZ|0a#kV+k ztqPQ;qt+7Aa_<<>sW|&?F_D<^q~CWnuoTu)R@M>|(Mg}OoUK}0!3;>`zqVxkVQdtb zTFBvVbcv=Y!JxwX3p>7?jh3J%J!*zZ?tS{*V%F4aF4jCj*mxa|{7JVzh_Ji)22*x6 zTw!-SJlAl1ziprP*DC^lX#M4j-3wql>5p3G4$wp_(|7w z&&9mL#q@Aq0Et|G)lQv+OYIz(_#ZC&7iEOzixJ6z>T2k~^JVis6~Zm6G?ub;F#+`5 z&ICc|T8gQ;FtmK?r@Q`GOjWi|zWY5U;-f8{lq11j?X`Q8Q|lvP^%>~yS=mCh3`3cE zzZglLnaazDJWKjl{VFCZ^{&0Rv@sgy1N)rvQsm%e{N#&&fDLvBG|joXeNl)!uhEV~ zTcQWrFUqWz(C}ys1<EbB(dp6&tPGyhp}REqQ8gHrZI1TOw|JOg6~i~& zNsAGKX+z@kt^$w;zPphMm-NfhlyR?3t5w$z%$?Epq_1B^HLTOkI(|vnpo;hLy|-;$ z@JPf+a{j2FxJ~e_EF>b~&Km)C-bZlCzlT09GHxu6nmslGK7!TJ_@$IFYP;1V$ux(W z+Q%3wtb}?GycETb$>aKUpov9I$_NqRNuN~ z5Jo1Q!*9^}0Tn+$4y;+GD5<*lk3GA=sufOQr2 zov-(Gv-nb?PX+1VO&;gg8wM+vqvtJl1%>!)p%qp|F#DxxjLx4rE*}>R5VI5HaQ3?6 zK+$x!!9Jv8ys)tiBWBa@vEh@Pf=+1%Um^sZex<>PuwByQ<}6(Y^_=^k8S7~Mx!W%8VHg~H@wn0} zG|7F_Xo6_RFG8Yi;DYjWE=CjUEZJgB8Mk9L zDxWx>-#FlYgM<}Z_z}(D=+C)aE&E=v{85G#wyq!;MuIl}5rU}^)>D;4GNeTaC|l&U zm_7V?I{?k*WpMf83F$8Th=CP9YN<2M;@eP?ImvzXPX6L2#yIwO2HzPgrIXfrosbbt z2i)9n_k=$cg09UKK66#S(@z+uaHTlPDK8wh92^(eJmkt#=*;P6VfQmb43 zOYFLA@rHZq>-Cs%&eTV$=>P(_7AodU{78ZQ9(B@xw@5TF%GrGWbg!XF)n~3kE#GBF z`?YCKq+P98VK}DB+~xU|1dbeeIx~ImTC-1_Yi66tLun`e;pW`(EKCyKh+fT z7{GrImYR*9zG_&d{_}|0g=X=5rR||X(U8Wb{r|VJmktJ+WTRZr;{kbBu^8*7JdTNqOzgSPQ|>Z zd7mY;F`qw5?7Ft~mwK1DmQ8)h_hdfVyyUsu2dlzCAuDd5?wf2h5m(raFS$j~di_?5 zY&=^M^4*g>x*VKdw_m_Ff0b{#vtoBDu9xrA)5l(;7jIT=_3+JR(%LWOG+Ue=!I8Nawf=ASL<0;O>(5sICr7tDVx`36KB9?2$hzp7|7h**~ zOEhmSjxhPg_YlzGzB14RhYZKOd~+|9A+%9`{4{`;xNq|+$y)mDB zIGFiH!!zCQ$qX{HQ*HBkb&gw(QN3GR>_Jyk1NS8)vaS^Ry^%fqHumaeN0$e_`%ExmV`GeS?+$di2wv&aW)mBs>s< z%NI_})yY9G2eMlg7ODk>aj~X@{$zw!d_gOFTjq_Q6L_+PF2A>r4?fNVrFJVvkWNmE zv%i{n72UC9V~%~E?3I-w5NydJD|Tbu_wt{TOzy>`B8A8un8M;>01Y2-#aw@UFytgABf{T20SAv_bT zHN}%8vE+1i%2rs)x`08tiOh-ge_ZVC&GWIkF}7)n)nlv6dtDIt?byo$vF~Pj4bl4C zhz~tl;!=s(YPqvwDN6G-ANYm=&*`(2z(R)6`#@6pF6BKN^%r7{%2OgsI1TD-BxyIs zz;4iawUxkW)Nn+wrTxjHeoHX$b*W91N+WVEG2Y$`*})1w>NPYhwt0opmsoJ)Cil9A zvfF6YFBC3jq(!+w9TYv>5$IRb3P5sB0iP+7EbKzBud{cBu*%)BBPi5@3#%%v*9J7C zkD)=KZ_ge0GA4UpJEU8F4}i4gs0(dF`+f!Qr{4@xA2TYs+Ki3r?r4lGD!yqpySUvt z7Uq&tb{Xz>?M^X&n&lIO?H|q<%6%Td_}_lNODmnXf+RKNiylO+Ce0eHPaqL|Q{9gw zd)G^Lldsm3y0TYe*=y;OrrITq>JwhEZOTibc$05NsDAp~sa0%;-sv)}tXFUaJu1bP zwzt#so6xL&{F4#re;Su+o<-%&b&U(cL^pVnR`g@Fg&znqt&a$z+5`c<0naN!l?s}? z@hJ*^QVaB<0{i)M3FeiMXvs$i8CN_UQ$N{QVR^PoV z6}3+Ko%93P#Wf$Bt>wJ34LbN`t?77%HW8Ahhjn zP7LwtnN1_+VW87r$vmt>Mq_H|5M(NkiQAh$4;U`})n?>--vUg(%R5z`66Jqz{&?!r z*-s3IAO zr2QtkN_j*E?|l1xz6!ueg?&MPk<~5fjEuFDY}mBB;!Af4F}+MR`|et1td#)S)k|O> z@f{l|A8D0Z#DG)aD%?ILCj@>GplE|PMS9}=(#?r1MaCTvw7(-FmcS`NZ(90z*`X3( z^scDZ67IQ`3!R0mZOcjqf6jFDVtV-{3l-1tUDRd;rf5qdn82tGOMrXVgRJwWh49?< zQ;biRR2F8K*=WQGH~LPBC)eIy1L{L*F!;<#B8%3g(u{}%>fY`Kqf+283@3DItzaVE zAm3kWvjXijIXa`-i`iZ$ST;wsLHo`PVlra4WrQ^Cv48lw@~0KsSkvmr1hbV5+9`JZ zZ=$xp-*W=j1w1g0nL7;jP_?5I$ZFghA<6fKd6kX~A&&=|KJU5l++t}`du6T__+WV_ ze)n(LjTXwD(-{Ujru4%^)w_UF4dW&}_MVmUOdWS&0d(YC9T`;MpFzVLb}wvHuQT+H zf7+7x*rC&eu6)w+27pxOpx^27rT~Ogj~TOR-KD=ye&tZIqEe86_d=k*U=IJN@3;E) zEvcX)!mO8^Eg27gGWJql!_lvXYd{8nNT=L$z}lL(yMG(IHl$1WZq2WxsnyugkUz_g zXXd_g`}7?Ol7aibR9IYuEig*i0XvQeG_MjzR`F$heKq)#UZ= zN_6FxcvXd0>bnqvIew=9`dVbiXp>vmqrjd0mN71&s%+npz_?ryBHQ*%?OdUhypoxo zC@7z+&+lsXiZ7i;W)I7USwX+f5s^r2K?{A2F%j%^^qF1}s@BJ@3Qn|@?OU|jZD4E- zH$AWuH2Ob&-le+&td+~{vf1U(%0E>!)D=%-UGREG9eNU#=WF=bsD7VpF%f}zE&-2L zk)tmRSoHE;8ut+sHrxi=oVbwWeXvUASc~DilW=Ks9QS|bqNUHzJ@I&tI>*SjC*b>z z5WvReLCn4l>zRX#h?P7&K9N8gL3~=7jao--)+WM4LMu%z*JBUo0#b$ozizV6R7wb{ z*pae#EnjT^oN`zZaeK9>ueKq|+=IgA_MQGerG};7>98|7|7qiX(#8^qAwYO4>q*x= zXE-tj?oVyL!`4NXcIIwS0!UPB7%`t7fK&Oto55?JzZRl}|e(rtIYkS4>c0w~= z{#*O$A%eYkhaTv|SuW2N7auDK(IY;DhAel=(@N1#RUd7xx?MVk9QvfYDr6HY$dxL& z|J@Ryw3Dv{FO~uehIFrWl>d{d=dFjr6vp5A zUQfe%d{*Kv?miCJPkWrE*{&0K&&iCQqS&~0)8h0|y5<`!_!o; z*Bbb}kowx-)=h@Gi4gRod(pc$(9cGS4paEmK6&b|7(X{T}XczdB4s{NNsr zTRn^)*we#TS?SlI6yX;n0^on;s)aIOLfm&42)?b4dXAfT_&%;VejUu{|`tM+r?KO!VrR=@>GC945~xZD|lq#xiwk- zW%ihN{4sgz+@k!v*oIriKvI&r!AiAio9f8%!`LC&Z-{&STvpxW=t+6)0C^xGbEaa< zOGH**nLwG*1QqGQ54Wc+vY>H?UwCp?)|eC$+w-?BaD99S6StYz#zlEDny6Hrtvqde zX?=X`CJEM-W$}@`(5q9#zS`mK^w}tA7?o1;XtM2NRv_WnNfzY7$RK=ZYYp z3!YN)FqB=Y-jOCR&v=v5#Av5BEkcmaZ1br5W87>T5TKK78x%9gY&V+iRZq0XojBq! z%CJ0eSXPcdS1EB*d?{jA^&$)^vM7gRY||bK-&kGV9)vXBPKo%S`XZt8d6UHynD?;y z@HA*eQDJ%IU4O|q&ThPk?hU5q!ZA(TXG*1H8xq*xHXdvDK7uPOITaePo@A(?9lO0q zgy$Gq`ZYtqO$kcTJM8>wI&qrOY^V@j-W3FTGdIQO%0Zzl>0NzpQ6O{(C+&UYt6r<& z?E&w4HnL#TGMRo7=ND44D$d_5bd){f;+UAduTs4Ki}X_Df|z&y6Cg%UeIIXi3<;9+ z2XclsL}=q(KfaplBKdM9yM?Zk5izB}12hOi=DZ-ICfcek*$aO}Ax42;``VAdMCp~CK zgZTd=Rb6&65+$T}&LL}Ya2JDSMVD)ZZ0Vv}p6Ixe{`ttG)v1B@fXe(mb6bAn=+Gd* zZNXN08<=vUo(+-&niaC3S~@LhJCDDT)Ek6aPlR z%06c+33wbmV%SzAmk?nA440j+84=J})#MFLZZnQgzkxVt+Gp%zW%qBPL;o$*m9xp9 zG9WPObPZh%G{O4FQfnzEenfQV6|MELWw%eIimVJXUEw0w0yx92#JhZ*VBmLzX_MKc z()80g>c=aVcY^v^-}ifY&;_6U7^Y9+-ac4=dX1^~Bj4~nts83}D;X>6Sr173+d*m~ z#JZrh#Wmr4hzo;Q@*Sgm57!#hMkT05Gy6JN!x{_v-|uOF2x?jl;;cTA^FbT3S*bi` z9W>Sp;XuVI{o=wMNhlB{-AZRUdJX)%ep)l-$lv2PM@)@$exaC60Zw4! zOrnqplF% zqs%GGNe?OB-<0zB?3~%OpnMT_Z?DB2DA@b13dEOA*7Sr?R?0rs_4NzxeoacRD))y{ zkBZv@Em@xgKuPs!${4(ICO~-TnL}Be3&Qc=qdLc#x|m;X)%+{$tamZouwAFmfAc^f zy^nuu*w!(!inw*>+u%!pf>@p`mW#HTb7}zh0B3p`ykW`g%f(80}|8=-K!xZJzP}oIq;5_I^oR(9l>yD?v1XbpiH86yk7ix?joACW^j`p#uM70; zS9*{$a{I&GB(HCO_>khQ-09xb2+0VtO3fOyFV}-}(23{ipl?qKaNC?FSt|R8Z+EU-Y0pv=hGXYm zzeHH^U56Mf%|tWA3{cySr%inq7ku$WEw@L9?C5xS)p;T9;+mvg#BHr_F$gUuiK?}- zzhIo3j~dDHqqVle1%Z~CbBmx}X=smh>Wg$UY$y9t#MN8VKs6n(`Wf}i{Jmh?uNW)7 z7^yQe_+*l}*0(;}F%n&xakn&e8$nRRizh&A(=q;wBP7hazIC=(s=VzOp~NTe>0W}` zPPoY9U{G*Bp%Vp?T`7%XfU_~Ln19w}srwF)RcZu7kIRf>9AL{pjuI1mVGR1k8wKZ2 zoGJ{c6h#lJ;B9rkn1!0Ji$MokrJwsgu<;50^etrDq zj=;N4nPbTwUNBUUb$w??AA`o|9@QHC#=I{PYN>`d);cC*{-X8n3x&vW6yqHx;@;YY zy)A5fms?gzNe`7Z}6rIR2ubL<#Bs> z_ks;clCwL!$MraVUg`{)J@4rxabE*y2zF2_KJ_0CAj|Lroph$ei4Yw8z1BHpT3yVF zSki;Y2{NTiQeIqww?G=Gs)1n?InL{6u-}5k)}bx;8tuj{B#ahE%vT0cGqSg4%)W@K z@-HVE@G4Zhqm|F6BEa`|ElP^5r5#W8U1!CQyKB!r=r=68Q6U)^_|)x2Y?;=9 z1CZIAw+Fe&oQ~E!gzZ^sQ!6O|^%d^x3kwl)FETFD~h4 zmLjl9kSC+R9sX6HR z+j!Sj$YSDdg15a)K>efu%Wau9ZdOY6E6bFW%PvwffX{e`gW3TOmF`|A+|}$M_l>WO zlGoPj&Tkz=h!?y1)SJNfNJ#!*U-=e2|DyAu`SPNZp63aePsWih*Z^-h%1LT#U~<5A zdT_&yR6NW@bl(a2=IAr;;EHN6NTPuDgs@nia&;-MizABRxq~7z5_nwh$=&gQqpc*r z`JcDIm^P=gKouE}gykvh^=y(jjDU?Q9<-L^?d3Wxj4~8laHG=6IOop{%x-X+WOE>} z6PP7b7`=TTu;8XI*WtUXKEis}fT5nLXf}nd0pq`Bp0}QY%;Gd`cE7Po<=RC*AR>Yv z&UAiL9L6##yVi301IsfH0B5yqise^X;g7mICyFhBJMNDFR52M}Pexb%r^HC;-K8fX z2c*cz{n)jN?DFAquRLHIK&7^AUmFqE-yfxA&%ddR{|R4TV9_2`h2Y<7+;7`t$bL zQ{YN$A8~&SBfA+gK)QGLG85lJbf?WL?+gP+chgQgGg2VI%RXd|6Toi3CY%8?=w8SR zhwOJcaLCL0ANrWKq&MwhD?6Id^Gb=}HJAUJCklOZ9^1=$bW8)DL8tt;`gey?;-odBiea7W1*hYts zWA)+U(?$NH0YjbCzsnNW{E|Tc&`jfQZuxL0iQ@jKU-D6n8AufYmj`Miff5Y16z*^| z3IuvU)2r(+!nG_y;2i^pbMM~XJqTm8<14_?<1CieJjY||Re%kVyStQ*^y_yy08Z0q zfKrPs367NYCPvX6C8V<-;Gp`sy?LtM=~!!S^y4Tb5TCC*@Exv078JiUqEh?zjC%;3 z^6{U_7yIzP1@1I6&!m%7xM0tYKu6~e&%TZxk(yX^BTZ;uO5;ss>hxli8wTh<`f{{l zF!99`tZJ^T&qohV$yzv{TF(7@$kYAKL>TQRjvFX@fE9nGFyY3K#=USiI7i5gA))|B z=on)2kg|bi{I*fPK+HyWxY%K>SxfqBcbpV*uoP1RGQmIxRMIG{F~)HddC!56$c5wK zu$;w#ssiJ&n8h&dP@bED$)!2rmgc8V(dZK2U~?8_Es2sZq-}IpT6KMJu6nJdf4X{y z^_Mvv^Vg8wtt4E1z!`6m8FzJb7)77jt50#GhFine%}4yc&H(=cqYqT1r!9fl^>Q0h zu|lQlv0HlI)QiS}1ARl~XdwjBpykNf-8L&c`|CJn2%929w%IpL$sS7z7i-U%PMZvh z=K>Br=WcNQ7i{-kvQ2ygf%Tl-jkBP)-hJs)QaSNCK=DXBm*Y`7|4zt0lEkq+#8&PL zN`27(B{=G0m}3Es*^XQL7{UXI^@Ljhineg&{*9|gWo+etwIFj`jwg-yd3>|jnwmcN zfD(vnIW1<9tG`!d)^QGy*BXsyAk71mEt_P4;C1D<=5+?zy`p%~U+x{g)k%@5IR7;$ zP07ay-83aOx$>l42=;PcB-P{k+-MFOL=ZuB*Vj4rM?mnkzhwj7_^q59?-g9cs9zyE z21oI`odzw22q-x$tfseFW(lId!!=ptC4dp)n7I4qX@z~qcN30B93yG87rRx}_Q8Ax zgHf(eYM3j^4Zvk3e}}&h$9xOGuH@H%O}`Fd@(WHnGhbW7`Ff^zKY-$~)`Jsi;>T=2 zknATp;Hgn32csKxF}XzF8AD8~A7-p1JBNzV5Pwh&MjQM*QZ6(4On#gEx=HtOOgpa{ z_Yg>+N;sdIOFe;R8TcYS?19?Dc{Qtq+In|5Fml>fTr;<4An}|?Rz2LE`-b_6@jDk0 z50~{}dw1LQm*`=`3j5W$I=gzXT>g=G%Z>SomF%_$!l1yjPx%`zc~x1^cMa`1FT`4# zS?&G&S05tPwz!>%`g1OLOr8QG`o^w=qJj$T?*rdpPhor;`_fQ&L4i$D<5O67E1eu0 z$kI#XYv~|=yaq;)+pi8|;44?bU z?Gd_W5HVB(meMdffuhnbL^h`v=mH3L)#`;xP#P57A|n>X9mSN2^<~!Xe!IFRD@wNs zvQ!`(0oou)lt4gEvhuAFQ_T#R>VUBTrIr-S7j*3d*Wl+)lw+K=xbr_`EDV4oj3Y&H zGbd_#)h#0O2E6cBQlt-~oT?mDqHUxMNb^i_0$?+Mz7bUaX7Qu%@2cH9XK z2%fkKl799=ILrC`_F^+?U4PI-Pkd>4Bdl`YJ9Xm)yQ{e+t!L zw&@)s@?k)!1iX}Us4d-@cUHsE86;QyiH<0=vGp7T-$}vHN>?oK1^#@{Xlg(qpIlnl zeq@hZG5{g2GP7#V1oJ@*o%4+v^=E7@&%yD~`APSrt@$gZiR{B^E9e+Ri<{yW!(QoN z3JgrcfM@~TW;sc(mtduB2(TDM8V{nl%s^QAu`tDtk|o}TsOyika#bF;ZG#yMkiOHW z1ydLRX8{BINa5w@}VrQfN<|_yTV4c z>BVU9_Y|m_tPEFDiH9>t3Ad><`U~MxHdQNaAeZOT#^&NCnBdwTg%P_J)7~cLZT{9$ zxNW9p_p5q>MI!{|W+nWa{d9F7w}p$}7%+cK3u?I(bNavZNxiZ1sjTmI0s1J6=j2;~1wDuoO(tBPkGac$l6D)l`vJ17W448g zAQ@iOkuF4suhM{E(XjHs%{ z11}S_o`X0)UmR&QzCiD=bx>oH1k(ld0q$2ZxBX!P0N zmD(PFOKlVf>`lvb+#MG@UT%i{k%B)mk8TY`n&z25i|LzkpsxMsBw*_mbw|x^B+wU3y7p$N^EP8d_^%I~CKyC?W zRQ9o2@y=*d1mKBsuQ z8(5Yz07D?&K&+)&&*xu&J2amH|5bg!e^oP-l^_4J8r!Zc5^Y(2GiyIOjF&+K92D#m zY<6iizAiu~Bf583Wlm2gC$RMai>VtYTt>C?{=JQx6a-z1EQ{*VFY?^R(45rRPfD#` z>{kdY>|~-)4O<2J-!c8PCk7DF=1T$lTJ&`K?LPi%9;#juwGA$k;D6&P^xqAfK0^hd zWz>1&aR)|c#64|ud**(Hp2G4C6RRUz@=InBX_AbY+SY0|WsZ#dWmj|&bP*PDt^sH? zI_ST^S;QSPuT|Whw|knd-AArLpmNIJ3D-;cfffQG#(U2b2N__5ui-sCTj^e@A)<-b zz;p}nJ?DyNN|a;x5=s7x{c-^42V&Y!#C{Ch)$h1ljsM+L(L;~%1wp#f6{ur*g>QME zC$-S%d}lz5T@yvBQk~)2Aw7Bldu@~fS_Ll-pp8d)6Q}R_wq~!Nki&7?j0DGf%%`IM zD_Q~JX|uaZ-YM~Q3s+8OWKN>c^>)_VbWq4Cf54H}na#uYgW&?BtlI1-5ek3r<H{``+P`>JWl zdG4M6U&Lzs6cl>z0ZjDmE&ZZXSMDx|677Q;Me-VPy zTw@%OtJeGqJ~?K3uNQq{z)G=LdDa{-zvti^*3RTl(C+k|n*@xtalc702o!}U&2Dx) z94?rC!ks#k)6Q&y6oT^C+228L)O?b6J`FV8AAtU{99+TN6k9a&KYmk-%dBjC*@O}i z7wA1NQxj!$92*dYL`$yiZvi`R#EL#)9qss$(XpyT_>uO(at1nUV zaX0YM9YTECGf!o;x-Av>A0V6v{CV@@hGiB&1OU(n=8JE!`;P_`{)nOvaY1+VJ^Qh7P&c;!J z%-oU3bQ5KiwCh~)q_m&!R?>cn$-uD2%Y&WiGlx^u8TL}k9C5=z&k?u*m)&ooX7?s8 zR1v|EWx?V}(xps5P`SHfI74V~+b4v2jRD|Fy=^(1Gy;?FzVnSM` zD^d_AmuE$J`Ebl`NAU6i&&Ogiz-v})-PUtp=d08>P{6za@I0K?_0BAC?F4jr@Ps}4 zaCV+@!N7nVD7c}IBukxJOPrql%juU8eeL<{5+ASxM7-pB*gMsxyc4ixICn#d0n9sPF zd=3a9d(mf2@Dn&RWykMyYvc5z%*ik2zR7|1vy(B8QSV;WYwOc4{q5I^rdu5RX3hwW zZFe^7TDKY}_wJi+UEr(VriSgDrY!C22-AGi4NxghUJc}`gd>$@dszw4rMg&_V!{aBQ1PIf6F#vmbvkO$A2-!!Q6NC z^4ZQ-;~X4vszqQs?$1=@f3jPLjX!0?h}!G?+G_Bdrrfz&#@>#s-83!q!QrG%JD||R z5vczv@*w;S2VYrVnRhX2jOo$ya9yprf@ARTL%UC%_U@BizCauB>eK`K+V;EteAc~@CX&Pr5k54q)7XufhW0tt=y(*7WqA(FS+AXgZGH(>IF z^LFtd(u*YD&DQ{xv=Zr;7#~pQ2!bVG6jhSZ;+xDvAYE!k^ZZ?M30;a!g8afKFax!5 z^8R`>zVix(^sb9u`EGZl+OQuZeLPRw&{}ld#_V_+6i@KoV?V}s+bp2XhIhIbCbR2- zWkRE;PPo_=VXxjNA;q1NX%8{ir@M`gk!Peo(2Y(W3QDk78`D@u0>h)WO832&Jns_O zwju@aE-8ES+veAlnajSvuO>NXt~^}=LythH@~qfN-CC2$Myb7rHg2V zHoV2HO&|1!ot^gidAJ{YpRQFD5pHg4HDt}VLo^~W+};~H(T@azQvuWRH95Lfx$or; z3K|HS$JGkl$D8N%27NfF-B?u7VB!MFea@lYPm6#u?aJM&=_fz-C-JDzbT>$?MDK2? zPq;N{gCRgD3zI4Kkd)ST<4){ln*j5FIEftaCGHrg-|V1$s;h&q{=x{X*rrQ z&VGP^pRu1}H_mQcmpPb6*Gs29+5U|(Lb9LYFzj9PprRZ1n&D1Jrm2kwhS!dfjR#@` zXKPXZF~xn&jI~+11zmQPzR{@q6+8L#;z&l1VsJm+%s{rwRwN-Xx)U_tTAG_^Ai>-M z6$Vg@)ocFiI^V#Dm7r&1BI%XcmD0ORs|cox!r|V*d+ry)JU?7*z9&MO`Q+|T?Kmsg z>?pVpK4n2$V~ zPuXNyDNShVR6RoE?+_l=m}+vW*!o1eAlG;G^C~-NZN9#{{c-D8I?|zsrVC6NxU$Ft zK&@`mXDtp&bJ`bXGkWzcvbds?kyq2%CI9AdUa;P$W?|B?ia`6vgVP{W=5qkTw^w1@xAS6B~&v0}{S;6Q@o?4&dBuH>fu)3u}tcLc4Z^XkSi zMwFmxsoY^zdrB3IgUic#Ge&zNVLCwn0R#-kY&*8-0X*i0|Jg{ zeK$P9~E2y*wEd9dy7qx>a zKAQ(GAaP^RGw`%Zh_Hd1@63)oR01a zuIxiB$ODTWL6DHWl*WUNs?E80HC}35$JrqtNtf?&^6MEay9l$_vVT`53#uNs2D+J2 zj($PRI}qlH{rM{<>|L z$5O7a9->jS{BLpVP|PgXc_anke-&mA>d83oB^Y)q$oajAI-|HD9>zg7&m0Gi{NvwT z+H*EvAb9=Y!|OD+& z3nbUSW<&wxtt~Z)*iDI_*qyAO3-3}4AT+m9pEx%GweiavA91B5jBJH=COiEem=q}m zB!ez z10=zkPkrex370P$tmwGn)C1DX*$|(+Z2H4~6X&23RHbR>B;W;3&3SyYX3RKdg!j~b z1NQ2~=5HmA_;-wwOUh}oS}YOBY!zdRMg9k1E+gh0+4~DilNkCRPWbE>KJ8u_QGm_= zzfyVCG$KK=blksBAx#q|p|xvjWBs?jM^h_MB3Zav6wY?8S1+k-oSy-MtDCIN4?I5Q z97TEiam6VM-f)1#e$1WRMmY?K7j80YT6p^zup8(YJm?n_{?CAGDhPgzPwf(3 zgE(PIQar{TKX$I#bCwhJZ5~s;n@fq_;vPqVz{_nx88f`E_58*lMr57Au0&wwKi?YM zy8-?d7|I_$H%2E1tW0*w#pU9kIpOGe2T@>SI5EK7jV#x8|Bi{Vz?k26hUFXMnZ)(8 z85e~A6eDJUfuYCS4<{HUmm##O4d0ds?x-UryM_bMPyWv9iz?ERkqG4q{4AhbT)?V0 z!*YH>iqG*iLXeUV~|3~h(WY-BI&|JPD`@i~hZRj!;)bB!*zxsqh;v5M6- zrj)(Iev50ALU&1dG2Ui|3gkLuLXx}5p_jIB`Qq%Kqkyx0lP9a>d2adQG=?6Z$Q-9` zEy;&LHy}rP9LuorEMDG;J_R=Frjq|Bx^#@fQ2QIxvz*<;c6{79q{h^lE9npMUH{00GD{D|6J*|n9I zl?Gx*zBHIi8v13W@TRE?V04}6@AWY93$`FlZXSzQ0jrh+*AVKEkaG~;iTvny^DCtASR(Ac*DF( z0bz^y?PA)wrtL@=Ww)`b&oR_VYa^V5Xk4g3!ob2nV9OD_@2$dNosH?LHQzq~5lstJ z@sh3y*ZHdm=hT#&1A{kJ9UXIHo6z}j#B0#`@B^{iNa#XSgJ2^x6PpX)yLA+kK zPl!i5x+O09PKL}!*Pt<6FX|ig6Lv>ZpA||pLN9*Kw{CkNwg3X7px)Dn?5>o0WfKxQ7VL{sZ5?c<@Js^vLSJ zGbOM36m0Vw&Zzq9?#G{tzr$_#m=>DYulx9U!OB;BgV^_(=bzJF2Xl&F%_3fdV4EO0 z%glaH{X&J+^+$k$0Rw)>S|f?~uhSixe+!(_;ZP8q#0%T_aaum_BfPxJ{d)u$`z;;X zaT%0eMSR$Nx3l>W&z?-VmY?`L3tT~94JfGc+*PmIE3#8bS|vaj?d8Dm$MOGHvcVus z^nDgEhzWv7Kk>g5T>F8GbC_z4x5xFSN3QMD8=ieM@!uY~jsF8>XC1<$z6mybIyHBP z9@T+ULvb6JI$B23hKMf*Us`|NV&)ZhZH*vYmq5BE(fi*P)*;6K0f8hDDM@M{NApkZsUvdybTeQP<;!M`xNSGzv$XRIO84;# z*g6Th_C1ZS>td1+eoG6sJpkdA7*fise2!p*8rWT6wy`P_rFHAy=f{8f-$Ixtdn}3$ z9_fGSv)tYaIOs}`5}&v^e?R`3(*_h=Qtt%|k~7mu759v|SvUr+HHy9q!-J~3tTDRPr7_5uSZANhjB*YJeXBVe%1ehi*ExYbnyYAf4js?SBm^uiqm81#mSmyN-LXu#UaMac4PC9KMq`P&u9I=`m%9&y!F>bUv=#AmCqJaz~5%bygja7*nE-;cUa~ zWoh9p-_pYvVvf%EzZn+$U|)>^Szi@l{{SoGHA>IlNR>WCLey2AeFAth^ zyBACA;0etjq?|tN6Q=$w7jfwyBg8n%N0HwM$l6==3|N2to_j|zU~eWsRVSZv}t zB;l9G=ec`l+EoyskeOj6uM|(rW8v9Ktt+yKDlrg(4ATf^Urk#t#S<{4fYzUAg!tJF zCxM;BEk1RW|7lb%XjGb75u#J?UGHo(&+1IkP^87R%9#c~W0TPj(#fKv!kvsMJR0AU z(C{2|zP!~b)kgpCc@n6PyjYt${86T2z8Qywi4l9uIYQcD0#Bvy(c?$ z^1T1@@*#9qfmZL<$qM}HIma4b2%G)F3RwITZW@^hLV1j|6RRB04k>{NZlx)L7h`nS zH{s;JTvEI$m<@`gbX$8ZadnxQL%TQh6kjLg874c9?#bYcGR zOaIY5${K&?$RJ>YGxwkW+l#>`fXpsild>eWFA}C$*ufy&6 z7?Fy<#KXvy#OF6FVNz>-jm?g0YK8Wi52Q^BAg)D!Q+gFVqyLU|SMT?RKOM(klJjH| zuA0#2ohrGzDA$#HN64jpgU9NU0U7$eWM@`aV{@{C_b1Tv-QBCHdjHfa0?%%xlq+I{ zyW~B1nL6r3x1k{2HB+~)TQpJ@mY7yIN_?R0V4l-N&#MUbaa-9@@;tPcjKrb-)mGI6 z;3OE~(gr3n_0j7#4hJN&+D&v^&3xnS->HN8*sG7EmAvhqW69B^mc&BB2ik2+^tpe( z{5#M+ttE4}L%qA*XO>%QITpQ4m2?((XTGlvNPSCRhCbAgUt7D&QTH)I z6|8eV_m74!GNR4{G^Z->+%q5sKwGn4OqA;mMn`fa(HuuUdkhh4tRZJ#L>n{DGY#N? z#0WFNV6-xQ-S0Bm;$QXxDZ&K?z+_&&IQRH8+nVc=1-6nvqZ4;iUDlCE^#})YzU_?x z1t7QqA&@W@c09M1i*R;ktMxyUM*cV)Mn+i((3>XL7Ixz*+dzXw&hZAk?(Sxu0L9aQ zj6%9CQ>p3ji#R(jSfidqJlff`pf!jj z5AdbcC6nxHkn?eov5^{@EsafYZ@itL$}|mpGZs2#Z6;EGblBOZ%nk&Vo?>oh|9JBt zPgexj$|?-dA&9(9WUzD5m>cebirl9b>a7b$!zS#cwLKqd2mKk^$ky+7K^jQ{2hY5j zo7*d}9lZ}^I&$q@BlxLV8!@Iz5e+3JpJcA$>IR#=BFmAu=z>c=}~@=mQ+`GEnq<-uQ!Vs%gIf7hM-kFuA%pmb)t z-OynB{@#v(J!x0@P+jwOtqgG|Az*2y-~1pbc(?J9$Nww0c8Xc30cFHGdUX^iYuqpF zkQW5fBYVfQC>xA_(m=zQ3sG6*mD{Z+T+GrQN`5C)GsV0J;cPpmY}#$7%l- zss14Xt=aH)hJmU+J=WnD!Wi6smL1RzHM@-S`u#)}kb|(~vlH)2iZB^(MF|*VQFNcD z6VNE+!y0ltn-9e5_QzDcWeos7DV>@hNYeOWq7;rSp!UdrQA};>3veTH6XmTmb;H?YrBaiXwr;0VxOV8v07o+RGXTfB5TI_RQ;__MMPY3S_N! zH^MNezB~MbH|9stWC%zfTRG`|H~%pPc2<1(hrz<+ZFKER5T!pzdA&O&2xQoMAEYpJ z@E@mq#F1VkR4a*l-N^ID_^7`P1 zr}xiU!K%g6j&ITEZsG$;5H8)sj(7|g8m`B>dhLkUf^r?UFpOjf*X%m<1!YhaFga8v zKAiymfb#T0`4DEFhY7A#4J_+(htT41%YNH|RhfphNjfI2p7+xyp0jy#qe=}+6HLnE zRrHxb)r^(!wcZb%s_Vy}@i^S_+gLotG0+Qxvg^xq}$ zt|szsx%zL{`_(M5nRE`1?Mk983U9`*oP&A&Z8J(9s&41SU#Nkdoj7Be z$uq}#It$37Og@-v&baUL$Q}Bq4~jf$XTB734MxT4x67XZZ&Olgu5v#jtLZxzSZkHL z{1a#NHNOZNQ(b#-~MCL1avj z1T&^aTn9)AIFr_*)ivi&uRb(i{^ehVyG$_)mSxAmCT8vrqnP&JB;c7*@$K$*oY|L= zqTNkWJ^q|l7zqu_;<;&yZ=RiRqbF34y?+(`=Jj%TTGc~uYT+L-3+^vjHJeLCt>UPY za{3ECt*-F3=jbx*d)s?l&p?fS77|||GL~OQF^877B}ne~PiknA(}?aYj40g?EYYUT zII~o%ZPG{9rtr0UqTJ_WxyjorYWmswSirwFWs5cx(H4YnJT^qTB0C)_ENcH+hnpV+1by&2Px;a-Eb!Sm9% z8qTdzb5KT;tb&KHRQ3pxf{=Q?ZZW29=2$7@a*b)qDuHT0Q>WrxLnXp)M=0HKd#PWl zTx!h6pylHS=g+@)*^@n&2vnj#6IhR}^A&f757fZ$d#yC@&MA9Xv7Mi%*HzH=(OCqQ zTyg*31L()O@;g5cEYP}0WJg|-LZIB{Hh5Uvh}OiQ!dgMycVasmJRZ7LdI@}F^O!fe zLA$0_1f_>9=DP2?W7gY^fLN)O)X?!+pCx?JN>{OYjK646*=P zWUHGodO8mRk6lGkL^}qxeu#VR#S}L}9pq(Amn0kGGs_sBq!?>T=L zEq>clFE3v3eWKu5*C608MOeEhPq)(>vBkdj8lgPCyZ7lUq3-#hBHBcs3P(Xih|DGPc6uv6l9E&G!=5XW<8D0=qfQbw~BY@@j& zk{EFdEY@-%#F+bt8E-2m&{$Y^*)}HxSj@+D2y>d(Y?o=Y~Lpdm!!=X zX(#dESWw6U5h+59nWxF5&9Ukwmz-$D@%2Im_|*$BqcM1d_Y6JvV$fPu2RCMnsLcXr zojrQ&W=1eX z69w7H!&RtSHVea+GL3~Bm~KCS?ulE^wZ?oppVLZxD{}XE?!okUgcleB0P19vAjGVn z-Z!xfZ~ZDEwN2G@?Yf)ktj?KR6QAiieR_!PXW;#pvTu%P9;{?s`L0tYKSAjbha&A# zms9+H#)6FSdmc;eNt}M)C~8S{D@GAH?78(Fy6#kBsM9?Kw@F(NXQHWm{cCoq+Be=6nOx(9@Y2@)&u-K{9*3M@@*0c_eE}3EnRDQ|>isB^D zT|}O%Q={LleBU#SF;{G5FKE=pD17YD&OTRh=PS=L#n2Z5p~B2l1!u~chlS=SFU0zo zZu~;I4@AY%dkqu$5Tj}~X9HBP75*VjPE$63Jz)nidh{c%F05E#EaxHT2BmCXPXQYT ze$_s0-SOFVUvF5-k7&F*qsE5sFvYsw1*7IpE3bWk{MToomN#nyPfY@l>bLh@6qw$n zOrTk6hWMU;UY)qngz`5OzMk#WM0~_oa%no3Jf2g5a9vsR2=7JI)E)&cAS)#sz@vN3 zrD+QD4Ysl#%f^N{5~#-|%z`^7iglt@s-kDE z)~+pa(EqIGul_zmUcye@%(^H8obl_>;mD;OI&w?JGm~jt5ni}Z-EYO2gb)G zp-o5rMs{pSgMqh;zntr#s<7Oe+SB~`ureo>;o^q;Y#$Xo!(tE51Agl_5?iklgyKqd z=D6oKFGNEsdw<^`nR83A@H*#bFo~J&^AXF8uMI@y)v5zG0JLRAs%hn z2=MeKx68&C8L?d80ieftj1Hw|^>ff-(1^`DrD5?iGMR+M)UxvDcXbqFo#pp8SxL{N zc70ZQ5oP8tkRqvC`x3euyvtR;{n{D>}p{h zl!aKTU&K%|rPk0g-ZJ|x*A}fXwY~t%V9GjmNEr6b%st0oH9EN1w}-6le1 zrWo=xB`mSEr94O+ZT&SW2f)5@E+gt{S8*yge#cRUICi|@6-X{^g7_LX@ z$^!mKgbVB7v>b-M;}JZV>JJLfGH9AQ`d#bQ-I4Ja7en_VMe@IQDAFmA)#lyN!44SH z?OQ-Kvs~b@Rz)}&0UlFnYdv$`*x;eN6dQe*Wn+lI+j5>F^W`v ziNQ*9?kw}8?aA^!bpQhDN3~_qn{L#00Q)w2(;hop6)8}C&<_-#qy>UsMGuDA3nRi7 z;+#TFv=!VHX?XUyr{@n*-nQzYP1;_JZ}iiT^wxw&nCR7l>r9AYag=bU#7f__PxoG@ zu|8JkodQZ+o`@T`WMmE292Cgo*?P1V$H9k)bXC=X_amDEmbqkeN8bqC-5+mND%%Qg z*`5$UdG`zVPPOnhE>wR7#%<5wUK?+AEH4Qf)*7A&K^z}u3+?j&kq@u05MNez;l{z* zCCacIcn^l?JsWAK0izlBS5mzJtmMzvTsD&*mGz+uY=(+MWtNw%pRCoecy0nf=zZDb zID%Mxai@14u_^V+l?DSlS8|TKx&ei+kn*0tn6^;&b_vb~IPL;XV9fH88L|+y3jl<| zEy6+3%drE6`P+^(CSWQiD03KX=`yu*<-_k_Lr*m1Grje=9s?5Ku!II4UsghB?UFkK zinY_BKZ$)ykvyIc!b~OngIobGl%17B!jW!<9`m_C5T=fXhuYW0)O`fIs+KIEN?k!3 zb=S*e=G^&F(Kh#UW!I)~Nit-X#j3hv3W?qj8`$D9(T2|O%Y?Oq#cq9iC9IvO$q&&@ z@{PsN?+d7z56bOBRJQ@mIR~bbtnH&~bm9HfSUOOx95h4VYn2MO_uQE@Q6-w58)$;O z$$MIg0fAHwgYFmB_n&nBP)2>qaKZi646*ik&Iw7sH9?9?EN-D635ly>Feid>QX8g)Cs)vWStoydp5)sZ_yVo(=zG%86*NexD;g^^MuY%xwvBh3Jje z4NJRRt!FVgj-TI|Rk}-u#*Xd_3op&+=Ehc0SW*@m8U@R2)L;SHIYI#!f3 zU?-8aXRc=a?r!_#@}=s*FX#>E*PBCMaF?Bzd2X8{(^LUa(F(ad;x4>OFldr$I7d$K zl=NOZRFb8%PHB(JRv4B;ZdqYobm_Sh8s`knpOH*k4G68_vRXR)+7dLV?<=!$E))Et zx+u1(p?YXFuFfK7v{B)p!eEs416w0+!;sVA!rM!x=5tgCp3Q?K4nGF0jStw-qd{xv zFt^W&Ew}%+^d-{5pq&5dSTL5#ayBt^e3F8~NX#^TiX3prdd!n!WSbMs9M*d2e#%h$ zM6QEPVplRKkR>IE*h@|J+Fm-*yp7BThSg|dB-NaKu2r?= z7LzPC43DLbPP-Re1%dVg-&zK8xyd`HaqUkTTNj9)hD+}JjBqsh|5R;dKTX%)cW~{`r3p%T#aE2+R>_oJ@D;JkXEyYM? zlsZg`Xo?Ie3?(gGd0=RF~4pn=wu~i8E3qE$e9bU z7siW4*qzQ}n|g4K)^uQevXm4xNQ(L<68qXa?RzFKL2>Uie_m8moXT^;;pcDhK4wVZ zE*-wVhv^FI+_@New~M#M*?y$YBh4MB;v0-(#K{Ae3(C$*PB3}nyD3dpT7eJP2M9E@ za(cNZAw}|l5qz0G5>>jVzyMi+b~RdcVI5f5z2}H_wc|6(M+fRh4f(B~OpYtC2z$@F z`VSF>XeW!RqvwLeFMr+`WB-w36*4XI^K+#9x_e5P>zj>i;J)Bn$~N=%O8|xl_r2bR z63got+u7Ej@yG%v4bOmxdu4%sT?oFH%h0YB?WHEz(vdgD@|qZ5_OVT=I~cayjApi5 zrbpjCsO5Vsn&3Zq5$Eo-aKR%#94};kl!;-sIqVdeJW!WAv`8zWEyQB3Q*Wc27VDT& z&VS8Tx!^y(WqcqYMcRAAmxn`jeYSuf= z09l4k!PS8FTMS{fy;-0~z>JEpTo7{9G;fLt07I9w4S@u^%gHxqQvggfwZ2 zL!3XLCNB=dEB0dC0wx*G!Wfu)N8^E1NZN8Hg_vc27{aVDA8`03w-geHH< zvkq>*Knt41Cj7GcFYhp%v%Z)GU((Y9CPv3Cd%B9rAi|Ar7RHYEll3Q0p+1-*`{|=LuUEc%zJG4d$%+2f+8asxq$T9-6K1^Tio%D zjG$YQ*r(YR+`hZow_v>W_$~kVF2Mbk@Y{d{JaOT`(g~lmU8zW(T^>|e?yoT?*31WJ zT$`$8@@?KN#yEj7>_YWP&l$Oz=w5HXM2k>K?xEGwKF7o}t-rMY1`l6{f+H8JgY};Z z0>FTY?qvk{{2rt(agTmaDtOpfqr^HCMBEaZI({7nmgCxD3)dUlL=bQsctP=ya>cnk z=2Lm-xcO1o*b8A2O_}eT)}bbV8KAo=C4`vqQ^vG@i3kXo7K7w(;QQthe*^&+P(J-6-jyJFe@yN`AX|vW%1cGNZm1%B3eK+9oP`alErpwg^>KV_pxi3 zSWTBf;(dO|1XLPJhgWf!yqV_i7&xNBMz=1Dicq z#TFmlxZ_yn)NMpKI1}NOJ;RjNu{DKVx)5-Hoi*N&{2XfhAwXMoKnCj|31-~78vfKq zY?Eml!wg7oh&F}Og8?RN;a7kxtlMfTW-qW&S zs5J{mU*RU;(`>zu#Fgrb)4Tj?L!;)0ZY*uLpLiZ?EXXWtF+>VY=H5CBbK&ah8ar~p zxp&sbMVQ<*c1~#*lPNlT!^ za8?{lv*hr+tJ!&Ugql&(PwwVgT7=TahZ|umC@@b2UhN`GJ{pi3xt=AaJ!fs6!FpbEbyBmnxzSXa{CfeSxO;`MwM*4(nr>)g-}+^bB*wW$G_@Q=KF%D zc=o6#HmQE7n+0ceECa}hC+2JquBDMG+K2ORQxAz-g1!w!2G&-1g<#2 z#Ek)%)*D;Lb>lXqoR<$?&MUmWzeG2gT)OPv8a^WtS zd=)%?QV(vfg18R$cT)u@N~mp*h1rKjNyqOxJPpAlWzm}(raGA;AH02i=ToBTrwCJ- z)9h&Gh&1>4$00sfwX-DEvaj4IlTj~)hTODkg4u;E7^rBX*A(-vPs%E}`KE36#Zhq8 z#1wQgZ(Wrs__+mUGZ>IyU*RpqseQt_eOiQ9CpGe>=#=?F(iPc2<@M*1#u{tJb`TFc z$f>$$U$V1SsQ>ewwL;b2RAlap6Ihz#8i?ZElotup{ZA9}5(V?lV1=e*?sP($wCtN< zOV6W}Xw}Em!wZCr*vvhRju&3a-gWpOg>a_FM|88Di)H8MToPmZP-yP;r6WHF&DB#EqPRCHhn<}XDt*TbFV1U zqEr6Jx=or7kBLN(IK!8f(2u@1B8zKaVkJ41V9SY5PV-QY(r~;;5GaQ&c6`HJ+8=YQqLFB)|cg-A?pgqm_qy+Dxim8v;jh4;tc&W(r|vUXgsiSPp*c`bY9Yb z$M*K{U~%EM4bJ$^TqdN-80(;)!SzzjJg-14lElx!-pc-)k>W_Dq)U=+EoJ&IcF7&8S-5Iis}();q|3BhdetzE`nwa2S>_^Hz7j&y##tCj8C(Wm(S zHsRBy(y>)_(w0i;LD4UwG79EmM1!+2tC$jQxchxD zKv2=*`o+FMU&T?WVlQIZ-T6A2oEObffNtSugn)UVF)nG;7AA@(EXFG1KP`oQUl}-B|iG+hyd}9zrOyT-)8{YqJ-Z593mh-Ou78e z0cQaz1OM$P5dvZB|J>sDU(36IlKgWMaMt=3EVle}6L9vw@P$aAB&$9;S3O|f{m5VM zijpEX^?*S9UmN2c2}FY0Z_g=owDpwUu;ViH+3!ZSo(K*zLkqNCa_#vnToe6QDq=|v z;B=&1)@2=6{{9-Wm4idm-juJb;jicrKff*TP5$CNlHjch)P@)m5{kFaSbXV0hN*v2EQdFO19i<{@Vri bj+Qo$z5nM6zP#)F{luGUFx4Vu(`Ww$d`KEl diff --git a/doc/ch-system-design/img/slot-sharing.svg b/doc/ch-system-design/img/slot-sharing.svg new file mode 100644 index 0000000..6ce3921 --- /dev/null +++ b/doc/ch-system-design/img/slot-sharing.svg @@ -0,0 +1,4 @@ + + + +
FlatMap[1/2]
FlatMap[1/2]
Source[1/2]
Source[1/2]
Window
Aggregation
[1/2]
Window...
Sink[1/1]
Sink[1/1]
Source[2/2]
Source[2/2]
FlatMap[2/2]
FlatMap[2/2]
Window
Aggregation
[2/2]
Window...
线程
线程
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
TaskManager
Task...
Task Slot
Task Slot
TaskManager
Task...
进程
进程
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/standalone-arch.png b/doc/ch-system-design/img/standalone-arch.png deleted file mode 100644 index 766b3801ae9a4dccce37465515e65c5ef871adbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120080 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

4?c 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%0AhBu+Kn8}-Efg!ECpu9tV`XN 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

Ve5wp6W-*+=|Xc2XHt8SwT?0$`!^ye4g9@J~AlP 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⪻xVrGgXks!M=-EeM}hbMp}8SPF^vsg>+OyB5|ocy@ydo1BA)7 zWWFcT_G6>$D%JCh;6&FS2h%Vcu%%)vn;WbwKROFC3-fz0>lM58`nHxtwMy*MYOcd_ zhLx#$Iaf^JqeK*RQ5;Ur$WY(QMTuUmor42O_1Lnq%exe7=lR)j|I(S#@&HMJ&9 zM)0r%Lbs;C2}DKI%f2m*Gl)@W0_z3aJ7{fHuG5tD@cu%J#7Y5~LMOwoVQe=Mjl>l2 zi0&;fMPMC3LL8<7CQQKflMOS9Zc)pTlXwlTB6wO51l-H_>)49gH6jDL-DTrln7>E4pbzAoJ;J z1{>_PL~T_{!3?#ya%kNKe~iWTn0f?;|z! zktJkrHv#4@IcH!h6G;v&wgIp4sf3xRp{{B^2l0M$>|4%e^iB#lu-yu>HPJ8A2H&t? z@#r<4FcnXtum89ML~-K&k?Wovvl*y)*?k+2MOd4e(q3_R1kr9Hb2z7t;!}H9t}E`2 z(R|6RYM8If3)>^48B_6tyPu%QB^r$*q9u=~w#jF<`yM~5w1sXHnHrQdr#|uIG7vG1 zZ*_3ujjJmB;l3u%XbQ1-OY@VpCm9SwwWGx?zwmb1w;R@8>aJT}n)l7Lmo$ttI?NI{ zfRMgXqrf%(dw!>Nw>f-iB3k&GWviKcz7a#CJ@1dL22RHAL)1A9X> zA^Y&_9K8+TP`O!6zSe@IZ00iYW|)YA#Kn*lbN3JeB)DWh#J=Y^l!XAYM@kjd)zy6u zz3qGexg8@xA3MN3`*we6jMQyw_fZ*{=_*=ceFExs?SY8c^Kav!x&4d$e0rcC&Qr9B zQkW{Lkl8NA6uOlt9lLd_bLmU7DI*1i`#KpG zrq3Ne@FZQtwFx$SO2~-JP#?xPvKlar#~_n(ZWW+P}Ci*+n+p|^X+;K z8am&W{{7XAFqmHX6vg8@QwFNQMmCx2$bC5yNwX+omwW`5O-VUA_HHI75~%Dp<=9nz zY`*J2Y1!gPYDj)KL>wdtq>&VAc*^d4oQzLNp#;zZ{fkbenc|xqG4f2=Ek=*`N$#i^ zzkco(*ucw1GmwVoJH(P7(~x_q-zCK*N9ZU=6SDah74lfbp-J z^xn-#^U`kvMX@nVr7c0FGEwKxK1+GC-RU~pGTS4yqftpjD-fId>I z+GbenhJ-Q~cYZm{EP7q{gJ?)y=yXx=Gv{xA{`RDYk(A#B%FNq*LC9*P=lEY8 z^?F7gG0 z>(&MIp@>kfTU%ECR6UG^wS*1>v-4R)!)VP%2f_G*hgoU6LapCrUGQ~FV(Es>+l3to z7!y0|iuy!oZ}eR1QBSAmCg0AeV}q%pX2fB^q8cZ8fJpO@TtY#lZco!|`4RDyxt8dq zP8xYIO#7(KViO7GF+OQpHV!T8KnAF>hN}fVR!S%SEeynZR9rcK5~OOiu=k!A`=&`Q zZNZ(El$Hu1ySh>T!hRZ>y+Kg4f#0R#2UwiOgkX_Fsr1X!)yXcHl~{FJprkcHh{Nm7 zaEz06q_pw#j04214}nrQBtSxzU(!OC)n%9MY}=|fQv)BuC~593rp{#OYcG#D)%I_uD|pFbvwlaE|@FrM3L9UV|VRtOve3dt?c#r+Jl{PkZPW(=Cv6zHz3fL6H-{U9P+6n$?~Up7Lzj$G4GS9)k;~Z!D*gzJ2z! zE^py<&E9OgpPFy~{1<8ZvKd&1GpXCE=dGSIpLP_DynZ5RV1mOWrYl3FfaPNY;i`w% z7V<2o=!@WApA~lW#d)(>OkTKVbF!Ow3-X2eIw*&LW>`}0@}a)IWn$*th8-N9KE$Q5 znbr9oqL`Awz^+$Ief0$FmzsQglyi0&mut2~+aW^L$fR*he{GAo<*H%XR&b=(IzI)OZ(U1exm2i@N8DKa6_3WO)C>CQ zeq(ra0$~e=OJFV}sfcCb0jE<)a4mt21-`-$Xd6uai6`6cSIk~6?%t04%)R^`)b6^A zk1y-Np@WBVl#WT@I*f9JzMF+=iLOYwOY~|vDKhzzDHn0fI2~No#j2+;zp%P|JruthDRqMm^?&BEXk z4<0;tE!^@p5Zbu#Fu@@J1t>=vm+?^Nc<@v=ghfY3=Qj(|0%j{ux}iGS#_II*45>Nd zBI$yHVxB5i*_XB8p16qDzYr|u2%NC#9QJ0)`q^D z{WERG3h_-~mp@rg_Wj?stmt?oA5Xsy=9&}iFmeGl@Enh&p+vP9(n18co8nZ+VnOrE z?ceX^3z3?)UWFnQn;A83z*j7RN@GX5TPc-Icv0~Nr{-H%ab|cM-1XDd-)si2({v5# zkY){ccztKuw~s{b`c3sY4|G{0qKB!P%%{;g2;-=&40RZpfxM?b?urW_@~qsqq%*AO zTD>Jwv~8JV3FlQ2Y7)((6I1X+sZpJiT^c)@-9HVKCBs(sjdSo4rq8mXzx_6PUrwu# zG=f_FlBTC@`57tdF5K(g@QpUj%`FzGykMgWMm?TH(FTY%OG8OxBLw4vKD02K&g7V&S6)xiW%vOzAWAQu*vV-?!A+WqB=op#+yDJvzifdN zk+FgEB%DTeMcaF;i<04m@kNFJD@Pw_=Ti~Q`6iVVQP@_M z@umrD4XBSf#d|=nXNZ$6`GC3RtAGNgxImz(-k7ZI;Dv5djodyXW`gZz1Q>r~(tO6xL-xfhyCH}D+VsJF+u_XLdt9MsR=+lck zy{=PLw%WaaOw0tebA?EebQP>I>#Lle|#)ODXGtU%oKH7V=-Vh4fUZ$(LvKSFfb-Zo}ncI zXh|p`9ceSSoJJ54OP7CNc)R?&lgIKB5IXA2*1xh`3H~{IHM9M&=+0}(+*e?eCtw$u z*(JDEV=)&z!Q{x&9=naB`wp@^4uuG7hBZ-Yp$rKJsQ^8V5I`uHCn~>Sr;iq$AJLl+T@^ zs(goKK=6iDDER(!nvAVlF`jd@7k05Hg1H0h@$I@IYO|S^Yd1H}ppfo35|Rhy&j*DC zVuqm@HYICuKUGak$kNc=aD;g~6kEA;o!B4~_MeWgG^YnohWU8d5q7NG-7W&6tG^Bx z+3{Dcb_;Ka|HRnSQ^`J9s55HU*HAraHZ*L!j&wzKWlK$GWoYz$RKVagLBj&G+Vvv*}B&o^t( z)Cp1{*F$6 zWIwDR$T~nEf}_>^RBIFU)jvXB0XyEKb^iPEylLy6q=9bENwfMd(eNX3ljP!pxJ5Rz zdnEYO_M`Z>-wAmmjO+f-#0+}l_U5!I5lAhFc0GDARGY$c@G3psvv-mqb(iPGjJUZ8 z@c>jcCFR*TchA=+PUIxAUeRHY7-w_xPd%4B)BFo1)_WwNyEyKXQ~FbKU)|0?)H^iOsTG-0SAbCJlj17T!Ln@2X3n*h8*5) zC~bKsASJaIzz=I+dM!fSm2Lk=j_;QkiRaw1aXnrUicXOc6D$ns1%KM%qiQD;gl-Tr z7hxKA3hL{VCLnj#D*Bn*;lL1PI(hEgZlZfaU@d25)uO**v!`{%Rj^>V2@!)J0Y8q~ z&X-nyE$3U6{bm;#R?Ha^chN0;BDk#2AFhCI7Wf(62#|AIN_@a`*Qpd`qxA;>I&9nT z`fi?*p=Hyyq9Ti=NahjK;k}0a3!DkwM*mkdw}Q2uEkTBiiE=T|_^xVFy<+@XgxJcy zn-526D0e9wi({v`CmtrAt#Hdleufs7Wn2RI78U4mvd^1_3VlZkyRFerAiE`(h7QI1 z2g6jbiQ&7+Ub53lQrlJw7PD$#I>F47bd)9Vw1a&{;P9PnrlU3n6&?QM2k@X__ax_# z={4~CPR<|T<{o~^D~PT(D9j{Vou4uuq-2ZE5{-j>5dvE+U0^M4G2$XqNj z4^kyl?+NEH{6Sk=dp{$UJXZ*tfI#NCA~x<6V?7*4BuoB4Yr9_X&`}bri?N1LI#IfB z;H`tEfm9!N8Yp+%t<`heMvdEtXJEu(#w1c~cWR0o6}m@~>8@`#8T*-NbC}MD>%45U z_Eq9gA|`8*+319793?Q3I86uX9@Gy#sJpZ)^{2kdk5gl|Z%{3S4nianBn4P$E*q!o z_@a>k;RhcPno?rq`D>i4jYrxB77;rK1O#3*&;2OD-5o==$1~fpnn{LI>@(7_t=SUO zw-7O3YJMBJZ!L+y5h-f59vs?FJIHsZQlsVp9?01^X*lYZdWaieSZFBR``XU2;o;u6 zhp*VBbz3uJQj<^(fUDVRR0#%je2VurYwwSb9@?nf_E(YoV>iY1IkkbF@z7w8fhh1z ze!$y_n*<@3lH{33oAdfL(P|}w4si~<5-*R)Y@r%`kdf!ar1;&Sx_Ig9g|i=0WO|tg zb8k^m&KYku+z{!FI;uyLOLL>%m}8L4$9iDx6x8lpI|WbchjzJ(gVe&yv^eQr{&{Rl zjVpu@!4ZXFoJ1hR&p7emIeE@`;@&jP-j5}&(+WiN1@9pqutDSeCOx-9!j*z}6SynQ z9UR+R&Fda{m^aG5(_ei{!t1R1)G)XML`*r5Cg4yk#XL%JQI%*l*+)1YKt1(c&i9eR zFW8UkT4rIUM)EeHO2MhSB?v(cMoDMT4I#CyqVMK@I?6}G3@MvjWMT_5o(s~yG1wkb z*E*J5hbObhV;2)UPxaqOpz*7qSx0Hy8fvaaaT>3_HNs9onCpMqJs2nqeW!)~Cl+~J zYJa%g7LfTdbzcQ%3nVyxOnYsg{%cT_`w&GjwFAnO@RlDJX2Pp{(DL)T?ZYR~R?Fk2 zP*IIHO_bS7WTG`s`NeBZ%cv1VfhJB(V!DGLZmpzI)x+z7mOp&>prNmSNaDBGmd3vK zj}Kr#3+>(y9M+pjzSZmT30^G8KE~MXv?doBB!0hHxc>oew`*t?3GuAM-l8fhP8O^wR{JB#3afkq?j z10Ws2N+2>G5v&P>ypBYquAic%S|%6*YpcJX73ZSG`SRYruL8e$_T0I)K}wzDYHHLN zr4~UaUNGAMK#9y;Z(!5PLSA>5Q$|Kc4T!%87ise6G?yi-0Oq1kE(2WwOlm%$i8Fis zIrrs?L!S$(NcPj5k`NK;x*?wseOZKy-xDMEzw3(e2=Yp|LcJcl#*Z zN1V7+)h>Zi~7Cz$J_lHkH(37tsfSrxsnU z;*HB(iNBOyz=%j92|E?oYXwj-&WL2QtnQ@Fwn6c$PmN<4Wg1K+HttL%7B#> zg3A*!cbD7hav}7^>A{dQDlC(>Z*D@~CLZs7eZ4}gjEjbb#=X>xB1%^0sr!RMvMUSm zj=cn_j2B0I7NX+^hT;PHGz^CCBEOxVa@U$TaWMGMEy*NXSM!Vb#u52iAX9JxC=iF) z?m53OEmHurML0tSK^DK%m6yAv5)ELvSao`BR`Db`$mwOtHS0r_VW$)g0xJ5}WKTVzo{p~O|tD0h;V;ownM;5H9F~)8r+I5-Rb@`};78qH>Cs3^3G zPHn3N+W|2d3bP0Qi8rL=Zv&!8!Cpnk&xXc@p zf%JDS(@jlkNHV*AR$<364;0G7|JZH%-QmY)Ho{Zs2z!wJPzS^|9t~8I6i!ua6M}t7}}@Q`0~mJD)$eS`lARt9$*Ir7#mN7#r%!#XiFqUyQ;*e1eGsJVFFXvNNFn;ySyujAN!; zi|TZc$2JW`y1Y-0{I0sSbvVP#|HPyFraC%LF4a(a5W;mIStI}j-Sz?Z-1)Gts6-gP0| zu%PvjG|oTPmDTRbGI1|dH#5_UE&KD|UYm$nNT|L_EO$y!!C%sZf{#Rg62t=jPJ!ho8RwI#@UQJgh1O zozb?uXw(SCqioE7N{xkJpi%1{MCq8@s zDl;5DGz%c;DhNh>iPGDMiV_G6D6$S@jiozCNlaOhhBDW`gy+}&Wq{D}I8FX7DF3SD za^jN3&TS4D_B;BCraj6a|GM6X)}E?7dV%7x*A$Ztfa6(NG@hQG@CU1WaDYPxjzizc zy^Ah$ICDuGZ{TQ@E)=Z@4?ZziLiPDhV}T3#yf3vDVBZjgcv)w|f^db7bQBur4Hqye zGf8+8v3RIq>r1dqm}ydCJ^P$U_GoOQ;)yn`>ZbSQDzh8vYI3it!xi}hFQtdf%!d8_ip7`qwG9FDUv=S52 zgZ4=|q%GVX@5l>YQjM0}4Ozf?_Rm_J4)7<+*WWAq42a`)%zgw3pCA>0%J!xRhke%O zq}h@%{v(o+YrXwCAI13N5YrKt2@W_>2%XUg55p7QJVlfJG;-*vpqYHV?dnU-WWthV z`$jXPfiR)ExzDG9cSFZU&1Awz1>@i@c}n9AZ2K?kAwgM>AN0PP@HSA|qVn>!a``2v zKM-ZA+p*)$6dS{`T-}Ze_{UvIz~knDlizZZ7K-A~qnMDAaYyc!>!$mG<47WX$ut&F z{}U~0rC&2&=(g(W4Byn(Tyxs(%;NV@g8edDl9y9fR(3qU=1bl6kvz1EsBW)tIsI6_ zo$ghtHXT6)ennImbbVBIn>O>=!D&l%ay}JcOrXE_${%plii-3NMgvWrCgf35Qz(Rd z;`T6*4>wKzE?{GfR1P)HAAQVy@o9V*K)lQm~jz{-~dQInLf?u+~5= zP9tGs41(zJ9goUBib_@3SD|1aSR#i9+yKNt7EH1?@ym*N2@47Gy!I5(P5s&}0W4gU z9?6ZQpz!c;2U##~s6c}X65Gg4k@9FH^ZYXa_|wjOA}%sbI5t(5F6ejah{kDb7-H`w zAZOS)u9 z?HY1^DY3PBz=rJCiVIDVBI_^cIoWPh&&a$!Ge~cuw-(>U1?yjgo)#>%3*;&rB@aPl;eyrG?%~V2YZz52Od;~ zNMY{Ey`)%ICP<04?!$G1?JkyvQs@DLy(a!X(zYW4K(a!^7kn>CscT$JNDcAa^N2 z+$K=c8;~eSw7~&G7*5x3GqCw(gMia!4)T81!7D`PNgqIC2=*VRoIe%Of?5 zUG7!5*nPAvVS~50rte^tiL&zxg^+wI)yQHb}@1k$0o*!}@*Oy^l^TQnh+o zL;Gjwb%Q3Y?0;_KBa^F^=5=|rv1;b#<{g#^mJTg2(NE7|NTN-PnpocAGQr#f=xr0R zz`sI*z|p}6wAY&hMb}8pLGt0H1=nuVa=l+9$cKD%c;?Y=AOCZsC)syGm*Yy8-TZgw z*fUiwpo6*^9;3|jwha|eb|rG1J{P{V{NgS7j{(dF*Sn=H4bS}HINY@>shlfg=hLs> zZV!D3GjEJ7+1&MI-*R7agLJ+O9OgxIZi)^!5K-b9DIPs9=Mqr!W#<37Sg5y{k zXBMFSMy_OaPIWxe`t12!_XFq^fj@VU=~T7%0;+WgS$7xhhB;b3)2L($-Q)5WkM1Xv zQu{WO(d;hJyFj1FQ;%!`u*Jva4?p}9-@lqd0KF*S@PbYT` z3Y5lRs~$RhSnHD^NP=AL%puZ5VYo-!b5TjRkL1B+A zN?-f@JmEWUbXDdm{w~hSQGll8y8Cyy^lh!M+(;SNs3t;H4vvOfD|_$UeD@gNznwV7RM-J`YS^M6f2> z?GY|Hw0{h&1>Q!FlT85wRf>B-BZJF){UYeH9^x9J8+z$+ZT7`Yj3fy+@lY39Gfd8l z>6(9ImTpWkl!bONeL@&zh0}8o8vV}5{MpFK$w>tCE2vf_kVls*3|79G$n^t9Gm5v% z89o&GSGEdH0U7;XF>9j2?2wKm>{5Bxx{<)`j&M z<{cA3MqC7&A%Mew!VU^5%oQy;s?|S1Dz&}ypBv}aHXp2qD~dI{dQP%q!Y(@rEZ2$31c8S9n_U={iy7vOj!k%%KL)Hr*VO~R1j zRq8I)^K6@2MGi>d>+x1N-z)=tRRfzGElq+E*JqgS(vi76uPnb3j)L#WNipk5Zx{M~ z2`8S`@8bU=EUS{gg>b1=z(G8PT8F$J#FEaBeWN9+Q5TpQ1dRMJE0cSl6fil=EE6j*p1FwxhlsM~+z~PtATb^Fw09k1Q{6*EB&Z;Y@sHEEs3_c#yuJf0 z)zH&>gyfLy<1Q!H$iO;P(I*I|5WEr5Npg0iZ5wn1Q1Xbvg3nZW+8!cugP+6gpP!#! z*M?k_3Oo51_A8p9#=!u2U+#Hz+>4ts$tow~;%^mA)YMABqK72?I}EVO#h3su?T$qi z7@GO}*BQBZTsg%-B5%P~^ndW+K|&+#VOj7u(W1fzFri!uGwq+&yq_nyiHQUULeuxw zpNoB8VGs3}nkZDT?QJ2vPlyzCw{mz1mI(ZdSn@8-kv(Bgo+R3}?T%4~@E#ly8uf~> z@uHyskIi@4c@(Xjx<9Lc9qR8oafEkr7!)o1o`Ri!uipWhqw}Mv?g-IYr?=CXqby-P{4zxA zgy<~UDq;f$91!&~vADJfFE+VXKM)8I4r+>;y?iQ$<)0ozC5*;FP-{TL?`Ga!+O(@u z@EL4US8NDTDHs z`X%6GC9GAX{dG_&XryWb*QMyFqn8QUlg}#iwuIIFRbe3`yb$IENY7z#cwK3*6n(qr zI0Aw0lj?o9yU^|C*{=0uMsU=t$b2sqMHJwXIH=yv!4-1wKUGUsAEO4LmFeiv6G9mk z#oj0{UJnZ(HPjWOd>tPI)qm7R=*a!3+*A-lrYQGNQS{kK5`N#7pAo_iCfz5nx^nx2 zY$qUl1F*vTi-am+gbNb*mW`mBv<|U((zKao3!8uR$PLFE*SVgirK|h&2;VYjY2{HJ zE{7>D@~ylklnrv!kn0O!qQfdP8MbRciOX!Sypn?!;vziHk3zEj<17w)@1O%zWqiwY zoz4WO?{`?ZLbl?XfEU6x7KRw?P+UvM=pf@=)y_MZ#`Duoa@~GTZS7=j&=t9g%o6-W z4Wa2Paa0#D%Q!Ov6H0;&$-n;X0ea8+bQhu=_X<%sQ{ufwr$`DCvO0(>M*rIaM1dbbMPxV60>nCB*m9Xi7NNGn)^EGtCyvEhpiZi3I@Z>={%!)t@f~JuYWTkjZIp4a{EF&7O zfbCpZUJ13rJOO0VeK&o9Hug<_E@baghs`yXRvSy6#pc{ua!1M0n^577+5moSVHc7M0Ume?Qd zBILksPPg`ynq=V`Y`O9|@1H5V_jo~fra8PdQY#Lor0Trg(dt*Rh7dz)2X-dy6@v+# zHg&h9rDaPG1V}(q=r#R}9&+cNZimsaf4cAzw?i(>Rnr&H`E zR>#@KT7TLRWCVK0#I;#)ZYV(65fZe__Rcg*^j?Rglk+XAnNjf-J(PE~nDukLN&e3&MILEk%<`D8s;q=I;nZ;&lj=lkJ_B)kElH)Gz!48Jq3OMZqopiY;jt zC*erOZbyKC2lvM<`UeVe@@E&yruNjo27^x26=0N!X7U(KSR(mxpvuLNb1YF9$pAQs zyB#x=aJM6vplVA?YeUXADsWhA70IxmKsiPe3Zbfyx=Y001$rNyNtuYj7S*N%>46qL z4h{}E8HZKx%Mjt>79`LHN?y-IKJXI=+T%n84F(NhUO`KX-jhvaUkc(Kq2lYOn<_9o zQ+;xF6UW+8p-n0I(RAnoYYDx&xmnYuLB_;_4?TmR$)QIWQCu({fy$inr*d2&m$j*R z!t0TpYd$!J*Argvc~S7`YneEdkANmeJTS_{oDJ(=Punc=zEXFL&Ls+4J+2>u>Iv-= z*`XTcMKsd$Q;Z*cbHC{OS?pPhJfb>aUlw|Mk!Qwi(moVcXq`YKs<}pv;eFb#JtA6Q zR;d)AsVLpGY+hej1hG}{3?&$DYjG0X6Ml#6^x5wqO21wL9yA9F>uZN>iiC)U0AJO< zArweyZ(Mn$17??}6J$PNePxe4vRnU^4%No>{kM_@P;Z1E0s?0Y+=aStJr^W~ClL!3 zOcwjC5E3AG_JhX_?nD~|ggD~5pgTm__XJ55Xixl%4w5)l5fz93#+op~(tr-~zG`|A z@<}Z?SFi~rrkz2RBmAPEr!g=lr--c{CJg4| zUqs64H6VN+(j!O3gm;&!-t5_-*)T&1kgDw9XyTCF6(7m2zPh*{tFB8nrqwYJ+3Fvfy z-nanFH}H8^-bZI>q@Y5~p~2?+>9=fz+~I`-H|+v_92*Nhp3^-_U^EFiUH94h>!Otw zd5I-~h%Wep=oqkt$VAKB${1hUGH(Wtk7`ZS)FnwXAbugViaw;?xSkl;vla~0$h~}X z*$@EbP9O54t;oWjsS{Z@?jVI!8RJ^C)(gc6`R>n_Lcjdrb$b2UKi2ZN%gzGb>`doL zB&|;66UVhd-{WRQkDs9~AbEH>tP7+#TkAt1?!!A*elf^dhg6mP1&ah1RKKJzZ#_Fi zPIM7KZOP+P96uewPvQYF7)DQo35Nb@t*rk&qCc4_?|6#Jtu_m*n-({$tgJrFc0$Zt zYvMU29ZPozJUMFYhPn~I~M9r%Y3rtB>yF*MqgVJ?r(`H-qcl<<1- zE_WrMV*M1y11vS%PXzfmp`g2jQ0ZeSMTy>+QX->d$%;#s8%!FGByPt+Gtckm$R4iK zF`bA>qjSVeDgS5_Moeh{!$y?&0acnesQf#V65ljlLZD&Z0Coen1pK?U7Pv}@JzYD1 z0Wo+F*ss`i%6;_pukp@`wLk<-$4!xTemX0}%sW9yw6(?;-K+Kxptp0Vaf|)zIR-Vih7AyrB5GU)HM& z;>~71q6K7+HY>Q`f=6j7Ti!%!Ssje3gpGWirDR1!F!mrgdoW@k*O6)~FZtm#H(k4a z)Bm(Z$G-()TiaLxJAq^o`QS9!Q-e}6U`e8M8f2A$*v?nmK7)?Hgb;+1qos+cHATbV zHVZ(v5UOUd=TYicLzvPK^Dr7wB_;%ief{eO^q?zgpN``hh^T5;O@6K z4S*Ek4Ih`7eKrl=8x0x=k=9NUzG!&=><{2g;9=2&VNk>)qXDQ4oHQ(;QNQ_^TUxyi zp{W>*ZN|iuqF>VB0pO~`AT5At5vzXyC+IFY%VjnL$3*XY(sq%rQZP7nkAF>W!`UNY zAt4(86yB7gCk(5*)h1q18t$9{M*~-IjRGyfhR2J%ti|y!iE6%kiU@< zc{Uj4>Y#f8(ZImI+WHVK%S?Anb5-3o?2oFrvu?QN3V-JdN-lzeUX zH_?3`s`zTw^P=v_`ZJEZXj2A31|01$#?j^q5m~wm^#y&p@cLlvBusoCY+?U|9SAD| zo+91^1JO+~C4V~6L3zow2`J z1o4OYItJ%8_`?hIzh1#4KOAjzA7Cmcxe4nEMK<7S+~ZbhO&;+F8am{)+7Ajt$oddm z9i{n2^>=3Q*xh*&!PWi5!{Q{)Ca$q-!jxVnU=qF2gp1y@ko$EvC;#W!K#U);rf*>a{6Ovi|Clrjs=Y9>u|WuZ&=V4xy#++W`o5nP zAju^M#hs4Xq*y|EWKVjce1QM`GjF?k6s|qd^>goJsAyu^;ri{oyYcU~=eHS-@-sGV z{iF9R-Rv}RRGXWkwBtEaA8#Lsr0Js=;z>m{92QXL|R>wytn4p`{;XWaA#T+loDc7uq zX!E@2`3w>L0oj?Vl6;Tu)8RRNRQnQ1Rv>HV2eCN$*M)`R15U^Gr1$E1hK-&kk)mxI z7(X9oJtldzU_NV$!~`Z#xNtgL?{wPeblULig^`Ldvtkq78;i>)@L_@m8kK1ec}aVp zU7TUAI>7SOc9E^1^G#4)prHsA8#j}G9EnL`ovK9Ai(l{BZ-%)AI<^L?D@<5S#_c=r zk?|4o)a&DTTEdojg8jRA#<|2n%(Q{1iBOH8U*`hi2=XvyG=38+f)~Lcv&p*PDxE7n zdCV}2?q%j1;&m@yfs)qNI6yy4lzA>rxuNBC=t}YhFLK zQ+K1J+iHGNVbQMQWc(6|q?0D)w>&gKd>-QPheXlEna;)B-uXMMGD?b+|3YZ|7_+>( z_>nhEo=FB2o*%Yctz($dxnVuYw(mUVC1L0x(z#1C+`>nY^kMO9Twk?hz^q~&<135@u5&HTq+kXTZow->$}FB>Y5h$%X#IM z)@O-EYS`Wl*Gibo zjmP-*7~awtr|S0}5BuMv`bAG!9xD1!wt;lXo@w0^tLTYj4;pi?G^5YYe81mb-d<+5 z*-md6d`T@eSO>gfBuW5{&0jspGt6;aqK2q0k-vfH*atcjgZb2z>Cx;Jc^n`#;_P(m zr6-p$&xBx8kZ1!H;cH@0llRaBX7+vUXNptTkt&xQtS94WY%BIUSX>=DX5g<@oFa5Z z&gfs9Xt zaA0q>TI3DhLHivXrDjn(WpBcnq5^mXm;4T5`@y6EIRmUBqgR|<_J&Ta5&8Xe3X>TU zpDkWJqGq$=t4}x??!0Ymg62bt%l|D{)aN+UDz}Z<8hm#Dv1c7wOnew*cKj+21!-fn zQ-{;R+I>hK))3q`X->!?qjM<1&u>dSz5y8n5nbiuPHm+J0>sD{V>`>@KE-mn2W>ufk$hJ0Q3KK0RSJ^6Ld_JDhdZ1snxko{Qe~nYC zORhnV3+)(G6H8!0hX~j{YioXCCjUVPWE$XikZJS;dNUsonJ7w>)4O6wuK4zvT1u~J zD^hzy#!(#~w(dJrV`ks5>5{G5wnmJprF>>U&Cjx~@nk3Qu>gDVv2wog>ZLQ1=c(Xg zxsa}pB2w%CSTTs*I=YDTH(Gt8d--qI6N8Lfyv#@>f1fYxT!XqhUCTV#)8`cqkWWay zoxHaX&6Vk<*M=U<7jkuse8D;ajMZg)L^8&_9d#VY6AMNbedP0AXwx!!nSi&#Rjxl5 zk>DQR`@w_x)~pgQ5fTCzxE+WdM73;4&r!VwljsI%a$q9t%PH;H1Yoh$FQgyzc!nP0 zC9FG%KSi8U2l5CeJ2_ywwUp$wK5^J!FCU%D*B`?0wY8!XP*=h2_TtRoj?+61di{f) z@2AQ0S${qU)+3;-^$uufXg8jxftEX13-lktRNI6Za!Kj-JbgY1zR3Um(K@m(CCz0E*9Xd;H5-Z0Cs}=>^RhR;2Dl$t$+N>7KuCWJDo`Q zG|jXryO&+vRP6V|yYDHFOp3^P&`BE^3g}RL9!&Se1KH^3s=TzAR9XYhU?(<^$8$>x z;@y%Haw_l2$8?w(kMZ0TfH}b01e>ao1;U7!KfY}nMo1CGfo&F@OK1Omnk}#u6Ecq7 zO@w*^;PNSuduxDJ1h>`tpAO|NSG+(hHzd2kxQ3_McLz;|H2aG8!(~)@N&CFfNBka&8_#E8p_O z4h~tsQ6BP`4dS~t|406w10H1O0dfmct&MUg$^kfb-N!-1JnC<2CMJAwE*Ci~6gLH9 zlc!H`jrl@UhH+LrqwBv>qzGf9QZ%&lX_8dBRpt(BbmU#duB%+ zu)Xt@|Is)QWT4Ncf7uxk6p%9bdD3w-?+x`tiay5To%hO3X2rF>D3+Q zy*sywBsVFuEM!&FFzymr>*+ZYQxVgfzk$ROwajk&i?YM%6!{Y*_@n%%`Ox9a3S(=x zUB<4(Y~wOZt^(Diy{D)9d~V#Fp$;FY^IqMd_oekltC7oqf>2P@{KsClkTy@|vg_ac z+k5^pl0L^@7~als$g6Van5+f`NpKH(+wl~XU_LfLD4EGXq1icjmJw{o?unqt(`8rc z9!>suZ0kJrX;e)zarL>0qfOr~y4~|ZUDlZ?bd3_f-)=keN~3Aq;l;?0og_JH*L7&F zlN#;R;>DV^BHK$MS(l6wy}*b!p?*<#`PnH+$HMhj{fdo_XfV6fTr?2wQ=J`Y;`}*7 zJmY{s@$T}Ag(cp-7Wv~{fhz|x3{xJpjXpdk?Qhm{`%c0)!j;(T6+6bV%${v*o~e1Wp@>uh4k{74IHXP zNcT#YHy6zFk!?*V_rXrke7oAm@HKDv`NB%6-qEQlcQJ*yQ_DlmC55y-P6JzYKT_~I zE*q0Z4$)`Ey7DMe9m{L7G{izj*+GyysJw`(-udc4nG@EF}gBI8XYS`qnkt7JGg&&%Xoqoc59CjYU z?1lO+jMZ#2@hiT`F0*_$XQ5|u#`I_Z`ABB(l%(k`e@VP(+M=?9 z^&QR^+!3OG7Dav^8tcg3z1gjILttmyNTct7cqsGYzOui$EM=3O{ukf%4hl(Hq-0yx z>M$oCwEDs*ZO!mOWxMF;AIh<|u&)KfVkhDs>$oYBPbl{R1gGHJy{or1FNzI6UakKj z{>H%T!j+Y?bJNvgdyhz3|NJE)e(Nta@z27|YBBTq3$ve+#Ft(~?l16@3om70D_C-z zWjV5^pm&+q^;^+}Ur(*1e#gxR)%`ej>4=g3!n%H&?Ptoe7!{Pxc=OMzMoF4d=Dvv+ zw41fd{-BxV&@DiG9se`iq=j!0nQnBA1-E5gZmCNmtKJT|D_UJ?lslMXhs?tBg@}r3 zZI`7T6&}9azLUn0tAPnw*H?QC3m2P(h<_YSKDqPM7I&+^ooZG15uN$&nS0U24=3XV zSNvptv?%*44|ti4i=}D>@EmiNlO7(OiM`)DT%B{K%Uesz(x&HqPvLAA8{_A;d-%eE zGRrdSn}2s-_MZMYFn{sXnZuuc7(aY8;MMo{=#q)<9SdU^zWDc5=~H2A#}6VYhXcQVku|;_SMpkLVpdCV?sd-1zNagUUmH9w ztU7ys9eTso>-vT=JVt6`(){6fRW_A^4%ft}CQQo5k0vGfWtJY;{jzXAKz5+3=EoyKRx=k5HMdt?X9CJX;q*tnbsJCu{xrBZ(=+tsYQ<9rCe zgw*BY`tfT2+aDiOF?)V$5hyEVuBVsvOyy^d&FvoEVcI)szk8?CeE9cYKW`7@xUDMv zigD}CN53xC9eFA9jT4UFht@ny7s@*sL?rU95kNsg^JT;ogx{jn6FY!~{sqL)6-3bkGixkerrOp7p zLYu{xh12;?H{0EBRrSWpWS*B!GP+S!V4P9$#n?4idZqEa@x9gJnd5)wVrn&A16d`r z7(%%HJbH)2-j>EEG7&G1mEUDsz0B&mO`i7tZDVcc#GNl1Hirzw~zD*UXu$+w8=h8g1`+a?bMP4?_E4Fd<-uIWCq>(MQZN9@O{aoxrp!PuIq}wiq($q{hlE`)j z>k=EE!8i2$i>I8ASq#cW-C5lK)iR1WrBjRRN%uC#I_@40l-i&`5%a*>aGOo1nwEx+ z5hulC2~kWimDvHWbIaX%l(<+_=w88zQ zMl;VC6G|j+Z(od(6ij{*JbdS4l*6OKK=m8%KCTvTGc2AvA-t>ni?Lh9(v32T@2j1~ zlZ9y`D}e)(+cap7Ypi1s*XT00z7^Qo%KU6VM>x+uT>o2i*^!*fqWknDR1T+qR^dBZ z?-^kpAa(WCtNn#H*?hKa|2?_GI>5jt?%rpUw=sdL!Ja)HUevy&un_4tC zmQ&JKaOF{x8SADj+e>*XK#6SZYq zQ|tMf(fCchda{wdUw+p0x%k`1T9l4_Ni8!ltpD+DrMn|{g+aObldNmYb0e#~+3<8* z0n4RZeM1igQ`jja<$0V;JXxRGxe+3LkuMhHEriX>m`9jM1O6TDu#O zaf(@mSC$<_tPIXmkG8jRw-~j?I&I$*XPVc zqIdI7MoGHX-g+URq_^pT@hZ)$ky6*1#VMs)iwW-=mS2`KPY0LoSm?U)>gmMH4YzaN zpN{#>d3ZQdk9VHk{5#42&%*E2)w4;~C4)bniW-gl4C#|}IWo?0Z|Krv8UsGup zqk7$@w#?nR_R8z`=t1R<(#!FhT3VO0b?w|5U5m=D%DPD0NZfhox9hcsEUZV%QxXG{ zO3Zn~=ck$*BY*49am~8Tn%iI3SJ2eYe7|bl88vilJF}#INRsQp;b#7te1YMHR;L?@ zE-@K;c?PUiy}}a$JVIx+xMgqHucS^oCuqKm^0zv^b+A(hsIZSivTZKjnU zUwLC~@P13AMsMX=bk?QpBauj5`{YkDW>i%%^+j-;n-dbyert2UsIf%2Ti1B1?oz7U zS(UxDHhpi!X4}g(HtnN2cfHF#-Kb1$nRV<^PQ#h2YRv-&mM&P$q#K<)b4*mDMP^Yy z*zVV?M9ajRS6gN1(?^Y#E@e+yQAmVGMPV%Q!Iz1N7Vx573D4c}co`l%f=A6F1+OAUZ*vn0~nq?~SvMzu7@`^h)hmwvn`I54di}31& zxu4D2?fs_qD+V5-n=?f39=^g{n>8utmMSM?n4@ELuBQ?czuEoUBaeQ%?joh+zT-#I z<#jcSQJ%7w?jC!id70J!?k@?xh*;6=&Wz{_R$l0Nd*>?UMo#mpfdM~_vnt!TT8x{F zR>tKAM$e`?xRm@UXAV1P(w&oaHiZ7}YP^8RME3FE1WsR>VyjmR%K{h9<=t(#-Ytto zeH|G4+vJprO1{2;@u!Ad{Re?wdueMN&rg34HZqlTa*~=G?QZ&E@(07|u6q&tpXu1! zzy?t!k+jRaN`^(I9mg0%%z73S9*19eW=P?4Z__sVr-t&`k6HNh$6A&6mR4%VY*%*f zF^J&W zsd(d79JiKXYD+8T46iuN87ixQhzKb(}h@EQvO_#FzUyV_)+oZ z=xTAVt!Ut$xxpM!CyFNr&uZpbw6|vmT~uxks}J|r5E|GhW)>40%A=v$o~Ur%?2qoL zEOig>4k||_**WR^>?D#L22FUBcQ>?IEdTX9o%sKn`|hZyvaicBE2dU3fCNJ!LBN2h zfCK|-0g`i6kqn~b40an@Bw0ksQGp^z&SGnmB~#>J0Lh?46@hO*{CzWP&8%7Mu2d-pRUoi-Bx5H&F^4#h9yJ615Kd_;nVF^38Sw3W zn%U6buP-#U7$U$mFu?n;y}W9sBFp%p=t5(LT6{45SW9$6WO~DpoO-_A68(kSzFdnI zio4yY@mN*Hn|iQojZ^r8GSw|Tm61OfHIT&;fqRLJCkx<-K=$G zOghq@hg|ZFR9cBWetWEhmf3D`Cqv_(Begc6!e>3+hdM@&&TsZF7jO~0zm6H34hV&b z6phR{u%UBi*YdOy>eWlXvL|jF6_b^{em$tHtPHfgdvILr`c`-0xLV`%FkR=@GS{!G z4nMn8QIw|nx25LyUNcxb%20#U{_bYuOTo>0ixZtz{_M-`-1KyFm*(t^3#SVwhUC+_ zm@k!|pt+qq*%T%^W67`kODZ^9aHy@CvC?}`WNxaEmdER&Uf1+(%a(5yj?bvGA6+sG z7kg5p{(AYc@bjg0a0!OChyDz@vfXMac*SJ6nl-Z6eCiPW&MC><@NNG6r8{}V#TR;Y z4#x`&jg}-Nki)xWf~?;^ez}3PL0eYVn~;>@DUsHf-^uvbUw;XCEdRQ7R&Pu9GaLHVu zVPB|%Pcyu2XdiTPX3r5x8xc6 zXqfxjtVLWk^;2Y;jjnXD(bzdm(g8MS-nTVNky7>RWvTS^x4E4;?%Jg6M}OUK4V=!yPXXd+iTYe-JBLJ%5d8U zFEDQ=o4!_xGCfyJ*Pd~Fba!@Y$HocOXo2gkFJ&07KcDUC^|(Op?C#bswPs^vL_#ZVo8+St-tAchmNo}v=!PIy-r*14WoJFe<9FRcx8@Ri{j1|^T15^`S(2Gl}ou+ zA$1e?GSzb(o6Z}QN`?DU6O=2{D%C7{)3fVl7Je1-w>MPetFak4jeI)p{b6?MOP%vo z!snTMT@!R{>RIoXDeli2RGRy*Gqs-&%dx5ZRi@7H& ztl{E?ET=N2f-~}+EP8UsoJ~5`yUp~P8FasQScwl4%33H=QX8cw$I4BFGmi!IMWiJp z49Hemu2}htFMZl%;C5pr{l~mceME7nmE}4~J+CKEnj(a4$h(dj1^WMyF`<3N?Anxl z*Zkr}gGE6`z1n$4FJ|M*dUNk~hgXuhxQ>1QAZ{RLpb*^jo$E30mzqJ@p?cQ^RfCd$ zu_9B{%bt;|(=0S;27>iEk&}43((~djYm&)Qy52cjWk6R!EB)qGzy(59ZN+CYo{97L zkaNdc#jfffe(EnY+pwwaIkhMT$X{;7{!rx)P=Z@#L zBOMnxO6F4aT;~i7x*M-@jr2a>N>6dRBy?vO+lD{q+O)4p>n~_Yd3>w8&1dd?+2esP zS!(b^T z)Ig}syraWN8&=(wCyKfF>1UUTHdMsuT|LP15 z2+g)swq&hbx@jL|cRaq0f3m4wcN3X1Rj&b{o-HJK{eW?X`c~4f7MzmdI(znPcI}C} z`%A^yc0E8tqd`1^-i-pHDc@DvA5>47{A{IA6W-7zH0Qb&i}zl@`28~e?=$EMukj5*{N2YZ`7tPA_zWAMD*ocvX zI6D6tH7wV{-0s%_#!3qHV*N{>ZyiIi9^hGw)XExGrZi7m?KAt4zg1B8C1N=vw<7Y@ zhU22}P;PAE-$Q&Ku9uYk%g3!#M zPR-B9XIvJwS6oDUjJ__3(vgTZm?_yrCJns&w3l1twqPso)W^gxY273J4RWn7BreT$ ziEdpUS6`oBJL3$S#m?HM*xGer3v>q6)Y~ov{`-zz zr_-z&YI2tDZ{lcc9f{VuzCM5mTBBGO;`X|isWtrSH$UU|jNE?ej`LEfd{&Ru)Q6a} zec@>f;y(}9E*?1l>t0%~vx459W7^T?9%GullOf)mtkNCluTo2R)!Mw?NX!kltW;0` zLSS$H+2hjehf6CpImbV@Ki#53m_R>HA)(xo1n%su)jLlb=Z#u4S~#hhbM1^iLtxEv z9UtYYOl1)k=ZhaJ8Vl^o#4pLz5b}hSebI)t5*iRX{D!uG$vO0na7B?!6 zlm9OmXTSHC_2tTX9s2Mx|KMmuw*KBdTtHnv%^N)IxJ@!{W$3B$7#sgkNjrqdyeMCj zCVSuT>;0wC{Wr)YXiJHQQf{)2Q$x4j;&kFuhOT^> zkFi$=^wLYhPFtmozRpb(4+qxR!vVh^$j&xY(~WW@fLJwheygpj=AgeQpgDPbPzQE0r(nWvd}2a1-iVE!WLj^0 zqi{OPtR>bwSWFzw{|0;C7W^Py{zo2o{r-(){Q&F&t1n64KX}*v{j&R zjIoEkm>%!uRH506W!I7z62E_U4C2#N+WWM8T!}<_v-0()ASp)D+Sc~8^9vHmD<6MH zHz7F0^7ce)6b|BlL4`%ZXc>j9C7sZ8bv>UUzK*2uhG-!}!Yl{76V3~IX@xWd_2hLTqS2Ho5N@yOOQv6i6U)N9A(q33H^X^=;B1Os6?}|~# zpNHQxG|2Cc{UlMBAD|OtjsnbT2i=+UQ?v@q~rvU zrJ}pd@hHziA{=#_hURN;Why_fv8)r=Bt?pi6Rs&1PR{cS7tk$y(HI~bxNabSUF?wU z#Fan8z6Yr%Q%gRD?^+!j^^=?Th*mezud2uUj+(XZ%C24Gl~cv29T-MUuohwublb8o zyY|8^g%lMYdXgfjycCOUpXk}FB+M_U1d=B?nM>%ZF_d)*RA1bmF~*x{G-mJ(&O7VOm03|%oR@1nSwEw>{Qb}#5F4K%QfoW<;=I%Y50n3oZ21nB;}zv)ym52 zrCN)jx=Qy0mfgxI0Y`}yMzY}E8yiPMPjQuW<^g)I71%FlK|S@rn7 zhfyU-oU{erS(U&}!!-~4K7QS*mF1iv7v&QiogaS1_9a(eKQXOw)-gpPcCDZUmbl~| z+T>+DyGO|hHXC%${R)bcn`#^sELN?^j*>1`4~WlxJT7yNk`=0ZRN)5JJ~z)HxwD_^ zk4;*Kev0#xp-LCFtCer`t4WsKo-K2E7rn&EhM>Xk!tn(#bQ{?VmwVA{wutp+M7j4k zUo7_3X$_OuVIJaQN}uJ)kd87O_@X2|KVSaEAy6_Mu4_zs{CZ^R{&<6zakiZEkI2ar zVtZQiuM1_@9`kQ@;W=a8_I}lP?DbMj;-*ZB>kfYER0;9TP?=5kA?AX*!20L9dlk5a zi&PXlQ^ZvAw0368T-bFr$wWX@^yxB_mtT<&PtW{sF+;# zuD`6S{yrC+12dgldgQjaJnhkCRV{DP%q{IzX`?rdQyFsp{+rmiFD+!&ssJndo>&RD zV>KRmjqurX4rpZt=^V?0^&`Du%Q2%%A3AiX3!=KQany5z^frA3#Y3oe8`*+uvUA6%lgyj)7ue!LMXNyK{ff1IvYngagb zn(FE&a1x#uSDlPWM|XFN_Aa!_yOfEI?fLtSB+oy62`7?-z3EcEzP?>JZCxKBY(TW= zJQ%SzSa!U+0GBx0ocMILMHZ_q;;pZ*2PIQ9*%aA3qmXr^s&z;e1d}0GByU&~h_w!f zyPfbZ7hmEi$MoDB9fzrMj2qZtp-4Rs%a(u2T)1!{MJqR@$YJUZ?nXKoPB@;2N~lS5 zCeGcVP$*nrWbTtU=F!CqhL*!Jl{l>kl~WjgLk~L_`cHZYD_{x}3C`#GM0C-GQm8 z;}oqT+vIee!dvzflBdPrK0b8t?U51b?CbW^;h>z#*+P^;udVDFM z-(orM`0Dq^SFgSWHv~CEGuH1c$PmJGcaYvZ!pU@#xly|H-Mc3qWdO811nMBgT>Cmb z-3)pKG6ftKX^`YJA)3DJ&%gfK^T!_tDNsYp;Z;w!z?-BG0z|KPd4melL^lZbXzjr5fkJI{|NW4p2&mo9v zAg!PXZkARY*I&Jv6M@PU$a7Qu`dD*HDk_0r>LY25jSBdy=Pl0j=XGp`>gi~5>uWa` zNC7kw&6Z@(N_g=iIE2a2{t%K~k0A@CiOEGv$a%7cMab+n9$R66?YyG`G&7W}t+Uu2 zKdcc0DbnwT`o1i`^<=ffoerF_Xj~oYOOLiG;*58lz!s8Ms>I4KWujZjrf)pgj5ftT zUY!9YQpA)I2c5yq_vgC`ZH(t8x?yqf%s(Jmmj>c&440_EiLm7jgep z(9_#H`0?YjmzG?doIHmPUBEh2>sD4$0z>GFFd_4rdf&nV3kdsotzEm;_QRVs1PBGM zof0@ciK{WBL3z>?`t3#cK0jhPZF11V!z1Xpe&2W&x^nqjjs~CNuYb41T>CK`?{_;> zLj@-tWETPd_pq@=P7o9pb#`pKcJ0Cx#PQ!~2$cB`EinJ_M+{0YW-waPva+Z1tY9&) zK!b~mi$TE>Fw}k>*?rI)($P^9J%uf!olw*HYqX~@8|v+mL+y2h#bY^pC*tSqNIcLj zzg~$3m^0gPjrRiENen?)y~B`kYXzG|8h%egGo0r;jkhoXtsWgt-W+r7`ALIEXv{$? zE2~Ixw=T1OND$3Ud8~+Doq)gmQnVM3$*-Ap8KtcOifWpcko+W37r=3JmAiLexw^U8 z;rOBOxpUX3U^=B?aH{EaRdAC8#>X4ziR<;2I4LJe2T{pskf_8e3?$=J9Ptq<6IL+P zfF$HI!u7HAlE7s`09Ibrlt8$g^6&bvf>5kz$It+v6A6hQi;FZUgAt=nT4s*Iwzryp z#(7B}qN#y_xA|OLT#TJ`E?>SJrDIhS$a5v>`?pFCb99VT^CU7FdstcdD3D1F@s>P^ z^*~cgqmq4Cgm@d)mB%IBeD}y10$v2e&#@CH6eNCq{R=`7G`&*iWEdEukWHiwa*mD# zklBbgsPv^!adIgIY_Q*+uOmsGgb_Tb?*`TuEvRL(oUup(@fv;HnoNP2E1jVI1LZ7L z5dT?B66AJJ+DTnoGY)ySN4wVdJpn`6NtsN3&<+HW3yX@(zJL8#F%RaQ1GN*~`3;Ka zoQwT)la6U-C2ZWmngo7I6JRG1+hPAN@1MtisSBrJN;WP;i*lRSoao5B1UbW2P$}ht zH&w`@LxD}imYCt4oNM1mOo9^&j-3W37jmMH48~JG*Rs29ycyv}HJsK!I8--yPn|l| zpD_c06PApdY+y!H>N@rwM&F+dn5ftwwh(deS6``%kNP848wjluNe2KgOY7JTv@iD~Pm9juKYMDcE*V{xXybgqJmL^!aue=6*fjH1ZO zwt_L!4%DOk`mc4?tXZ>CWv8C5lkD&BFWar2s&R+{A-`;fJ)FsqE7!~;c)9rAHSXq= z9tP!7&Gho)ZOn0?RW+L)sMgFA1C3LzRlgo+XX+KF-hexH6w)OAWHBhpR*Z+WXXv+U zTa|M1OwdR0H?y}7wh%rT?(GFQD+YWmjZ+QiDXL*-EW?O@#<8E|C6*E(U1$n+)eYh* zvhA^#Hle8(z|;B?G^h!13lASXs_E?11TAPr*lE+Z1y4y{fv;YjnCLIlU!0$4f%zaO z&V8B$a9KrPP9#!{=OLB#{>Frzu^Ve!`rHndWn;UMW=={ohsUqjH*X|~>5H~ePi^|! zLGZ;bH7b=lTXn?G1gu?JnYSLoqa*-Q7>V4$;$+yiP36Xo7=)6uoyO6I=64rCux1X9 zxC&>e4EhX0FzwREj~}TCPy?o6aq=p^@Fpiq2l1wWAJlg;5!>>dp-f6tL_y%lC;w+Q z1dFAqC$(*FHfI^if-5WkSL*c$}KSP|QVP5w=cXcl~-Hyb=Uks$6mrjhIZcAaWWRs1Eq~ z@iB)AzQos!jBy*NSZ~o?nz3b_n&Y-;54&-l3U#j|v=1lqF+PXY)z!-@Dn=i3xL0Kv z8`(#SxwP$nN_#b{l#{3!e+8@j8Mu&cdgnW0LLMPQ5-~+H`^C4)%1RIq$r*)gCp|*W z1lC>a=FOWG(Sd3|?0u5LgpZTOj|9hH8EI;I=SuFTY;9 zZk?bd)QpOV2Byk~pW&Bx#?0$91x@u&EcjXY^?tjg0@IeGNYhK50jr37RPl4^V7_Eb z)g<(Um#=Rd)-)3fOA0(ZM*IE#er43jdIm;DOy??5YX}E;?^y3JlS%*4qsI%wzmZJbTVdE#VZ!T!Ojb?;SIl*ggU#g zpS!hj-@bh~zci@nvQI##5opBwO$OwA33w|V$bGMShLx3dwwf!t3gt6INGjK^{SBKO zgSOoc`{4v5Ow3J-ynt`HLr_smL5Dr}{Q=h^1Qs&?F;Ig!9w78qK*af)@svw6o7?(nlWisO8#fwA_pjJv4OXbGRB%`}`?<&Bq zs1{lq63+rdlcH0Yg}@nsL#oM=?Isd4_NEdJBSpXLH7r;>!Qe}Xw?^eG!SR}72r7_n{}X3hu^U@ncUzEN3^-r3y9cVqUdW6V~F} z)w?OCjIUC43YCZvPsm}Xg4!*JT;1M&wzgV>K+vqL5r+I&dil(}_LDuG8qiEMOutl) zC1Y^D97MhY)!E0Z;O!Hztdp?>EAlW#Qdh39czpW&*>2{`^?3CrkZT8phML%qkQg#y zJ*%3UnufPTF6$#vh5<^x_>h5E)T_(%U*L0Y>fytOTN5aZpp`d8D5jNdbUnR0MJ1UE zJ;Gb5Wza-aE8PSw1ydMOIXD0n3yW03PEFSy@3uH5F0Kb^0W}P#T83U4EDeuT>tL@CSyK}*xad1Ya0#^_2sjN!?hTtZje+p_gfn{|IOl(YRFGjT@p^&fSg4B;Z}q-H(6H zPxWU&6|lBLugKQaphR4I+SbS)>AIZ45hFy^h; zk|ty~+A7YUP>*0UsOY9{+6K@WT>fv0A0hcEO9iy}gJEn)ntZ z!0G=J6kB^BjSdfA+uJLq-HwnT`|Z1ToQb86keWaPw1|nb6|-E>=+OM^Y>tz6nw~Er zubO*EARE7g7_lrIKAk{h6U0n}2<}(E{>6SS$Le8Bn|!f+kSsuxRtcA|!yLDG?1gTi z12iRK`5edyTkTh`9S8Yiv> z)O~Q}0-|dQYh&<1^N(*I7Ph#-8T-B2`_T^zuR|6}n=m~>~@jFYt@BTTo&>x1A@TqO_ z@$o|T;~EqtK#DmqF;>IS01>kY8hPK-LB*#&O6(Y(3s^zBlqE7SkSr=HN@GFXonuhB z!wodlKwQsM8!jUNt&0#=CPZDkzJ2}Lh&U9vLvAtf?BSrR62dQbw^>Ds>1TeZo2r0{ zmKq-3E%DQ?#sq1vpP(bn?um|wu;7!A7T1Nn6^ha?!chZBbY6Xy54__@W+l7e1p8`9 z%K=#h$=AuMv|yNmY`bwFG8?gt{SX`QW{zpOl#b!1Q1v{P?2dd57qLqjA0MB^mTDvl z%SVHT5kILWE0t?F*x3bz0bMs7F zu0TKs>*MKZtG@FSy~XO(RHG;Cr%n8kr#ZHBr=Q2C+S`NJ@PNKh%=7Jquc(^<(##iY z=I%KKab@nDqNE01~06lXV?t~2*ST_Ux;Yi*oO}>NE7IQIJV%wV{zD= z(_JODBUH?1MQR4fQVnq>aPF;=@6Od(8>Dn?$mQm5GdIzGRkhs8yiDYKS6@{E@=wcmmyhFM!|LmQC~2a%f4_t;B4xGuI(QY9 zD#o)DaRsLSdx2HE;>m|AORlj-#)ybJqN1Y01dV-(gd|=!h&&_HL9mHtWuCwBhD4-r z@p^M~Q}$MpXUT3>)>Oj0iHnPeow)gy%}@T?wML|*gJ6TU zECr+aiQkP9b|!+UIG7BO5mQV*J_kDLl8A9 z4_PGKOF*HU2%&Uo1a^f*tFwqohOy@oCD357-inoX#wmd^>$w3L`Sr~{{CsJ!H*|gQB^bZXYceRF$)@*pepcueml6= z3FN7jXJMMVgk{-?q8BFxq~3`&!TdDPJ((j=rZ&HoI)41P801gXCMqf`hmsaPV6CL; z*~v*uQ*XP-mfI358ZJ5!Mr#Q+l10SUBuYY%7)Hsat4W(<6bQXp??HTI(6k$gTm__+ zvwAp?mxQYU{E$P|`meTPGMtIUT(^M|dx_ zF>HsR+IDB|M!Ls}FGC{}NfY9Z{>KPUm^M6YLQF?0veymW^NqF1Fwr&r{rwso7-hmF zZQ8VIyog*hYFWtIK^}V#pksEV_x)Qa^9&9Rap4ujqkIK`F@OMK04)16BxRcaeZrWX zdW?@x7F533g;OwC)C5dyBPVwtB9w8D5Rm~cL4dL+yE&)F3x5v>Q6G8OhC#Z+mv7m9 zM!s7QDVCE?HE;}bAnavcghYG-6me;YNQtxp@XH=%W*&5YxFx*QHK4^1PbVV&08&90=l$?{g?+yCu{MN2nt8cq^c30qw?xjK%|B230f$W`!;W{ehhzrB ze-4b;tXd|fowF+I6-*HKHfhw?-j$<9Igj#)&9y3@SpZc7&~)`Q)t!D5U)K zJMV{r1I1y-o?4iEKK+8bA32g&vAseL5nbh+dgO(C^ABquz(?$d@j?Fn<;6>vh&&h` z#%S>u6eNFrZittCehT}n08*dVuXgW2E&}0cp@d#xjZk1FXCnNp)oA%X{Z=RjS*uTA z)5XwtR;WgQwjtaFfQd8}ai(Lpf#CdY?f{CH4&jJj=^Z5+jVl~7i)?j9GTE;r? z9#jG+SuNfQLozpW8U8ZKVXE(WeM5)xspCk34*OOHqJ#kEWi>3S)I3ZqHN0IgQHVC5 z4Bmp09bSbf)Yheb4-*~J5wzmeM1&kjN??RU$rVM-e$Q3>tByD$ z#h#YF2euf=ootRLXc-ZZ64^2+4CFbzMIdw`2sctnC0c^2QO%bY9+=E(=B09il4i0q;xv8^l{lIj@{tu`a z5j9I9w|tFy#h2BT6`~IrvY!uxeT31e$V$`m+OlN}Q3FoMQ7@ixZnGddT=JVFVPsuk z7JUX`O0_4B=@#W6z2MgU$_h#R-@#S%X;Uhp4;DU@gE@kSX~Ujj3ttaJKgKq~#mJ`E z%<-k`m)#NiM;28~LAGqzD1$;E-NK^P5Q_90hD{qYD3hv;VIokrj3AG|u@ErYl6?V5 z0-kf{G|;2|*qMSJPeuNiNT%moN}w7-Bz=KnTVpP)1C;79J2Qe%m%!CTtqZB6BUV;Z zI=xqc@9mn9YQvE^tT) zR9H`&XNVdZ;Q~sxFdp46HY=e2Iu&)pFkPi|z=rx1u8+Ov?tbt@3B@FL0xp&~%RwGV z%kOK38LoS6xZ0r~FQG$C3V=(I_l)i6&?p6aeAu~raexuhI0%C%(dfNKcILJ{Zr_sTFa=90K~V;&?UyUTOtOq-dJal&&kmppPZYBJLc3ulQs zJ|@5+!pmL*bLUS;3Zgu6Vzu@nci(1ilqjOfqPiFW(!c-ybmiE8!_us$?a`}^L>-eA zD021X$%-`m?_dAloATh(e!u + + +
Client
Client
Master
Master
Flink
ResourceManager
Flink...
Dispatcher
Dispatcher
JobManager
JobManager
TaskManager
TaskManager
TaskManager
TaskManager
1. 提交作业
(Jar包)
1. 提交作业...
2. 启动
JobManager
2. 启动...
0. 注册资源
0. 注册资源
3. 申请资源
3. 申请资源
5. 部署任务
5. 部署任务
4. 提供资源
4. 提供资源
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/img/task-slot.png b/doc/ch-system-design/img/task-slot.png deleted file mode 100644 index fb4306f28addd65a930b5e4302367557507757b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153353 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≠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 QO`rw_Pgg&ebxsLQ07k#((*OVf diff --git a/doc/ch-system-design/img/task-slot.svg b/doc/ch-system-design/img/task-slot.svg new file mode 100644 index 0000000..97b682d --- /dev/null +++ b/doc/ch-system-design/img/task-slot.svg @@ -0,0 +1,4 @@ + + + +
FlatMap[1/2]
FlatMap[1/2]
Source[1/2]
Source[1/2]
Window
Aggregation
[1/2]
Window...
Sink[1/1]
Sink[1/1]
Source[2/2]
Source[2/2]
FlatMap[2/2]
FlatMap[2/2]
Window
Aggregation
[2/2]
Window...
线程
线程
线程
线程
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
Task Slot
TaskManager
Task...
Task Slot
Task Slot
TaskManager
Task...
进程
进程
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ch-system-design/task-resource.md b/doc/ch-system-design/task-resource.md index cfcd53f..78ee7a1 100644 --- a/doc/ch-system-design/task-resource.md +++ b/doc/ch-system-design/task-resource.md @@ -3,7 +3,7 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买!
![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -12,68 +12,103 @@ ## 再谈逻辑视图到物理执行图 -了解了Flink的分布式架构和核心组件,这里我们从更细粒度上来介绍从逻辑视图转化为物理执行图过程,该过程可以分成四层:`StreamGraph` -> `JobGraph` -> `ExecutionGraph` -> 物理执行图。我们根据下图来大致了解一些这些图的功能。 +了解了 Flink 的分布式架构和核心组件,这里我们从更细粒度上来介绍从逻辑视图转化为物理执行图过程,该过程可以分成四层:`StreamGraph` -> `JobGraph` -> `ExecutionGraph` -> 物理执行图。我们根据 {numref}`fig-data-flow-graph` 来大致了解一些这些图的功能。 -* `StreamGraph`:根据用户编写的代码生成的最初的图,用来表示一个Flink流处理作业的拓扑结构。在`StreamGraph`中,节点`StreamNode`就是算子。 +* `StreamGraph`:根据用户编写的代码生成的最初的图,用来表示一个 Flink 流处理作业的拓扑结构。在 `StreamGraph` 中,节点 `StreamNode` 就是算子。 -* `JobGraph`:`JobGraph`是提交给 JobManager 的数据结构。`StreamGraph`经过优化后生成了`JobGraph`,主要的优化为,将多个符合条件的节点链接在一起作为一个`JobVertex`节点,这样可以减少数据交换所需要的传输开销。这个链接的过程叫做算子链(Operator Chain),我们会在下一小节继续介绍算子链。`JobVertex`经过算子链后,会包含一到多个算子,它的输出是`IntermediateDataSet`,这是经过算子处理产生的数据集。 +* `JobGraph`:`JobGraph` 是提交给 JobManager 的数据结构。`StreamGraph` 经过优化后生成了 `JobGraph`,主要的优化为,将多个符合条件的节点链接在一起作为一个 `JobVertex` 节点,这样可以减少数据交换所需要的传输开销。这个链接的过程叫做算子链(Operator Chain),我们会在下一小节继续介绍算子链。`JobVertex` 经过算子链后,会包含一到多个算子,它的输出是 `IntermediateDataSet`,这是经过算子处理产生的数据集。 -* `ExecutionGraph`:JobManager将`JobGraph`转化为`ExecutionGraph`。`ExecutionGraph`是`JobGraph`的并行化版本:假如某个`JobVertex`的并行度是2,那么它将被划分为2个`ExecutionVertex`,`ExecutionVertex`表示一个算子子任务,它监控着单个子任务的执行情况。每个`ExecutionVertex`会输出一个`IntermediateResultPartition`,这是单个子任务的输出,再经过`ExecutionEdge`输出到下游节点。`ExecutionJobVertex`是这些并行子任务的合集,它监控着整个算子的运行情况。`ExecutionGraph`是调度层非常核心的数据结构。 +* `ExecutionGraph`:JobManager 将 `JobGraph` 转化为 `ExecutionGraph`。`ExecutionGraph` 是 `JobGraph` 的并行化版本:假如某个 `JobVertex` 的并行度是 2,那么它将被划分为 2 个 `ExecutionVertex`,`ExecutionVertex` 表示一个算子子任务,它监控着单个子任务的执行情况。每个 `ExecutionVertex` 会输出一个 `IntermediateResultPartition`,这是单个子任务的输出,再经过 `ExecutionEdge` 输出到下游节点。`ExecutionJobVertex` 是这些并行子任务的合集,它监控着整个算子的运行情况。`ExecutionGraph` 是调度层非常核心的数据结构。 -* 物理执行图:JobManager根据`ExecutionGraph`对作业进行调度后,在各个TaskManager上部署具体的任务,物理执行图并不是一个具体的数据结构。 +* 物理执行图:JobManager 根据 `ExecutionGraph` 对作业进行调度后,在各个 TaskManager 上部署具体的任务,物理执行图并不是一个具体的数据结构。 -![数据流图的转化过程](./img/graph.png) +```{figure} ./img/graph.svg +--- +name: fig-data-flow-graph +width: 80% +align: center +--- +数据流图的转化过程 +``` -可以看到,Flink在数据流图上可谓煞费苦心,仅各类图就有四种之多。对于新人来说,可以不用太关心这些非常细节的底层实现,只需要了解以下几个核心概念: +可以看到,Flink 在数据流图上可谓煞费苦心,仅各类图就有四种之多。对于新人来说,可以不用太关心这些非常细节的底层实现,只需要了解以下几个核心概念: -* Flink采用主从架构,Master起着管理协调作用,TaskManager负责物理执行,在执行过程中会发生一些数据交换、生命周期管理等事情。 +* Flink 采用主从架构,Master 起着管理协调作用,TaskManager 负责物理执行,在执行过程中会发生一些数据交换、生命周期管理等事情。 -* 用户调用Flink API,构造逻辑视图,Flink会对逻辑视图优化,并转化为并行化的物理执行图,最后被执行的是物理执行图。 +* 用户调用 Flink API,构造逻辑视图,Flink 会对逻辑视图优化,并转化为并行化的物理执行图,最后被执行的是物理执行图。 ## 任务、算子子任务与算子链 -在构造物理执行图的过程中,Flink会将一些算子子任务链接在一起,组成算子链。链接后以任务(Task)的形式被TaskManager调度执行。使用算子链是一个非常有效的优化,它可以有效降低算子子任务之间的传输开销。链接之后形成的Task是TaskManager中的一个线程。下图展示了任务、子任务和算子链之间的关系。 +在构造物理执行图的过程中,Flink 会将一些算子子任务链接在一起,组成算子链。链接后以任务(Task)的形式被 TaskManager 调度执行。使用算子链是一个非常有效的优化,它可以有效降低算子子任务之间的传输开销。链接之后形成的 Task 是 TaskManager 中的一个线程。{numref}`fig-operator-chain` 展示了任务、子任务和算子链之间的关系。 -![任务、子任务与算子链](./img/operator-chain.png) +```{figure} ./img/operator-chain.svg +--- +name: fig-operator-chain +width: 80% +align: center +--- +任务、子任务与算子链 +``` -例如,数据从Source前向传播到FlatMap,这中间没有发生跨分区的数据交换,因此,我们完全可以将Source、FlatMap这两个子任务组合在一起,形成一个Task。数据经过`keyBy()`发生了数据交换,数据会跨越分区,因此无法将`keyBy()`以及其后面的窗口聚合链接到一起。由于WindowAggregation的并行度是2,Sink的并行度为1,数据再次发生了交换,我们不能把WindowAggregation和Sink两部分链接到一起。本章第一节中提到,Sink的并行度被人为设置为1,如果我们把Sink的并行度也设置为2,那么是可以让这两个算子链接到一起的。 +例如,数据从 Source 前向传播到 FlatMap,这中间没有发生跨分区的数据交换,因此,我们完全可以将 Source、FlatMap 这两个子任务组合在一起,形成一个 Task。数据经过 `keyBy()` 发生了数据交换,数据会跨越分区,因此无法将 `keyBy()` 以及其后面的窗口聚合链接到一起。由于 WindowAggregation 的并行度是 2,Sink 的并行度为 1,数据再次发生了交换,我们不能把 WindowAggregation 和 Sink 两部分链接到一起。本章第一节中提到,Sink 的并行度被人为设置为 1,如果我们把 Sink 的并行度也设置为 2,那么是可以让这两个算子链接到一起的。 -默认情况下,Flink会尽量将更多的子任务链接在一起,这样能减少一些不必要的数据传输开销。但一个子任务有超过一个输入或发生数据交换时,链接就无法建立。两个算子能够链接到一起是有一些规则的,感兴趣的读者可以阅读Flink源码中`org.apache.flink.streaming.api.graph.StreamingJobGraphGenerator`中的`isChainable`方法。`StreamingJobGraphGenerator`类的作用是将`StreamGraph`转换为`JobGraph`。 +默认情况下,Flink 会尽量将更多的子任务链接在一起,这样能减少一些不必要的数据传输开销。但一个子任务有超过一个输入或发生数据交换时,链接就无法建立。两个算子能够链接到一起是有一些规则的,感兴趣的读者可以阅读 Flink 源码中 `org.apache.flink.streaming.api.graph.StreamingJobGraphGenerator` 中的 `isChainable` 方法。`StreamingJobGraphGenerator` 类的作用是将 `StreamGraph` 转换为 `JobGraph`。 -尽管将算子链接到一起会降低一些传输开销,但是也有一些情况并不需要太多链接。比如,有时候我们需要将一个非常长的算子链拆开,这样我们就可以将原来集中在一个线程中的计算拆分到多个线程中来并行计算。Flink允许开发者手动配置是否启用算子链,或者对哪些算子使用算子链。我们也将在9.3.1讨论算子链的具体使用方法。 +尽管将算子链接到一起会降低一些传输开销,但是也有一些情况并不需要太多链接。比如,有时候我们需要将一个非常长的算子链拆开,这样我们就可以将原来集中在一个线程中的计算拆分到多个线程中来并行计算。Flink 允许开发者手动配置是否启用算子链,或者对哪些算子使用算子链。我们也将在 9.3.1 讨论算子链的具体使用方法。 ## 任务槽位与计算资源 ### Task Slot -根据前文的介绍,我们已经了解到TaskManager负责具体的任务执行。在程序执行之前,经过优化,部分子任务被链接在一起,组成一个Task。TaskManager是一个JVM进程,在TaskManager中可以并行运行一到多个Task。每个Task是一个线程,需要TaskManager为其分配相应的资源,TaskManager使用Task Slot给Task分配资源。 +根据前文的介绍,我们已经了解到 TaskManager 负责具体的任务执行。在程序执行之前,经过优化,部分子任务被链接在一起,组成一个 Task。TaskManager 是一个 JVM 进程,在 TaskManager 中可以并行运行一到多个 Task。每个 Task 是一个线程,需要 TaskManager 为其分配相应的资源,TaskManager 使用 Task Slot 给 Task 分配资源。 -在解释Flink的Task Slot的概念前,我们先回顾一下进程与线程的概念。在操作系统层面,进程(Process)是进行资源分配和调度的一个独立单位,线程(Thread)是CPU调度的基本单位。比如,我们常用的Office Word软件,在启动后就占用操作系统的一个进程。Windows上可以使用任务管理器来查看当前活跃的进程,Linux上可以使用`top`命令来查看。线程是进程的一个子集,一个线程一般专注于处理一些特定任务,不独立拥有系统资源,只拥有一些运行中必要的资源,如程序计数器。一个进程至少有一个线程,也可以有多个线程。多线程场景下,每个线程都处理一小个任务,多个线程以高并发的方式同时处理多个小任务,可以提高处理能力。 +在解释 Flink 的 Task Slot 的概念前,我们先回顾一下进程与线程的概念。在操作系统层面,进程(Process)是进行资源分配和调度的一个独立单位,线程(Thread)是 CPU 调度的基本单位。比如,我们常用的 Office Word 软件,在启动后就占用操作系统的一个进程。Windows 上可以使用任务管理器来查看当前活跃的进程,Linux 上可以使用 `top` 命令来查看。线程是进程的一个子集,一个线程一般专注于处理一些特定任务,不独立拥有系统资源,只拥有一些运行中必要的资源,如程序计数器。一个进程至少有一个线程,也可以有多个线程。多线程场景下,每个线程都处理一小个任务,多个线程以高并发的方式同时处理多个小任务,可以提高处理能力。 -回到Flink的槽位分配机制上,一个TaskManager是一个进程,TaskManager可以管理一至多个Task,每个Task是一个线程,占用一个Slot。每个Slot的资源是整个TaskManager资源的子集,比如下图里的TaskManager下有3个Slot,每个Slot占用TaskManager 1/3的内存,第一个Slot中的Task不会与第二个Slot中的Task互相争抢内存资源。 +回到 Flink 的槽位分配机制上,一个 TaskManager 是一个进程,TaskManager 可以管理一至多个 Task,每个 Task 是一个线程,占用一个 Slot。每个 Slot 的资源是整个 TaskManager 资源的子集,比如 {numref}`fig-task-slot` 里的 TaskManager 下有 3 个 Slot,每个 Slot 占用 TaskManager 1/3 的内存,第一个 Slot 中的 Task 不会与第二个 Slot 中的 Task 互相争抢内存资源。 :::{note} -在分配资源时,Flink并没有将CPU资源明确分配给各个槽位。 +在分配资源时,Flink 并没有将 CPU 资源明确分配给各个槽位。 ::: -![Task Slot与Task Manager](./img/task-slot.png) +```{figure} ./img/task-slot.svg +--- +name: fig-task-slot +width: 80% +align: center +--- +Task Slot 与 Task Manager +``` -假设我们给WordCount程序分配两个TaskManager,每个TaskManager又分配3个槽位,所以共有6个槽位。结合之前图中对这个作业的并行度设置,整个作业被划分为5个Task,使用5个线程,这5个线程可以按照上图所示的方式分配到6个槽位中。 +假设我们给 WordCount 程序分配两个 TaskManager,每个 TaskManager 又分配 3 个槽位,所以共有 6 个槽位。结合之前图中对这个作业的并行度设置,整个作业被划分为 5 个 Task,使用 5 个线程,这 5 个线程可以按照上图所示的方式分配到 6 个槽位中。 -Flink允许用户设置TaskManager中槽位的数目,这样用户就可以确定以怎样的粒度将任务做相互隔离。如果每个TaskManager只包含一个槽位,那么运行在该槽位内的任务将独享JVM。如果TaskManager包含多个槽位,那么多个槽位内的任务可以共享JVM资源,比如共享TCP连接、心跳信息、部分数据结构等。官方建议将槽位数目设置为TaskManager下可用的CPU核心数,那么平均下来,每个槽位都能平均获得1个CPU核心。 +Flink 允许用户设置 TaskManager 中槽位的数目,这样用户就可以确定以怎样的粒度将任务做相互隔离。如果每个 TaskManager 只包含一个槽位,那么运行在该槽位内的任务将独享 JVM。如果 TaskManager 包含多个槽位,那么多个槽位内的任务可以共享 JVM 资源,比如共享 TCP 连接、心跳信息、部分数据结构等。官方建议将槽位数目设置为 TaskManager 下可用的 CPU 核心数,那么平均下来,每个槽位都能平均获得 1 个 CPU 核心。 ### 槽位共享 -之前的图展示了任务的一种资源分配方式,默认情况下, Flink还提供了一种槽位共享(Slot Sharing)的优化机制,进一步优化数据传输开销,充分利用计算资源。将之前图中的任务做槽位共享优化后,结果如下图所示。 +之前的图展示了任务的一种资源分配方式,默认情况下, Flink 还提供了一种槽位共享(Slot Sharing)的优化机制,进一步优化数据传输开销,充分利用计算资源。将之前图中的任务做槽位共享优化后,结果如 {numref}`fig-slot-sharing` 所示。 -![槽位共享示意图](./img/slot-sharing.png) +```{figure} ./img/slot-sharing.svg +--- +name: fig-slot-sharing +width: 80% +align: center +--- +槽位共享示意图 +``` -开启槽位共享后,Flink允许多个Task共享一个槽位。如上图中最左侧的数据流,一个作业从Source到Sink的所有子任务都可以放置在一个槽位中,这样数据交换成本更低。而且,对于一个数据流图来说,Source、FlatMap等算子的计算量相对不大,WindowAggregation算子的计算量比较大,计算量较大的算子子任务与计算量较小的算子子任务可以互补,腾出更多的槽位,分配给更多Task,这样可以更好地利用资源。如果不开启槽位共享,如之前图所示,计算量小的Source、FlatMap算子子任务独占槽位,造成一定的资源浪费。 +开启槽位共享后,Flink 允许多个 Task 共享一个槽位。如上图中最左侧的数据流,一个作业从 Source 到 Sink 的所有子任务都可以放置在一个槽位中,这样数据交换成本更低。而且,对于一个数据流图来说,Source、FlatMap 等算子的计算量相对不大,WindowAggregation 算子的计算量比较大,计算量较大的算子子任务与计算量较小的算子子任务可以互补,腾出更多的槽位,分配给更多 Task,这样可以更好地利用资源。如果不开启槽位共享,如之前图所示,计算量小的 Source、FlatMap 算子子任务独占槽位,造成一定的资源浪费。 -![槽位共享后,增大并行度,可以部署更多算子实例](./img/slot-parallelism.png) +```{figure} ./img/slot-parallelism.svg +--- +name: fig-slot-parallelism +width: 80% +align: center +--- +槽位共享后,增大并行度,可以部署更多算子实例 +``` -最初图中的方式共占用5个槽位,支持槽位共享后,上上图只占用2个槽位。为了充分利用空槽位,剩余的4个空槽位可以分配给别的作业,也可以通过修改并行度来分配给这个作业。例如,这个作业的输入数据量非常大,我们可以把并行度设为6,更多的算子实例会将这些槽位填充,如上图所示。 +最初图中的方式共占用 5 个槽位,支持槽位共享后,{numref}`fig-slot-sharing` 只占用 2 个槽位。为了充分利用空槽位,剩余的 4 个空槽位可以分配给别的作业,也可以通过修改并行度来分配给这个作业。例如,这个作业的输入数据量非常大,我们可以把并行度设为 6,更多的算子实例会将这些槽位填充,如 {numref}`fig-slot-parallelism` 所示。 -综上,Flink的一个槽位中可能运行一个算子子任务、也可以是被链接的多个子任务组成的Task,或者是共享槽位的多个Task,具体这个槽位上运行哪些计算由算子链和槽位共享两个优化措施决定。我们将在9.3节再次讨论算子链和槽位共享这两个优化选项。 +综上,Flink 的一个槽位中可能运行一个算子子任务、也可以是被链接的多个子任务组成的 Task,或者是共享槽位的多个 Task,具体这个槽位上运行哪些计算由算子链和槽位共享两个优化措施决定。我们将在 9.3 节再次讨论算子链和槽位共享这两个优化选项。 -并行度和槽位数目的概念可能容易让人混淆,这里再次阐明一下。用户使用Flink提供的API算子可以构建一个逻辑视图,需要将任务并行才能被物理执行。一个算子将被切分为多个子任务,每个子任务处理整个作业输入数据的一部分。如果输入数据过大,增大并行度可以让算子切分为更多的子任务,加快数据处理速度。可见,并行度是Flink对任务并行切分的一种描述。槽位数目是在资源设置时,对单个TaskManager的资源切分粒度。关于并行度、槽位数目等配置,将在9.2.2中详细说明。 \ No newline at end of file +并行度和槽位数目的概念可能容易让人混淆,这里再次阐明一下。用户使用 Flink 提供的 API 算子可以构建一个逻辑视图,需要将任务并行才能被物理执行。一个算子将被切分为多个子任务,每个子任务处理整个作业输入数据的一部分。如果输入数据过大,增大并行度可以让算子切分为更多的子任务,加快数据处理速度。可见,并行度是 Flink 对任务并行切分的一种描述。槽位数目是在资源设置时,对单个 TaskManager 的资源切分粒度。关于并行度、槽位数目等配置,将在 9.2.2 中详细说明。 \ No newline at end of file diff --git a/doc/ch-table-sql/catalog-function.md b/doc/ch-table-sql/catalog-function.md index d9180ca..81c81fe 100644 --- a/doc/ch-table-sql/catalog-function.md +++ b/doc/ch-table-sql/catalog-function.md @@ -3,26 +3,26 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -System Function给我们提供了大量内置功能,但对于一些特定领域或特定场景,System Function还远远不够,Flink提供了用户自定义函数功能,开发者可以实现一些特定的需求。用户自定义函数需要注册到Catalog中,因此这类函数又被称为Catalog Function。Catalog Function大大增强了Flink SQL的表达能力。 +System Function 给我们提供了大量内置功能,但对于一些特定领域或特定场景,System Function 还远远不够,Flink 提供了用户自定义函数功能,开发者可以实现一些特定的需求。用户自定义函数需要注册到 Catalog 中,因此这类函数又被称为 Catalog Function。Catalog Function 大大增强了 Flink SQL 的表达能力。 ## 注册函数 -在使用一个函数前,一般需要将这个函数注册到Catalog中。注册时需要调用`TableEnvironment`中的`registerFunction`方法。每个`TableEnvironment`都会有一个成员`FunctionCatalog`,`FunctionCatalog`中存储了函数的定义,当注册函数时,实际上是将这个函数名和对应的实现写入到`FunctionCatalog`中。以注册一个`ScalarFunction`为例,它在源码中如下: +在使用一个函数前,一般需要将这个函数注册到 Catalog 中。注册时需要调用 `TableEnvironment` 中的 `registerFunction` 方法。每个 `TableEnvironment` 都会有一个成员 `FunctionCatalog`,`FunctionCatalog` 中存储了函数的定义,当注册函数时,实际上是将这个函数名和对应的实现写入到 `FunctionCatalog` 中。以注册一个 `ScalarFunction` 为例,它在源码中如下: ```java FunctionCatalog functionCatalog = ... /** - * 注册一个ScalaFunction + * 注册一个 ScalaFunction * name: 函数名 - * function: 一个自定义的ScalaFunction + * function: 一个自定义的 ScalaFunction */ public void registerFunction(String name, ScalarFunction function) { functionCatalog.registerTempSystemScalarFunction( @@ -31,15 +31,15 @@ public void registerFunction(String name, ScalarFunction function) { } ``` -在Flink提供的[System Function](system-function.md)中,我们已经提到,内置的System Function提供了包括数学、比较、字符串、聚合等常用功能,如果这些内置的System Function无法满足我们的需求,我们可以使用Java、Scala和Python语言自定义一个函数。接下来我们将将详细讲解如何自定义函数以及如何使用函数。 +在 Flink 提供的 [System Function](system-function.md) 中,我们已经提到,内置的 System Function 提供了包括数学、比较、字符串、聚合等常用功能,如果这些内置的 System Function 无法满足我们的需求,我们可以使用 Java、Scala 和 Python 语言自定义一个函数。接下来我们将将详细讲解如何自定义函数以及如何使用函数。 ## 标量函数 -标量函数(Scalar Function)接收零个、一个或者多个输入,输出一个单值标量。这里以处理经纬度为例来展示如何自定义Scala Function。 +标量函数(Scalar Function)接收零个、一个或者多个输入,输出一个单值标量。这里以处理经纬度为例来展示如何自定义 Scala Function。 -当前,大量的应用极度依赖地理信息(Geographic Information):打车软件需要用户用户定位起点和终点、外卖平台需要确定用户送餐地点、运动类APP会记录用户的活动轨迹等。我们一般使用精度(Longitude)和纬度(Latitude)来标记一个地点。经纬度作为原始数据很难直接拿来分析,需要做一些转化,而Table API & SQL中没有相应的函数,因此需要我们自己来实现。 +当前,大量的应用极度依赖地理信息(Geographic Information):打车软件需要用户用户定位起点和终点、外卖平台需要确定用户送餐地点、运动类 APP 会记录用户的活动轨迹等。我们一般使用精度(Longitude)和纬度(Latitude)来标记一个地点。经纬度作为原始数据很难直接拿来分析,需要做一些转化,而 Table API & SQL 中没有相应的函数,因此需要我们自己来实现。 -如果想自定义函数,我们需要继承`org.apache.flink.table.functions.ScalarFunction`类,实现`eval`方法。这与第四章介绍的DataStream API中算子自定义有异曲同工之处。假设我们需要判断一个经纬度数据是否在北京四环以内,可以使用Java实现下面的函数: +如果想自定义函数,我们需要继承 `org.apache.flink.table.functions.ScalarFunction` 类,实现 `eval` 方法。这与第四章介绍的 DataStream API 中算子自定义有异曲同工之处。假设我们需要判断一个经纬度数据是否在北京四环以内,可以使用 Java 实现下面的函数: ```java public class IsInFourRing extends ScalarFunction { @@ -58,7 +58,7 @@ public class IsInFourRing extends ScalarFunction { } ``` -在这个实现中,`eval`方法接收两个`double`类型的输入,对数据进行处理,生成一个`boolean`类型的输出。整个类中最重要的地方是`eval`方法,它决定了这个自定义函数的内在逻辑。自定义好函数之后,我们还需要用`registerFunction`方法将这个函数注册到Catalog中,并为之起名为`IsInFourRing`,这样就可以在SQL语句中使用`IsInFourRing`的这个名字进行计算了。 +在这个实现中,`eval` 方法接收两个 `double` 类型的输入,对数据进行处理,生成一个 `boolean` 类型的输出。整个类中最重要的地方是 `eval` 方法,它决定了这个自定义函数的内在逻辑。自定义好函数之后,我们还需要用 `registerFunction` 方法将这个函数注册到 Catalog 中,并为之起名为 `IsInFourRing`,这样就可以在 SQL 语句中使用 `IsInFourRing` 的这个名字进行计算了。 ```java List> geoList = new ArrayList<>(); @@ -80,14 +80,14 @@ DataStream> geoStream = env Table geoTable = tEnv.fromDataStream(geoStream, "id, long, alt, ts.rowtime, proc.proctime"); tEnv.createTemporaryView("geo", geoTable); -// 注册函数到Catalog中,指定名字为IsInFourRing +// 注册函数到 Catalog 中,指定名字为 IsInFourRing tEnv.registerFunction("IsInFourRing", new IsInFourRing()); -// 在SQL语句中使用IsInFourRing函数 +// 在 SQL 语句中使用 IsInFourRing 函数 Table inFourRingTab = tEnv.sqlQuery("SELECT id FROM geo WHERE IsInFourRing(long, alt)"); ``` -我们也可以利用编程语言的重载特性,针对不同类型的输入设计不同的函数。假如经纬度参数以`float`或者`String`形式传入,为了适应这些输入,可以实现多个`eval`方法,让编译器帮忙做重载: +我们也可以利用编程语言的重载特性,针对不同类型的输入设计不同的函数。假如经纬度参数以 `float` 或者 `String` 形式传入,为了适应这些输入,可以实现多个 `eval` 方法,让编译器帮忙做重载: ```java public boolean eval(double lon, double lat) { @@ -108,31 +108,31 @@ public boolean eval(String lonStr, String latStr) { } ``` -`eval`方法的输入和输出类型决定了`ScalarFunction`的输入输出类型。在具体的执行过程中,Flink的类型系统会自动推测输入和输出类型,一些无法被自动推测的类型可以使用`DataTypeHint`来提示Flink使用哪种输入输出类型。下面的代码接收两个`Timestamp`作为输入,返回两个时间戳之间的差,用`DataTypeHint`来提示将返回结果转化为`BIGINT`类型。 +`eval` 方法的输入和输出类型决定了 `ScalarFunction` 的输入输出类型。在具体的执行过程中,Flink 的类型系统会自动推测输入和输出类型,一些无法被自动推测的类型可以使用 `DataTypeHint` 来提示 Flink 使用哪种输入输出类型。下面的代码接收两个 `Timestamp` 作为输入,返回两个时间戳之间的差,用 `DataTypeHint` 来提示将返回结果转化为 `BIGINT` 类型。 ```java public class TimeDiff extends ScalarFunction { - public @DataTypeHint("BIGINT") long eval(Timestamp first, Timestamp second) { + public @DataTypeHint("BIGINT")long eval(Timestamp first, Timestamp second) { return java.time.Duration.between(first.toInstant(), second.toInstant()).toMillis(); } } ``` -`DataTypeHint`一般可以满足绝大多数的需求,如果类型仍然复杂,开发者可以自己重写`UserDefinedFunction#getTypeInference(DataTypeFactory)`方法,返回合适的类型。 +`DataTypeHint` 一般可以满足绝大多数的需求,如果类型仍然复杂,开发者可以自己重写 `UserDefinedFunction#getTypeInference(DataTypeFactory)` 方法,返回合适的类型。 ## 表函数 -另一种常见的用户自定义函数为表函数(Table Function)。Table Function能够接收零到多个标量输入,与Scalar Function不同的是,Table Function输出零到多行,每行数据一到多列。从这些特征来看,Table Function更像是一个表,一般出现在`FROM`之后。我们在[Temporal Table Join](sql-join)中提到的Temporal Table就是一种Table Function。 +另一种常见的用户自定义函数为表函数(Table Function)。Table Function 能够接收零到多个标量输入,与 Scalar Function 不同的是,Table Function 输出零到多行,每行数据一到多列。从这些特征来看,Table Function 更像是一个表,一般出现在 `FROM` 之后。我们在 [Temporal Table Join](sql-join) 中提到的 Temporal Table 就是一种 Table Function。 -为了定义Table Function,我们需要继承`org.apache.flink.table.functions.TableFunction`类,然后实现`eval`方法,这与Scalar Function几乎一致。同样,我们可以利用重载,实现一到多个`eval`方法。与Scala Function中只输出一个标量不同,Table Function可以输出零到多行,`eval`方法里使用`collect`方法将结果输出,输出的数据类型由`TableFunction`中的泛型T决定。 +为了定义 Table Function,我们需要继承 `org.apache.flink.table.functions.TableFunction` 类,然后实现 `eval` 方法,这与 Scalar Function 几乎一致。同样,我们可以利用重载,实现一到多个 `eval` 方法。与 Scala Function 中只输出一个标量不同,Table Function 可以输出零到多行,`eval` 方法里使用 `collect` 方法将结果输出,输出的数据类型由 `TableFunction` 中的泛型 T 决定。 -下面的代码将字符串输入按照`#`切分,输出零到多行,输出类型为`String`。 +下面的代码将字符串输入按照 `#` 切分,输出零到多行,输出类型为 `String`。 ```java public class TableFunc extends TableFunction { - // 按#切分字符串,输出零到多行 + // 按 #切分字符串,输出零到多行 public void eval(String str) { if (str.contains("#")) { String[] arr = str.split("#"); @@ -144,7 +144,7 @@ public class TableFunc extends TableFunction { } ``` -在主逻辑中,我们需要使用`registerFunction`方法注册函数,并指定一个名字。在SQL语句中,使用`LATERAL TABLE()`来调用这个Table Function。 +在主逻辑中,我们需要使用 `registerFunction` 方法注册函数,并指定一个名字。在 SQL 语句中,使用 `LATERAL TABLE()` 来调用这个 Table Function。 ```java List> list = new ArrayList<>(); @@ -160,18 +160,18 @@ DataStream> stream = env return element.f3.getTime(); } }); -// 获取Table +// 获取 Table Table table = tEnv.fromDataStream(stream, "id, long, str, ts.rowtime"); tEnv.createTemporaryView("input_table", table); -// 注册函数到Catalog中,指定名字为Func +// 注册函数到 Catalog 中,指定名字为 Func tEnv.registerFunction("Func", new TableFunc()); -// input_table与LATERAL TABLE(Func(str))进行JOIN +// input_table 与 LATERAL TABLE(Func(str)) 进行 JOIN Table tableFunc = tEnv.sqlQuery("SELECT id, s FROM input_table, LATERAL TABLE(Func(str)) AS T(s)"); ``` -在这个例子中,`LATERAL TABLE(Func(str))`接受`input_table`中字段`str`作为输入,被命名为一个新表,名为`T`,`T`中有一个字段`s`,`s`是我们刚刚自定义的`TableFunc`的输出。本例中,`input_table`和`LATERAL TABLE(Func(str))`之间使用逗号`,`隔开,实际上这两个表是按照`CROSS JOIN`方式连接起来的,或者说,这两个表在做笛卡尔积,这个SQL语句返回值为: +在这个例子中,`LATERAL TABLE(Func(str))` 接受 `input_table` 中字段 `str` 作为输入,被命名为一个新表,名为 `T`,`T` 中有一个字段 `s`,`s` 是我们刚刚自定义的 `TableFunc` 的输出。本例中,`input_table` 和 `LATERAL TABLE(Func(str))` 之间使用逗号 `,` 隔开,实际上这两个表是按照 `CROSS JOIN` 方式连接起来的,或者说,这两个表在做笛卡尔积,这个 SQL 语句返回值为: ``` 1,22 @@ -180,14 +180,14 @@ Table tableFunc = tEnv.sqlQuery("SELECT id, s FROM input_table, LATERAL TABLE(Fu 2,John ``` -我们也可以使用其他类型的`JOIN`,比如`LEFT JOIN`: +我们也可以使用其他类型的 `JOIN`,比如 `LEFT JOIN`: ```java -// input_table与LATERAL TABLE(Func(str))进行LEFT JOIN +// input_table 与 LATERAL TABLE(Func(str)) 进行 LEFT JOIN Table joinTableFunc = tEnv.sqlQuery("SELECT id, s FROM input_table LEFT JOIN LATERAL TABLE(Func(str)) AS T(s) ON TRUE"); ``` -`ON TRUE`条件表示所有左侧表中的数据都与右侧进行Join,因此结果中多出了一行`3,null`。 +`ON TRUE` 条件表示所有左侧表中的数据都与右侧进行 Join,因此结果中多出了一行 `3,null`。 ``` 1,22 @@ -199,13 +199,20 @@ Table joinTableFunc = tEnv.sqlQuery("SELECT id, s FROM input_table LEFT JOIN LAT ## 聚合函数 -在System Function中我们曾介绍了聚合函数,聚合函数一般将多行数据进行聚合,输出一个标量。常用的聚合函数有`COUNT`、`SUM`等。对于一些特定问题,这些内置函数可能无法满足需求,在Flink SQL中,用户可以对聚合函数进行用户自定义,这种函数被称为用户自定义聚合函数(User-Defined Aggregate Function)。 +在 System Function 中我们曾介绍了聚合函数,聚合函数一般将多行数据进行聚合,输出一个标量。常用的聚合函数有 `COUNT`、`SUM` 等。对于一些特定问题,这些内置函数可能无法满足需求,在 Flink SQL 中,用户可以对聚合函数进行用户自定义,这种函数被称为用户自定义聚合函数(User-Defined Aggregate Function)。 -假设我们的表中有下列字段:`id`、数值`v`、权重`w`,我们对`id`进行`GROUP BY`,计算`v`的加权平均值。计算的过程如下表所示。 +假设我们的表中有下列字段:`id`、数值 `v`、权重 `w`,我们对 `id` 进行 `GROUP BY`,计算 `v` 的加权平均值。计算的过程如下表所示。 -![用户自定义聚合函数:求加权平均](./img/aggregate.png) +```{figure} ./img/aggregate.png +--- +name: fig-user-defined-aggregate +width: 80% +align: center +--- +用户自定义聚合函数:求加权平均 +``` -下面的代码实现了一个加权平均函数`WeightedAvg`,这个函数接收两个`Long`类型的输入,返回一个`Double`类型的输出。计算过程基于累加器`WeightedAvgAccum`,它记录了当前加权和`sum`以及权重`weight`。 +下面的代码实现了一个加权平均函数 `WeightedAvg`,这个函数接收两个 `Long` 类型的输入,返回一个 `Double` 类型的输出。计算过程基于累加器 `WeightedAvgAccum`,它记录了当前加权和 `sum` 以及权重 `weight`。 ```java import org.apache.flink.table.functions.AggregateFunction; @@ -221,7 +228,7 @@ public class WeightedAvg extends AggregateFunction it) { Iterator iter = it.iterator(); while (iter.hasNext()) { @@ -253,7 +260,7 @@ public class WeightedAvg extends AggregateFunction`中定义的泛型T保持一致。 +* `createAccumulator`:创建 ACC,可以使用一个自定义的数据结构。 +* `accumulate`:处理新流入数据,更新 ACC;第一个参数是 ACC,第二个以及以后的参数为流入数据。 +* `getValue`:输出结果,返回值的数据类型 T 与 `AggregateFunction` 中定义的泛型 T 保持一致。 -`createAccumulator`创建一个ACC。`accumulate`第一个参数为ACC,第二个及以后的参数为整个`AggregateFunction`的输入参数,这个方法的作用就是接受输入,并将输入作用到ACC上,更新ACC。`getValue`返回值的类型`T`为整个`AggregateFunction`的输出类型。 +`createAccumulator` 创建一个 ACC。`accumulate` 第一个参数为 ACC,第二个及以后的参数为整个 `AggregateFunction` 的输入参数,这个方法的作用就是接受输入,并将输入作用到 ACC 上,更新 ACC。`getValue` 返回值的类型 `T` 为整个 `AggregateFunction` 的输出类型。 -除了上面三个方法,下面三个方法需要根据使用情况来决定是否需要定义。例如,在流处理的会话窗口上进行聚合时,必须定义`merge`方法,因为当发现某行数据恰好可以将两个窗口连接为一个窗口时,`merge`方法可以将两个窗口内的ACC合并。 +除了上面三个方法,下面三个方法需要根据使用情况来决定是否需要定义。例如,在流处理的会话窗口上进行聚合时,必须定义 `merge` 方法,因为当发现某行数据恰好可以将两个窗口连接为一个窗口时,`merge` 方法可以将两个窗口内的 ACC 合并。 -* `retract`:有界`OVER WINDOW`场景上,窗口是有界的,需要将早期的数据剔除。 -* `merge`:将多个ACC合并为一个ACC,常用在流处理的会话窗口分组和批处理分组上。 -* `resetAccumulator`:重置ACC,用于批处理分组上。 +* `retract`:有界 `OVER WINDOW` 场景上,窗口是有界的,需要将早期的数据剔除。 +* `merge`:将多个 ACC 合并为一个 ACC,常用在流处理的会话窗口分组和批处理分组上。 +* `resetAccumulator`:重置 ACC,用于批处理分组上。 -这些方法必须声明为`public`,且不能是`static`的,方法名必须与上述名字保持一致。 +这些方法必须声明为 `public`,且不能是 `static` 的,方法名必须与上述名字保持一致。 -在主逻辑中,我们注册这个函数,并在SQL语句中使用它: +在主逻辑中,我们注册这个函数,并在 SQL 语句中使用它: ```java List> list = new ArrayList<>(); diff --git a/doc/ch-table-sql/dynamic-table.md b/doc/ch-table-sql/dynamic-table.md index 026dde2..3169109 100644 --- a/doc/ch-table-sql/dynamic-table.md +++ b/doc/ch-table-sql/dynamic-table.md @@ -3,20 +3,20 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -在上一节中,我们已经了解了Table API & SQL的基本使用方法,本节主要探讨一些与流处理上进行关系查询所需注意的一些问题。 +在上一节中,我们已经了解了 Table API & SQL 的基本使用方法,本节主要探讨一些与流处理上进行关系查询所需注意的一些问题。 ## 动态表和持续查询 首先我们需要了解一下在数据流上进行关系型查询的基本原理。 -关系型数据库起源于上世纪70年代,距今已经有五十年的历史。关系型数据库主要基于Edgar Codd所提出的关系代数(Relational Algebra),SQL是基于关系代数的查询语言。如今,关系型数据库以及SQL已经成为数据查询领域的标准,特别是SQL因其标准性和易用性,已经不仅仅局限在关系型数据库上做查询,它正在被广泛应用在各类数据分析场景。不过,关系代数模型在其创立和发展过程中并不是为流处理而设计的,更适合进行批处理。 +关系型数据库起源于上世纪 70 年代,距今已经有五十年的历史。关系型数据库主要基于 Edgar Codd 所提出的关系代数(Relational Algebra),SQL 是基于关系代数的查询语言。如今,关系型数据库以及 SQL 已经成为数据查询领域的标准,特别是 SQL 因其标准性和易用性,已经不仅仅局限在关系型数据库上做查询,它正在被广泛应用在各类数据分析场景。不过,关系代数模型在其创立和发展过程中并不是为流处理而设计的,更适合进行批处理。 ### 批处理关系型查询与流处理的区别与联系 @@ -30,25 +30,39 @@ 从表中可以看到,在数据流上应用关系型查询是非常有挑战性的:数据流是无界的,一次查询启动后,需要持续对数据流做处理,查询结果根据新流入数据而不断更新。虽然流处理有其难度,但也并不是无解的,这里就涉及到了物化视图的概念。 -在传统关系型查询中有物理表和虚拟视图的概念:物理表是真实存在的;虚拟视图是在物理表上基于一个查询生成的虚拟的表,视图有表结构Schema,但并不实现数据存储。我们可以像使用一个物理表一样在一个视图上进行查询,但由于视图没有存储数据,它要先执行定义这个视图的查询。在这两个概念的基础上,一些人提出了物化视图的概念,即将视图里所需要的数据物理化地缓存起来,它提前缓存了数据,因此比起虚拟的视图来说执行速度更快。当物化视图所依赖的物理表发生变化时,在物化视图中的缓存也必须随之变化。流处理上的关系型查询借鉴了物化视图的实现思路,将外部系统中的数据缓存起来,每当数据流入,物化视图随之更新。 +在传统关系型查询中有物理表和虚拟视图的概念:物理表是真实存在的;虚拟视图是在物理表上基于一个查询生成的虚拟的表,视图有表结构 Schema,但并不实现数据存储。我们可以像使用一个物理表一样在一个视图上进行查询,但由于视图没有存储数据,它要先执行定义这个视图的查询。在这两个概念的基础上,一些人提出了物化视图的概念,即将视图里所需要的数据物理化地缓存起来,它提前缓存了数据,因此比起虚拟的视图来说执行速度更快。当物化视图所依赖的物理表发生变化时,在物化视图中的缓存也必须随之变化。流处理上的关系型查询借鉴了物化视图的实现思路,将外部系统中的数据缓存起来,每当数据流入,物化视图随之更新。 ### 动态表上的持续查询 -从上面的对比看到,流处理中没有静态的物理表,Flink提出了动态表(Dynamic Table)的概念,旨在解决如何在数据流上进行关系型查询。Dynamic Table用来表示不断流入的数据表,数据流是源源不断流入的,Dynamic Table也是随着新数据的流入而不断更新的。在Dynamic Table上进行查询,被称为持续查询(Continuous Query),因为底层的计算是持续不断的。一个Continuous Query的结果也是一个Dynamic Table,它会根据新流入的数据不断更新结果。在Dynamic Table上进行Continuous Query与物化视图不断更新缓存中的数据非常相似。 +从上面的对比看到,流处理中没有静态的物理表,Flink 提出了动态表(Dynamic Table)的概念,旨在解决如何在数据流上进行关系型查询。Dynamic Table 用来表示不断流入的数据表,数据流是源源不断流入的,Dynamic Table 也是随着新数据的流入而不断更新的。在 Dynamic Table 上进行查询,被称为持续查询(Continuous Query),因为底层的计算是持续不断的。一个 Continuous Query 的结果也是一个 Dynamic Table,它会根据新流入的数据不断更新结果。在 Dynamic Table 上进行 Continuous Query 与物化视图不断更新缓存中的数据非常相似。 -![Dynamic Table与Continuous Query](./img/dynamic-table.png) +```{figure} ./img/dynamic-table.png +--- +name: fig-dynamic-table +width: 80% +align: center +--- +Dynamic Table 与 Continuous Query +``` -上面这张图展示了数据流、Dynamic Table和Continuous Query之间的关系: +{numref}`fig-dynamic-table` 展示了数据流、Dynamic Table 和 Continuous Query 之间的关系: -1. 数据流被转换为Dynamic Table -2. 在这个Dynamic Table上执行Continuous Query生成一个新的Dynamic Table -3. 将生成的Continuous Query转化为一个数据流 +1. 数据流被转换为 Dynamic Table +2. 在这个 Dynamic Table 上执行 Continuous Query 生成一个新的 Dynamic Table +3. 将生成的 Continuous Query 转化为一个数据流 我们继续以电商用户行为分析为例来看看数据流和动态表之间的转换。 -![用户行为数据流转换为动态表](./img/data-to-table.png) +```{figure} ./img/data-to-table.png +--- +name: fig-data-to-table +width: 80% +align: center +--- +用户行为数据流转换为动态表 +``` -如图中左侧所示,一个数据流包含用户行为,可以转化成图中右侧的一个动态表,实际上这个动态表是不断更新的。我们在这个动态表上进行下面的查询: +如 {numref}`fig-data-to-table` 左侧所示,一个数据流包含用户行为,可以转化成图中右侧的一个动态表,实际上这个动态表是不断更新的。我们在这个动态表上进行下面的查询: ```sql SELECT @@ -58,13 +72,20 @@ FROM user_behavior GROUP BY user_id ``` -这个SQL语句对`user_id`字段分组,统计每个`user_id`所产生的行为。在批处理时,这样的一个SQL查询会在一个静态的数据集上生成一个确定的结果。但对于流处理来说,每当新数据流入时,查询的结果也要随之更新,下图展示了动态表查询的一个过程。 +这个 SQL 语句对 `user_id` 字段分组,统计每个 `user_id` 所产生的行为。在批处理时,这样的一个 SQL 查询会在一个静态的数据集上生成一个确定的结果。但对于流处理来说,每当新数据流入时,查询的结果也要随之更新,{numref}`fig-continuous-query` 展示了动态表查询的一个过程。 -![一个Continuous Query示例:统计用户行为](./img/continuous-query.png) +```{figure} ./img/continuous-query.png +--- +name: fig-continuous-query +width: 80% +align: center +--- +一个 Continuous Query 示例:统计用户行为 +``` -当第一条数据`(1, pv, 00:00:00)`插入到源表时,整个源表只有这一条数据,生成的结果为`(1, 1)`。当第二条数据`(2, fav, 00:00:00)`进入源表时,SQL引擎在结果表中插入结果`(2, 1)`。接着,ID为1的用户再次产生了行为,新数据插入会导致原来的统计结果`(1, 1)`发生变化,变成了`(1, 2)`。这里不再是往结果表中插入新数据,而是更改原来的结果数据。 +当第一条数据 `(1, pv, 00:00:00)` 插入到源表时,整个源表只有这一条数据,生成的结果为 `(1, 1)`。当第二条数据 `(2, fav, 00:00:00)` 进入源表时,SQL 引擎在结果表中插入结果 `(2, 1)`。接着,ID 为 1 的用户再次产生了行为,新数据插入会导致原来的统计结果 `(1, 1)` 发生变化,变成了 `(1, 2)`。这里不再是往结果表中插入新数据,而是更改原来的结果数据。 -这个数据流是源源不断流入的,还会有下一分钟、下一小时的数据继续流入,我们可以在时间维度上对数据分组,这里以一分钟为一组,编写下面的SQL: +这个数据流是源源不断流入的,还会有下一分钟、下一小时的数据继续流入,我们可以在时间维度上对数据分组,这里以一分钟为一组,编写下面的 SQL: ```sql SELECT @@ -75,66 +96,80 @@ FROM user_behavior GROUP BY user_id, TUMBLE(ts, INTERVAL '1' MINUTE) ``` -这个查询与第一个查询非常相似,只不过数据是按照滚动时间窗口来分组的。下图展示了这个查询的执行过程,相当于数据按照时间进行了切分,在这个时间窗口内进行用户行为的统计。我们将在本章[窗口](sql-window)部分详细介绍时间窗口的分组方法。 +这个查询与第一个查询非常相似,只不过数据是按照滚动时间窗口来分组的。下图展示了这个查询的执行过程,相当于数据按照时间进行了切分,在这个时间窗口内进行用户行为的统计。我们将在本章 [窗口](sql-window) 部分详细介绍时间窗口的分组方法。 -![统计用户在一个窗口内的行为](./img/tumble-append.png) +```{figure} ./img/tumble-append.png +--- +name: fig-tumble-append +width: 80% +align: center +--- +统计用户在一个窗口内的行为 +``` -我们以第一个时间窗口为例,数据在00:00:00和00:00:59之间有5条数据,对这5条数据统计得到一个结果,结果表的最后一列`end_ts`为窗口结束时间戳。下一个一分钟数据到达后,对00:01:00和00:01:59之间的数据进行统计,由于`end_ts`字段发生了变化,新结果并不是直接在老结果上做的更新,而是在结果表中插入新数据。 +我们以第一个时间窗口为例,数据在 00:00:00 和 00:00:59 之间有 5 条数据,对这 5 条数据统计得到一个结果,结果表的最后一列 `end_ts` 为窗口结束时间戳。下一个一分钟数据到达后,对 00:01:00 和 00:01:59 之间的数据进行统计,由于 `end_ts` 字段发生了变化,新结果并不是直接在老结果上做的更新,而是在结果表中插入新数据。 -根据前面的两个SQL语句以及执行结果,我们看到流处理上进行关系型查询一般有两种生成结果的方式: +根据前面的两个 SQL 语句以及执行结果,我们看到流处理上进行关系型查询一般有两种生成结果的方式: -1. 第二个查询语句只追加结果,或者说只在结果表上进行`INSERT`操作。 -2. 第一个查询语句追加结果的同时,也对结果不断更新,或者说即进行`INSERT`操作又进行`UPDATE`操作或`DELETE`操作。 +1. 第二个查询语句只追加结果,或者说只在结果表上进行 `INSERT` 操作。 +2. 第一个查询语句追加结果的同时,也对结果不断更新,或者说即进行 `INSERT` 操作又进行 `UPDATE` 操作或 `DELETE` 操作。 在批处理中,结果生成是确定的,但在流处理中,这两种方式会对计算结果的输出产生影响。 ### 动态表的两种输出模式 -前面提到,计算结果的输出会有两种形式。一种是在结果末尾追加,我们称这种模式为追加(Append-only)模式;一种是既在结果末尾追加,又对已有数据更新,这种被称为Update模式。对数据更新又细分为两种方式,可以先将老数据撤回,再添加新数据,这种形式被取名为撤回(Retract)模式;或者直接在老数据上做更新,被称为更新(Upsert)模式。 +前面提到,计算结果的输出会有两种形式。一种是在结果末尾追加,我们称这种模式为追加(Append-only)模式;一种是既在结果末尾追加,又对已有数据更新,这种被称为 Update 模式。对数据更新又细分为两种方式,可以先将老数据撤回,再添加新数据,这种形式被取名为撤回(Retract)模式;或者直接在老数据上做更新,被称为更新(Upsert)模式。 -下面的代码将一个`Table`转换为`DataStream`,使用了Append-only模式。这种模式相对比较简单,这里不再仔细分析。 +下面的代码将一个 `Table` 转换为 `DataStream`,使用了 Append-only 模式。这种模式相对比较简单,这里不再仔细分析。 ```java StreamTableEnvironment tEnv = ... Table table = ... -// 将table转换为DataStream -// Append-only模式 +// 将 table 转换为 DataStream +// Append-only 模式 DataStream dsRow = tEnv.toAppendStream(table, Row.class); ``` -我们仍然以第一个查询为例,讨论一下Retract和Upsert两种模式。如果使用Retract模式,除了原有的结果,还需要增加一个类型`Boolean`的标志位列,这个标志位列用来确定当前这行数据是新加入的,还是需要撤回的。 +我们仍然以第一个查询为例,讨论一下 Retract 和 Upsert 两种模式。如果使用 Retract 模式,除了原有的结果,还需要增加一个类型 `Boolean` 的标志位列,这个标志位列用来确定当前这行数据是新加入的,还是需要撤回的。 -![Retract模式下对数据的更新](./img/retract.png) +```{figure} ./img/retract.png +--- +name: fig-retract-mode +width: 80% +align: center +--- +Retract 模式下对数据的更新 +``` -如上图所示,结果共有三列:`(flag, user_id, behavior_cnt)`,其中第一列为标志位,表示本行数据是加入还是撤回,后两行是查询结果。对于前两行输入,数据经过SQL引擎后,生成的结果追加到结尾,因此,标志位都为`true`。第三行输入进入,我们需要对结果进行更新,这时SQL引擎先将原来的老数据置为`false`:`(false, 1, 1)`,然后将新数据追加进来:`(true, 1, 2)`。 +如 {numref}`fig-retract-mode` 所示,结果共有三列:`(flag, user_id, behavior_cnt)`,其中第一列为标志位,表示本行数据是加入还是撤回,后两行是查询结果。对于前两行输入,数据经过 SQL 引擎后,生成的结果追加到结尾,因此,标志位都为 `true`。第三行输入进入,我们需要对结果进行更新,这时 SQL 引擎先将原来的老数据置为 `false`:`(false, 1, 1)`,然后将新数据追加进来:`(true, 1, 2)`。 ```java -// 将table转换为DataStream -// Retract模式,Boolean为标志位 +// 将 table 转换为 DataStream +// Retract 模式,Boolean 为标志位 DataStream> retractStream = tableEnv.toRetractStream(table, Row.class); ``` -另一种模式为Upsert模式,即对结果中已存在的数据使用SQL中的`UPDATE`操作或`DELETE`操作,更新或删除该行数据。Upsert模式的前提是,输出结果中有一个唯一的ID,可以根据唯一ID更新结果中。在这个例子中,用户ID可以被用来作为唯一ID,因为用户ID一般不会重复。Upsert模式相比Retract模式的成本稍低。Upsert模式也要和特定的`TableSink`紧密结合,比如Key-Value数据库更适合进行Upsert操作。 +另一种模式为 Upsert 模式,即对结果中已存在的数据使用 SQL 中的 `UPDATE` 操作或 `DELETE` 操作,更新或删除该行数据。Upsert 模式的前提是,输出结果中有一个唯一的 ID,可以根据唯一 ID 更新结果中。在这个例子中,用户 ID 可以被用来作为唯一 ID,因为用户 ID 一般不会重复。Upsert 模式相比 Retract 模式的成本稍低。Upsert 模式也要和特定的 `TableSink` 紧密结合,比如 Key-Value 数据库更适合进行 Upsert 操作。 ### 流处理的限制 -至此,我们已经了解了流式关系型型查询的基本原理,但目前Flink的流处理并不能支持所有的SQL语句,因为流处理的本质是使用状态来缓存数据,包括表和中间计算过程都是Flink中的状态。因此,我们写的SQL查询不能占用太多的状态资源。 +至此,我们已经了解了流式关系型型查询的基本原理,但目前 Flink 的流处理并不能支持所有的 SQL 语句,因为流处理的本质是使用状态来缓存数据,包括表和中间计算过程都是 Flink 中的状态。因此,我们写的 SQL 查询不能占用太多的状态资源。 -仍然以前面所提到的两个SQL语句为例,目前这两个SQL都是可执行的。第一个SQL语句转化为DataStream API实现的话,整个作业所需保存的状态数据为`(user_id, behavior_cnt)`这样一个二元对。当新数据流入时,如果是状态中已存在的`user_id`,直接更新状态,如果是新`user_id`,则在状态中添加一条数据。除非用户量极大,否则这个状态数据是可维护的。但是如果这个作业源源不断有新用户流入,作业长时间运行,已有状态不进行清理,状态有可能突破内存限制,导致作业崩溃。对于第二个SQL语句,我们建立了滚动时间窗口,在第五章窗口算子的介绍中,我们提到了增量计算的概念,这可以有效避免大量数据缓存在状态中,相对来说内存风险较小。 +仍然以前面所提到的两个 SQL 语句为例,目前这两个 SQL 都是可执行的。第一个 SQL 语句转化为 DataStream API 实现的话,整个作业所需保存的状态数据为 `(user_id, behavior_cnt)` 这样一个二元对。当新数据流入时,如果是状态中已存在的 `user_id`,直接更新状态,如果是新 `user_id`,则在状态中添加一条数据。除非用户量极大,否则这个状态数据是可维护的。但是如果这个作业源源不断有新用户流入,作业长时间运行,已有状态不进行清理,状态有可能突破内存限制,导致作业崩溃。对于第二个 SQL 语句,我们建立了滚动时间窗口,在第五章窗口算子的介绍中,我们提到了增量计算的概念,这可以有效避免大量数据缓存在状态中,相对来说内存风险较小。 -另一个难点是数据的更新。前文已经提到,如果源数据更新,有可能导致整个数据表重新进行一次计算。比如,我们对一个元数据中的某个字段执行`RANK`,或`ORDER BY`,那么每新增加一个数据,都会导致整个表重新进行一次排序,这对流处理引擎的性能要求极高。目前,Flink在这方面的功能正在不断完善。 +另一个难点是数据的更新。前文已经提到,如果源数据更新,有可能导致整个数据表重新进行一次计算。比如,我们对一个元数据中的某个字段执行 `RANK`,或 `ORDER BY`,那么每新增加一个数据,都会导致整个表重新进行一次排序,这对流处理引擎的性能要求极高。目前,Flink 在这方面的功能正在不断完善。 ## 状态过期时间 -通过前面的讨论,我们看到Flink通过状态来保存一些中间数据。但是状态不能无限增加,否则会突破内存限制。Flink提供了一个配置,帮助我们清理一些空闲状态数据: +通过前面的讨论,我们看到 Flink 通过状态来保存一些中间数据。但是状态不能无限增加,否则会突破内存限制。Flink 提供了一个配置,帮助我们清理一些空闲状态数据: ```java tEnv.getConfig.setIdleStateRetentionTime(Time.hours(1), Time.hours(2)); ``` -空闲状态数据是指该数据长时间没有更新,仍然保留在状态中。上面的方法有两个参数:`minTime`和`maxTime`,空闲状态至少会保留`minTime`的时间,这个时间内数据不会被清理;超过`maxTime`的时间后,空闲状态会被清除。一旦这个数据被清除,那意味着后续数据流入,会被认为是一个新数据重新添加到状态中。基于这样的数据,得到的计算结果是近似准确的。可见,这是一个在结果准确度和计算性能之间的平衡。 +空闲状态数据是指该数据长时间没有更新,仍然保留在状态中。上面的方法有两个参数:`minTime` 和 `maxTime`,空闲状态至少会保留 `minTime` 的时间,这个时间内数据不会被清理;超过 `maxTime` 的时间后,空闲状态会被清除。一旦这个数据被清除,那意味着后续数据流入,会被认为是一个新数据重新添加到状态中。基于这样的数据,得到的计算结果是近似准确的。可见,这是一个在结果准确度和计算性能之间的平衡。 :::tip -如果将`minTime`和`maxTime`设置为0,表示不作过期时间设置,状态永远不会清除。`maxTime`至少要比`minTime`大5分钟。 +如果将 `minTime` 和 `maxTime` 设置为 0,表示不作过期时间设置,状态永远不会清除。`maxTime` 至少要比 `minTime` 大 5 分钟。 ::: diff --git a/doc/ch-table-sql/exercise-iot.md b/doc/ch-table-sql/exercise-iot.md index 78b1f0e..e68e39d 100644 --- a/doc/ch-table-sql/exercise-iot.md +++ b/doc/ch-table-sql/exercise-iot.md @@ -3,55 +3,61 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -经过本章的学习,结合三到七章的背景知识,读者应该对Table API & SQL有了比较全面的了解,尤其SQL提供了一种更为通用的接口,相比Java/Scala来说更方便易用。本节将结合物联网(Internet of Things,IoT)场景来展示如何使用Flink SQL进行数据处理和分析。 +经过本章的学习,结合三到七章的背景知识,读者应该对 Table API & SQL 有了比较全面的了解,尤其 SQL 提供了一种更为通用的接口,相比 Java/Scala 来说更方便易用。本节将结合物联网(Internet of Things,IoT)场景来展示如何使用 Flink SQL 进行数据处理和分析。 ## 实验目的 -熟悉Flink SQL的各类操作:包括使用Flink SQL连接数据源,进行时间窗口操作,进行两个表的Temporal Table Join等。 +熟悉 Flink SQL 的各类操作:包括使用 Flink SQL 连接数据源,进行时间窗口操作,进行两个表的 Temporal Table Join 等。 ## 实验内容 -本实验基于德国纽伦堡大学提供的室内气候数据[^1],该团队使用IoT设备来收集温度、湿度、光照等数据,结合室内人数、人物活动以及门窗开闭等情况,进行了研究,我们在原始数据基础上做了调整。 +本实验基于德国纽伦堡大学提供的室内气候数据 [^1],该团队使用 IoT 设备来收集温度、湿度、光照等数据,结合室内人数、人物活动以及门窗开闭等情况,进行了研究,我们在原始数据基础上做了调整。 -假设我们有多个房间(A、B、C等),每个房间内部署有传感器,传感器可以收集温度、相对湿度、光照等数据。下图展示了房间A的布局,其中A1至A4为传感器。 +假设我们有多个房间(A、B、C 等),每个房间内部署有传感器,传感器可以收集温度、相对湿度、光照等数据。{numref}`fig-iot-room-a` 展示了房间 A 的布局,其中 A1 至 A4 为传感器。 +```{figure} ./img/iot-room-a.png +--- +name: fig-iot-room-a +width: 60% +align: center +--- +室内数据收集示意图 +``` -![室内数据收集示意图](./img/iot-room-a.png) +传感器收集上来的数据集名为 `sensor.csv`,包括以下字段:`room,node_id,temp,humidity,light,ts`,各字段含义如下: -传感器收集上来的数据集名为`sensor.csv`,包括以下字段:`room,node_id,temp,humidity,light,ts`,各字段含义如下: - -* `room`:房间号,这里为A、B、C等。 -* `node_id`:该房间内的传感器编号,以上图中的房间A为例,共4个传感器,编号为1至4。 +* `room`:房间号,这里为 A、B、C 等。 +* `node_id`:该房间内的传感器编号,以上图中的房间 A 为例,共 4 个传感器,编号为 1 至 4。 * `temp`:摄氏温度,单位°C。 -* `humidity`:相对湿度,单位%。 -* `light`:光传感器波长,单位nm。 -* `ts`:数据收集时间戳,形如`2016-03-15 19:34:05`。 +* `humidity`:相对湿度,单位 %。 +* `light`:光传感器波长,单位 nm。 +* `ts`:数据收集时间戳,形如 `2016-03-15 19:34:05`。 -此外,第二个数据流收集房间的环境信息,数据集名为`env.csv`。这个数据记录了房间环境的变动,任何变动都将在数据中增加一条记录。数据包括以下字段:`room,occupant,activity,door,win,ts`,各字段含义如下: +此外,第二个数据流收集房间的环境信息,数据集名为 `env.csv`。这个数据记录了房间环境的变动,任何变动都将在数据中增加一条记录。数据包括以下字段:`room,occupant,activity,door,win,ts`,各字段含义如下: -* `room`:房间号,这里为A、B、C等。 +* `room`:房间号,这里为 A、B、C 等。 * `occupant`:房间人数。 * `activity`:人物行为。0:无活动、1:读、2:站、3:行走、4:工作。 * `door`:门的状态。0:关、1:开。 * `win`:窗的状态,0:关、1:开。 -* `ts`:以上环境信息发生改动的时间戳,形如`2016-03-15 19:34:05`。 +* `ts`:以上环境信息发生改动的时间戳,形如 `2016-03-15 19:34:05`。 -两份数据集在工程目录的`src/main/resources/iot`下。 +两份数据集在工程目录的 `src/main/resources/iot` 下。 ## 实验内容 -结合本书内容和Flink官方文档,完成下面程序: +结合本书内容和 Flink 官方文档,完成下面程序: -* 程序1:使用流处理模式,读取`sensor.csv`和`env.csv`数据源,注意`ts`字段作为时间属性,并定义Watermark策略。 -* 程序2:按房间号分组,计算该房间内每分钟的平均温度和湿度,输出到文件系统上。 -* 程序3:基于Temporal Table Join,将`sensor.csv`和`env.csv`按照房间号连接,生成一个宽表(宽表有助于哦后续数据分析流程),将结果输出到文件系统上。宽表包括以下字段:`room,node_id,temp,humidity,light,occupant,activity,door,win,ts`。 +* 程序 1:使用流处理模式,读取 `sensor.csv` 和 `env.csv` 数据源,注意 `ts` 字段作为时间属性,并定义 Watermark 策略。 +* 程序 2:按房间号分组,计算该房间内每分钟的平均温度和湿度,输出到文件系统上。 +* 程序 3:基于 Temporal Table Join,将 `sensor.csv` 和 `env.csv` 按照房间号连接,生成一个宽表(宽表有助于哦后续数据分析流程),将结果输出到文件系统上。宽表包括以下字段:`room,node_id,temp,humidity,light,occupant,activity,door,win,ts`。 ## 实验报告 将思路和程序撰写成实验报告。 diff --git a/doc/ch-table-sql/index.md b/doc/ch-table-sql/index.md index 072ab01..5b486c8 100644 --- a/doc/ch-table-sql/index.md +++ b/doc/ch-table-sql/index.md @@ -3,14 +3,14 @@ ```{tableofcontents} ``` -在之前的章节中,我们已经系统介绍了如何使用Flink的DataStream API在时间维度上进行有状态的计算。为了方便开发和迭代,Flink在DataStream/DataSet API之上提供了一个更高层的关系型数据库式的API——Table API & SQL。Table API & SQL有以下特点: +在之前的章节中,我们已经系统介绍了如何使用 Flink 的 DataStream API 在时间维度上进行有状态的计算。为了方便开发和迭代,Flink 在 DataStream/DataSet API 之上提供了一个更高层的关系型数据库式的 API——Table API & SQL。Table API & SQL 有以下特点: * 结合了流处理和批处理两种场景,提供统一的对外接口。 -* Table API & SQL均以关系型数据库中的表为基础模型,Table API和SQL两者结合非常紧密。 -* Table API & SQL与其他平台使用习惯相似,例如Hive SQL、Spark DataFrame & SQL、Python pandas等,数据科学家可以快速从其他平台迁移到Flink平台上。 -* 比起DataStream/DataSet API,Table API & SQL的开发成本较低,可以广泛应用在数据探索、业务报表、商业智能等各类场景,适合企业大规模推广。 -* 很多用户对Flink DataStream/DataSet API的熟悉程度并不高,反而Table API & SQL在效率方面有很大优势:用户可以更关注业务逻辑,执行优化可以交由Flink来做。 +* Table API & SQL 均以关系型数据库中的表为基础模型,Table API 和 SQL 两者结合非常紧密。 +* Table API & SQL 与其他平台使用习惯相似,例如 Hive SQL、Spark DataFrame & SQL、Python pandas 等,数据科学家可以快速从其他平台迁移到 Flink 平台上。 +* 比起 DataStream/DataSet API,Table API & SQL 的开发成本较低,可以广泛应用在数据探索、业务报表、商业智能等各类场景,适合企业大规模推广。 +* 很多用户对 Flink DataStream/DataSet API 的熟悉程度并不高,反而 Table API & SQL 在效率方面有很大优势:用户可以更关注业务逻辑,执行优化可以交由 Flink 来做。 -基于Table API & SQL的诸多优点,Flink社区非常重视对这方面的投入,无论是已经完成的版本还是中长期的规划中,Flink社区都将Table API & SQL作为重要的发展方向。尤其是在在阿里巴巴在Flink社区投入更多的资源之后,阿里巴巴内部版本Blink和开源社区版本Flink正在快速融合,一些Blink中关于Table API & SQL的功能已经提交到开源社区版本中,Table API & SQL处于快速迭代开发状态中。从另一方面来讲,Table API & SQL的一些功能也在逐渐完善,一些接口也会发生变化。 +基于 Table API & SQL 的诸多优点,Flink 社区非常重视对这方面的投入,无论是已经完成的版本还是中长期的规划中,Flink 社区都将 Table API & SQL 作为重要的发展方向。尤其是在在阿里巴巴在 Flink 社区投入更多的资源之后,阿里巴巴内部版本 Blink 和开源社区版本 Flink 正在快速融合,一些 Blink 中关于 Table API & SQL 的功能已经提交到开源社区版本中,Table API & SQL 处于快速迭代开发状态中。从另一方面来讲,Table API & SQL 的一些功能也在逐渐完善,一些接口也会发生变化。 -由于批处理上的关系型查询已经比较成熟,相关书籍和材料已经比较丰富,因此这里不再花费精力详细介绍,本书主要围绕流处理场景来介绍Table API & SQL。具体而言,我们将先概括性地介绍Table API & SQL的骨架程序和使用方法;接着重点介绍流处理下特有的概念:动态表和持续查询、时间和窗口、Join;然后介绍一些Flink SQL使用过程所涉及的一些重要知识点;最后介绍如何使用系统函数和用户自定义函数。 \ No newline at end of file +由于批处理上的关系型查询已经比较成熟,相关书籍和材料已经比较丰富,因此这里不再花费精力详细介绍,本书主要围绕流处理场景来介绍 Table API & SQL。具体而言,我们将先概括性地介绍 Table API & SQL 的骨架程序和使用方法;接着重点介绍流处理下特有的概念:动态表和持续查询、时间和窗口、Join;然后介绍一些 Flink SQL 使用过程所涉及的一些重要知识点;最后介绍如何使用系统函数和用户自定义函数。 \ No newline at end of file diff --git a/doc/ch-table-sql/sql-ddl.md b/doc/ch-table-sql/sql-ddl.md index 6d694c6..0701d46 100644 --- a/doc/ch-table-sql/sql-ddl.md +++ b/doc/ch-table-sql/sql-ddl.md @@ -3,128 +3,128 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -通过前面的一些介绍,我们已经对Flink SQL有了一些了解。Flink SQL底层使用Dynamic Table来进行流处理,它支持了时间窗口和Join操作。本节将围绕SQL DDL,主要介绍创建、获取、修改和删除元数据时所涉及的一些注意事项。 +通过前面的一些介绍,我们已经对 Flink SQL 有了一些了解。Flink SQL 底层使用 Dynamic Table 来进行流处理,它支持了时间窗口和 Join 操作。本节将围绕 SQL DDL,主要介绍创建、获取、修改和删除元数据时所涉及的一些注意事项。 ## 注册和获取表 -### Catalog简介 +### Catalog 简介 -Catalog记录并管理了各类元数据信息,比如我们有哪些数据库(Database)、数据库是以文件还是消息队列的形式存储、某个数据库中有哪些表和视图、当前有哪些可用的函数等。Catalog提供了一个注册、管理和访问这些元数据的API。一般情况下,一个Catalog中包含一到多个Database,一个Database包含一到多个Table。 +Catalog 记录并管理了各类元数据信息,比如我们有哪些数据库(Database)、数据库是以文件还是消息队列的形式存储、某个数据库中有哪些表和视图、当前有哪些可用的函数等。Catalog 提供了一个注册、管理和访问这些元数据的 API。一般情况下,一个 Catalog 中包含一到多个 Database,一个 Database 包含一到多个 Table。 -常见的Catalog包括:`GenericInMemoryCatalog`、`HiveCatalog`和用户自定义的Catalog。 +常见的 Catalog 包括:`GenericInMemoryCatalog`、`HiveCatalog` 和用户自定义的 Catalog。 -`GenericInMemoryCatalog`将元数据存储在内存中,只在一个Session会话内生效。默认情况下,都是使用这种Catalog。 +`GenericInMemoryCatalog` 将元数据存储在内存中,只在一个 Session 会话内生效。默认情况下,都是使用这种 Catalog。 -Hive的元数据管理功能是SQL-on-Hadoop领域事实上的标准,很多企业的生产环境使用Hive管理元数据,Hive可以管理包括纯Hive表和非Hive表。为了与Hive生态兼容,Flink推出了`HiveCatalog`。对于同时部署了Hive和Flink的环境,`HiveCatalog`允许用户在Flink SQL上读取原来Hive中的各个表。对于只部署了Flink的环境,`HiveCatalog`是目前将元数据持久化的唯一方式。持久化意味着某些元数据管理团队可以先将Kafka或HDFS中的数据注册到Catalog中,其他数据分析团队无需再次注册表,只需每次从Catalog中获取表,不用关心数据管理相关问题。如果没有进行元数据持久化,用户每次都需要注册表。 +Hive 的元数据管理功能是 SQL-on-Hadoop 领域事实上的标准,很多企业的生产环境使用 Hive 管理元数据,Hive 可以管理包括纯 Hive 表和非 Hive 表。为了与 Hive 生态兼容,Flink 推出了 `HiveCatalog`。对于同时部署了 Hive 和 Flink 的环境,`HiveCatalog` 允许用户在 Flink SQL 上读取原来 Hive 中的各个表。对于只部署了 Flink 的环境,`HiveCatalog` 是目前将元数据持久化的唯一方式。持久化意味着某些元数据管理团队可以先将 Kafka 或 HDFS 中的数据注册到 Catalog 中,其他数据分析团队无需再次注册表,只需每次从 Catalog 中获取表,不用关心数据管理相关问题。如果没有进行元数据持久化,用户每次都需要注册表。 -用户也可以自定义Catalog,需要实现`Catalog`接口类。 +用户也可以自定义 Catalog,需要实现 `Catalog` 接口类。 ### 获取表 -我们编写好SQL查询语句(`SELECT ...`语句)后,需要使用`TableEnvironment.sqlQuery("SELECT ...")`来执行这个SQL语句,这个方法返回的结果是一个`Table`。`Table`可以用于后续的Table API & SQL查询,也可以将`Table`转换为`DataStream`或者`DataSet`。总之,Table API和SQL可以完美融合。 +我们编写好 SQL 查询语句(`SELECT ...` 语句)后,需要使用 `TableEnvironment.sqlQuery("SELECT ...")` 来执行这个 SQL 语句,这个方法返回的结果是一个 `Table`。`Table` 可以用于后续的 Table API & SQL 查询,也可以将 `Table` 转换为 `DataStream` 或者 `DataSet`。总之,Table API 和 SQL 可以完美融合。 -我们使用`FROM table_name`从某个表中查询数据,这个`table_name`表必须被注册到`TableEnvironment`中。注册有以下几种方式: +我们使用 `FROM table_name` 从某个表中查询数据,这个 `table_name` 表必须被注册到 `TableEnvironment` 中。注册有以下几种方式: -* 使用SQL DDL中的`CREATE TABLE ...`创建表 -* `TableEnvironment.connect()`连接一个外部系统 -* 从Catalog中获取已注册的表 +* 使用 SQL DDL 中的 `CREATE TABLE ...` 创建表 +* `TableEnvironment.connect()` 连接一个外部系统 +* 从 Catalog 中获取已注册的表 -第一种SQL DDL的方式,我们会用`CREATE TABLE table_name ...`来明确指定一个表的名字为`table_name`。而第二种和第三种方式,我们是在Java/Scala代码中获取一个`Table`对象,获取对象后,明确使用`createTemporaryView()`方法声明一个`Table`并指定一个名字。例如,下面的代码中,我们获取了一个`Table`,并通过`createTemporaryView()`注册该`Table`名字为`user_behavior`。 +第一种 SQL DDL 的方式,我们会用 `CREATE TABLE table_name ...` 来明确指定一个表的名字为 `table_name`。而第二种和第三种方式,我们是在 Java/Scala 代码中获取一个 `Table` 对象,获取对象后,明确使用 `createTemporaryView()` 方法声明一个 `Table` 并指定一个名字。例如,下面的代码中,我们获取了一个 `Table`,并通过 `createTemporaryView()` 注册该 `Table` 名字为 `user_behavior`。 ```java Table userBehaviorTable = tEnv.fromDataStream(userBehaviorStream, "user_id, item_id, behavior, ts.rowtime"); -// createTemporaryView创建名为user_behavior的表 +// createTemporaryView 创建名为 user_behavior 的表 tEnv.createTemporaryView("user_behavior", userBehaviorTable); ``` -对于`TableEnvironment.connect()`所连接的外部系统,也可以使用`createTemporaryTable`方法,以链式调用的方式注册名字: +对于 `TableEnvironment.connect()` 所连接的外部系统,也可以使用 `createTemporaryTable` 方法,以链式调用的方式注册名字: ```java tEnv - // 使用connect函数连接外部系统 + // 使用 connect 函数连接外部系统 .connect(...) - // 序列化方式 可以是JSON、Avro等 + // 序列化方式 可以是 JSON、Avro 等 .withFormat(...) - // 数据的Schema + // 数据的 Schema .withSchema(...) - // 临时表的表名,后续可以在SQL语句中使用这个表名 + // 临时表的表名,后续可以在 SQL 语句中使用这个表名 .createTemporaryTable("user_behavior"); ``` -注册好表名后,就可以在SQL语句中使用`FROM user_behavior`来查询该表。 +注册好表名后,就可以在 SQL 语句中使用 `FROM user_behavior` 来查询该表。 -即使没有明确指定表名,也没有问题。`Table.toString()`可以返回表的名字,如果没有给这个`Table`指定名字,Flink会为其自动分配一个唯一的表名,不会与其他表名冲突。如下所示: +即使没有明确指定表名,也没有问题。`Table.toString()` 可以返回表的名字,如果没有给这个 `Table` 指定名字,Flink 会为其自动分配一个唯一的表名,不会与其他表名冲突。如下所示: ```java -// 获取一个Table,并没有明确为其分配表名 +// 获取一个 Table,并没有明确为其分配表名 Table table = ...; String tableName = table.toString(); tEnv.sqlQuery("SELECT * FROM " + tableName); ``` -甚至可以省略`toString`方法,直接将`Table`对象与SQL语句用加号`+`连接,因为`+`会自动调用`Table.toString()`方法。 +甚至可以省略 `toString` 方法,直接将 `Table` 对象与 SQL 语句用加号 `+` 连接,因为 `+` 会自动调用 `Table.toString()` 方法。 ```java -// 获取一个Table,并没有明确为其分配表名 +// 获取一个 Table,并没有明确为其分配表名 Table table = ...; -// 加号+操作符会在编译期间自动调用Table.toString()方法 +// 加号 + 操作符会在编译期间自动调用 Table.toString() 方法 tEnv.sqlQuery("SELECT * FROM " + table); ``` ### HiveCatalog -如果想将元数据持久化到`HiveCatalog`中: +如果想将元数据持久化到 `HiveCatalog` 中: ```java TableEnvironment tEnv = ... -// 创建一个HiveCatalog +// 创建一个 HiveCatalog // 四个参数分别为:catalogName、databaseName、hiveConfDir、hiveVersion Catalog catalog = new HiveCatalog("mycatalog", null, "", ""); -// 注册catalog,取名为mycatalog +// 注册 catalog,取名为 mycatalog tEnv.registerCatalog("mycatalog", catalog); -// 创建一个Database,取名为mydb +// 创建一个 Database,取名为 mydb tEnv.sqlUpdate("CREATE DATABASE mydb WITH (...)"); -// 创建一个Table,取名为mytable +// 创建一个 Table,取名为 mytable tEnv.sqlUpdate("CREATE TABLE mytable (name STRING, age INT) WITH (...)"); -// 返回所有Table +// 返回所有 Table tEnv.listTables(); ``` -## USE和SHOW语句 +## USE 和 SHOW 语句 -创建完Catalog、Database后,可以像其他SQL引擎一样,使用`SHOW`和`USE`语句: +创建完 Catalog、Database 后,可以像其他 SQL 引擎一样,使用 `SHOW` 和 `USE` 语句: ```sql --- 展示所有Catalog +-- 展示所有 Catalog SHOW CATALOGS; --- 使用mycatalog +-- 使用 mycatalog USE CATALOG mycatalog; --- 展示当前Catalog里所有Database +-- 展示当前 Catalog 里所有 Database SHOW DATABASES; --- 使用mydatabase +-- 使用 mydatabase USE mydb; --- 展示当前Catalog里当前Database里所有Table +-- 展示当前 Catalog 里当前 Database 里所有 Table SHOW TABLES; ``` -这些语句需要粘贴到`sqlUpdate`方法中: +这些语句需要粘贴到 `sqlUpdate` 方法中: ```java Catalog catalog = ... @@ -137,27 +137,27 @@ tEnv.sqlUpdate("USE mydb"); ## CREATE、DROP、ALTER -`CREATE`、`ALTER`、`DROP`是SQL中最常见的三种DDL语句,可以创建、修改和删除数据库(Database)、表(Table)和函数(Function)。 +`CREATE`、`ALTER`、`DROP` 是 SQL 中最常见的三种 DDL 语句,可以创建、修改和删除数据库(Database)、表(Table)和函数(Function)。 -`CREATE`语句可以创建一个Database、Table和Function: +`CREATE` 语句可以创建一个 Database、Table 和 Function: * `CREATE TABLE` * `CREATE DATABASE` * `CREATE FNCTION` -`ALTER`语句可以修改已有的Database、Table和Function: +`ALTER` 语句可以修改已有的 Database、Table 和 Function: * `ALTER TABLE` * `ALTER DATABASE` * `ALTER FNCTION` -`DROP`语句可以删除之前创建的Database、Table和Function: +`DROP` 语句可以删除之前创建的 Database、Table 和 Function: * `DROP TABLE` * `DROP DATABASE` * `DROP FUNCTION` -这些语句可以放到`TableEnvironment.sqlUpdate()`的参数里,也可以在SQL Client里执行。`TableEnvironment.sqlUpdate()`执行成功后没有返回结果,执行失败则会抛出异常。下面例子展示了如何在`TableEnvironment`中使用`sqlUpdate`: +这些语句可以放到 `TableEnvironment.sqlUpdate()` 的参数里,也可以在 SQL Client 里执行。`TableEnvironment.sqlUpdate()` 执行成功后没有返回结果,执行失败则会抛出异常。下面例子展示了如何在 `TableEnvironment` 中使用 `sqlUpdate`: ```java // tEnv:TableEnvironment @@ -182,22 +182,22 @@ tEnv.sqlUpdate("DROP TABLE user_behavior"); #### CREATE TABLE -`CREATE TABLE`需要按照下面的模板编写: +`CREATE TABLE` 需要按照下面的模板编写: ```sql CREATE TABLE [catalog_name.][db_name.]table_name ( - { | }[ , ...n] - [ ] + { | }[, ...n] + [] ) [COMMENT table_comment] [PARTITIONED BY (partition_column_name1, partition_column_name2, ...)] WITH (key1=val1, key2=val2, ...) ``` -一个名为`table_name`的`Table`隶属于一个名为`db_name`的Database,`db_name`又隶属于名为`catalog_name`的Catalog。如果不明确指定`db_name`和`catalog_name`,该表被注册到默认的Catalog和默认的Database中。如果`table_name`与已有的表名重复,会抛出异常。 +一个名为 `table_name` 的 `Table` 隶属于一个名为 `db_name` 的 Database,`db_name` 又隶属于名为 `catalog_name` 的 Catalog。如果不明确指定 `db_name` 和 `catalog_name`,该表被注册到默认的 Catalog 和默认的 Database 中。如果 `table_name` 与已有的表名重复,会抛出异常。 -``、``和``需要符合下面的模板: +``、`` 和 `` 需要符合下面的模板: ```sql : @@ -210,20 +210,20 @@ CREATE TABLE [catalog_name.][db_name.]table_name WATERMARK FOR rowtime_column_name AS watermark_strategy_expression ``` -`COMMENT`用来对字段做注释,使用`DESCRIBE table_name`命令时,可以查看到字段的一些注释和描述信息。 +`COMMENT` 用来对字段做注释,使用 `DESCRIBE table_name` 命令时,可以查看到字段的一些注释和描述信息。 -``在传统的SQL DDL中经常见到,Watermark策略在[窗口](sql-window)部分已经介绍,不再赘述,这里主要介绍计算列(Computed Column)。 +`` 在传统的 SQL DDL 中经常见到,Watermark 策略在 [窗口](sql-window) 部分已经介绍,不再赘述,这里主要介绍计算列(Computed Column)。 #### 计算列 -计算列是虚拟字段,不是一个实际存储在表中的字段。计算列可以通过表达式、内置函数、或是自定义函数等方式,使用其它列的数据,计算出其该列的数值。比如,一个订单表中有单价`price`和数量`quantity`,总价可以被定义为`total AS price * quantity`。计算列表达式可以是已有的物理列、常量、函数的组合,但不能是`SELECT ...`式的子查询。计算列虽然是个虚拟字段,但在Flink SQL中可以像普通字段一样被使用。 +计算列是虚拟字段,不是一个实际存储在表中的字段。计算列可以通过表达式、内置函数、或是自定义函数等方式,使用其它列的数据,计算出其该列的数值。比如,一个订单表中有单价 `price` 和数量 `quantity`,总价可以被定义为 `total AS price * quantity`。计算列表达式可以是已有的物理列、常量、函数的组合,但不能是 `SELECT ...` 式的子查询。计算列虽然是个虚拟字段,但在 Flink SQL 中可以像普通字段一样被使用。 -计算列常常被用于定义时间属性,在[窗口](sql-window)部分我们曾介绍了如何定义Processing Time:使用`proc AS PROCTIME()`来定义一个名为`proc`的计算列,该列可以在后续计算中被用做时间属性。`PROCTIME()`是Flink提供的内置函数,用来生成Processing Time。 +计算列常常被用于定义时间属性,在 [窗口](sql-window) 部分我们曾介绍了如何定义 Processing Time:使用 `proc AS PROCTIME()` 来定义一个名为 `proc` 的计算列,该列可以在后续计算中被用做时间属性。`PROCTIME()` 是 Flink 提供的内置函数,用来生成 Processing Time。 ```sql CREATE TABLE mytable ( id BIGINT, - -- 在原有Schema基础上添加一列proc + -- 在原有 Schema 基础上添加一列 proc proc as PROCTIME() ) WITH ( ... @@ -232,12 +232,12 @@ CREATE TABLE mytable ( 关于计算列,相关知识点可以总结为: -* 计算列是一个虚拟列,计算的过程可以由函数、已有物理列、常量等组成,可以用在`SELECT`语句中。 -* 计算列不能作为`INSERT`语句的输出目的地,或者说我们不能使用`INSERT`语句将数据插入到目标表的计算列上。 +* 计算列是一个虚拟列,计算的过程可以由函数、已有物理列、常量等组成,可以用在 `SELECT` 语句中。 +* 计算列不能作为 `INSERT` 语句的输出目的地,或者说我们不能使用 `INSERT` 语句将数据插入到目标表的计算列上。 #### WITH -在[Table API & SQL简介](table-overview.md)中我们曾介绍连接外部系统时必须配置相应参数,这些参数以`key=value`等形式被放在`WITH`语句中。 +在 [Table API & SQL 简介](table-overview.md) 中我们曾介绍连接外部系统时必须配置相应参数,这些参数以 `key=value` 等形式被放在 `WITH` 语句中。 ```sql CREATE TABLE my_table ( @@ -251,33 +251,33 @@ CREATE TABLE my_table ( ) ``` -在这个例子中使用的外部系统是Kafka,我们需要配置一些Kafka连接相关的参数。Flink的官方文档中有不同Connector的详细参数配置示例,这里不再详细介绍每种Connector需要配置哪些参数, +在这个例子中使用的外部系统是 Kafka,我们需要配置一些 Kafka 连接相关的参数。Flink 的官方文档中有不同 Connector 的详细参数配置示例,这里不再详细介绍每种 Connector 需要配置哪些参数, -使用`CREATE TABLE`创建的表可以作为Source也可以作为Sink。 +使用 `CREATE TABLE` 创建的表可以作为 Source 也可以作为 Sink。 #### PARTITIONED BY -根据某个字段进行分区。如果这个表中的数据实际存储在一个文件系统上,Flink会为每个分区创建一个文件夹。例如,以日期为分区,那么每天的数据被放在一个文件夹中。`PARTITIONED BY`经常被用在批处理中。 +根据某个字段进行分区。如果这个表中的数据实际存储在一个文件系统上,Flink 会为每个分区创建一个文件夹。例如,以日期为分区,那么每天的数据被放在一个文件夹中。`PARTITIONED BY` 经常被用在批处理中。 :::note -这里是`PARTITIONED BY`,与`OVER WINDOW`中的`PARTITON BY`语法和含义均不同。 +这里是 `PARTITIONED BY`,与 `OVER WINDOW` 中的 `PARTITON BY` 语法和含义均不同。 ::: #### ALTER TABLE -`ALTER TABLE`目前支持修改表名和一些参数。 +`ALTER TABLE` 目前支持修改表名和一些参数。 ```sql -- 修改表名 ALTER TABLE [catalog_name.][db_name.]table_name RENAME TO new_table_name --- 修改参数,如果某个Key之前被WITH语句设置过,再次设置会将老数据覆盖 +-- 修改参数,如果某个 Key 之前被 WITH 语句设置过,再次设置会将老数据覆盖 ALTER TABLE [catalog_name.][db_name.]table_name SET (key1=val1, key2=val2, ...) ``` #### DROP TABLE -`DROP TABLE`用来删除一个表。`IF EXISTS`表示只对已经存在的表进行删除。 +`DROP TABLE` 用来删除一个表。`IF EXISTS` 表示只对已经存在的表进行删除。 ```sql DROP TABLE [IF EXISTS] [catalog_name.][db_name.]table_name @@ -287,7 +287,7 @@ DROP TABLE [IF EXISTS] [catalog_name.][db_name.]table_name #### CREATE DATABASE -`CREATE DATABASE`一般使用下面的模板: +`CREATE DATABASE` 一般使用下面的模板: ```sql CREATE DATABASE [IF NOT EXISTS] [catalog_name.]db_name @@ -295,7 +295,7 @@ CREATE DATABASE [IF NOT EXISTS] [catalog_name.]db_name WITH (key1=val1, key2=val2, ...) ``` -这里的语法与其他SQL引擎比较相似。其中`IF NOT EXISTS`表示,如果这个Database不存在才创建,否则不会创建。 +这里的语法与其他 SQL 引擎比较相似。其中 `IF NOT EXISTS` 表示,如果这个 Database 不存在才创建,否则不会创建。 #### ALTER DATABASE @@ -303,19 +303,19 @@ CREATE DATABASE [IF NOT EXISTS] [catalog_name.]db_name ALTER DATABASE [catalog_name.]db_name SET (key1=val1, key2=val2, ...) ``` -`ALTER DATABASE`支持修改参数,新数据会覆盖老数据。 +`ALTER DATABASE` 支持修改参数,新数据会覆盖老数据。 #### DROP DATABASE ```sql -DROP DATABASE [IF EXISTS] [catalog_name.]db_name [ (RESTRICT | CASCADE) ] +DROP DATABASE [IF EXISTS] [catalog_name.]db_name [(RESTRICT | CASCADE) ] ``` -`RESTRICT`选项表示如果Database非空,那么会抛出异常,默认开启本选项;`CASCADE`选项表示会将Database下所属的Table和Function等都删除。 +`RESTRICT` 选项表示如果 Database 非空,那么会抛出异常,默认开启本选项;`CASCADE` 选项表示会将 Database 下所属的 Table 和 Function 等都删除。 ### CREATE/ALTER/DROP FUNCTION -除了传统SQL引擎都会提供的上述`CREATE`功能,Table API & SQL还提供了函数(Function)功能。我们也可以用Java或Scala语言自定义一个函数,然后注册进来,在SQL语句中使用。`CREATE FUNCTION`的模板如下所示,我们将在[用户自定义函数](catalog-function.md)部分的详细介绍如何使用Java/Scala自定义函数。 +除了传统 SQL 引擎都会提供的上述 `CREATE` 功能,Table API & SQL 还提供了函数(Function)功能。我们也可以用 Java 或 Scala 语言自定义一个函数,然后注册进来,在 SQL 语句中使用。`CREATE FUNCTION` 的模板如下所示,我们将在 [用户自定义函数](catalog-function.md) 部分的详细介绍如何使用 Java/Scala 自定义函数。 ```sql CREATE [TEMPORARY|TEMPORARY SYSTEM] FUNCTION @@ -325,17 +325,17 @@ CREATE [TEMPORARY|TEMPORARY SYSTEM] FUNCTION ## INSERT -`INSERT`语句可以向表中插入数据,一般用于向外部系统输出数据。它的语法模板如下: +`INSERT` 语句可以向表中插入数据,一般用于向外部系统输出数据。它的语法模板如下: ```sql -INSERT { INTO | OVERWRITE } [catalog_name.][db_name.]table_name [PARTITION part_spec] +INSERT {INTO | OVERWRITE} [catalog_name.][db_name.]table_name [PARTITION part_spec] SELECT ... part_spec: (part_col_name1=val1 [, part_col_name2=val2, ...]) ``` -上面的SQL语句将`SELECT`查询结果写入到目标表中。`OVERWRITE`选项表示将原来的数据覆盖,否则新数据只是追加进去。`PARTITION`表示数据将写入哪个分区。如果`CREATE TABLE`是按照日期进行`PARTITIONED BY`分区,那么每个日期会有一个文件夹,`PARTITION`后要填入一个日期,数据将写入日期对应目录中。分区一般常用于批处理场景。 +上面的 SQL 语句将 `SELECT` 查询结果写入到目标表中。`OVERWRITE` 选项表示将原来的数据覆盖,否则新数据只是追加进去。`PARTITION` 表示数据将写入哪个分区。如果 `CREATE TABLE` 是按照日期进行 `PARTITIONED BY` 分区,那么每个日期会有一个文件夹,`PARTITION` 后要填入一个日期,数据将写入日期对应目录中。分区一般常用于批处理场景。 ```sql -- 创建一个表,用来做输出 @@ -348,7 +348,7 @@ CREATE TABLE behavior_cnt ( 'format.type' = 'csv' -- 数据源格式为 json ) --- 向一个Append-only表中输出数据 +-- 向一个 Append-only 表中输出数据 INSERT INTO behavior_cnt SELECT user_id, @@ -360,7 +360,7 @@ GROUP BY user_id, TUMBLE(ts, INTERVAL '10' SECOND) 或者是将特定的值写入目标表: ```sql -INSERT { INTO | OVERWRITE } [catalog_name.][db_name.]table_name VALUES values_row [, values_row ...] +INSERT {INTO | OVERWRITE} [catalog_name.][db_name.]table_name VALUES values_row [, values_row ...] ``` 例如: diff --git a/doc/ch-table-sql/sql-join.md b/doc/ch-table-sql/sql-join.md index 765557c..6cef1ab 100644 --- a/doc/ch-table-sql/sql-join.md +++ b/doc/ch-table-sql/sql-join.md @@ -3,14 +3,14 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -Join是SQL中最常用的数据处理机制,它可以将两个数据源中的相关行相互连接起来。常用的Join方式有:`INNER JOIN`、`LEFT/RIGHT/FULL OUTER JOIN`。不同的Join决定了两个数据源连接方式的不同。在批处理上,对静态的数据上进行Join已经比较成熟,常用的算法有:嵌套循环(Nested Join)、排序合并(Sort Merge)、哈希合并(Hash Merge)等。这里以嵌套循环为例解释一下Join的实现原理。 +Join 是 SQL 中最常用的数据处理机制,它可以将两个数据源中的相关行相互连接起来。常用的 Join 方式有:`INNER JOIN`、`LEFT/RIGHT/FULL OUTER JOIN`。不同的 Join 决定了两个数据源连接方式的不同。在批处理上,对静态的数据上进行 Join 已经比较成熟,常用的算法有:嵌套循环(Nested Join)、排序合并(Sort Merge)、哈希合并(Hash Merge)等。这里以嵌套循环为例解释一下 Join 的实现原理。 假设我们有这样一个批处理查询: @@ -26,9 +26,9 @@ ON orders.customer_id = customers.customer_id; 这个语句在两个确定的数据集上进行计算,它翻译成伪代码: ``` -// 循环遍历orders的每个元素 +// 循环遍历 orders 的每个元素 for row_order in orders: - // 循环遍历customers的每个元素 + // 循环遍历 customers 的每个元素 for row_customer in customers: if row_order.customer_id = row_customer.customer_id return (row_order.order_id, row_customer.customer_mame, row_order.order_date) @@ -36,17 +36,24 @@ for row_order in orders: end ``` -嵌套循环的基本原理是使用两层循环,遍历表中的每个元素,当两个表中的数据相匹配时,返回结果。我们知道,一旦数据量增大,嵌套循环算法会产生非常大的计算压力。之前多次提到,流处理场景下数据是不断生成的,一旦数据源有更新,相应的Dynamic Table也要随之更新,进而重新进行一次上述的循环算法,这对流处理来说是一个不小的挑战。 +嵌套循环的基本原理是使用两层循环,遍历表中的每个元素,当两个表中的数据相匹配时,返回结果。我们知道,一旦数据量增大,嵌套循环算法会产生非常大的计算压力。之前多次提到,流处理场景下数据是不断生成的,一旦数据源有更新,相应的 Dynamic Table 也要随之更新,进而重新进行一次上述的循环算法,这对流处理来说是一个不小的挑战。 -目前,Flink提供了三种基于Dynamic Table的Join:时间窗口Join(Time-windowed Join)、临时表Join(Temporal Table Join)和传统意义上的Join(Regular Join)。这里我们先介绍前两种流处理中所特有的Join,了解前两种流处理的特例可以让我们更好地理解传统意义上的Join。 +目前,Flink 提供了三种基于 Dynamic Table 的 Join:时间窗口 Join(Time-windowed Join)、临时表 Join(Temporal Table Join)和传统意义上的 Join(Regular Join)。这里我们先介绍前两种流处理中所特有的 Join,了解前两种流处理的特例可以让我们更好地理解传统意义上的 Join。 ## Time-windowed Join -在电商平台,我们作为客户一般会先和卖家聊天沟通,经过一些对话之后才会下单购买。这里我们做一个简单的数据模型,假设一个关于聊天对话的数据流`chat`表记录了买家首次和卖家的聊天信息,它包括以下字段:买家ID(buyer_id),商品ID(item_id),时间戳(ts)。如果买家从开启聊天到最后下单的速度比较快,说明这个商品的转化率比较高,非常值得进一步分析。我们想统计这些具有较高转化率的商品,比如统计从首次聊天到用户下单购买的时间小于1分钟。 +在电商平台,我们作为客户一般会先和卖家聊天沟通,经过一些对话之后才会下单购买。这里我们做一个简单的数据模型,假设一个关于聊天对话的数据流 `chat` 表记录了买家首次和卖家的聊天信息,它包括以下字段:买家 ID(buyer_id),商品 ID(item_id),时间戳(ts)。如果买家从开启聊天到最后下单的速度比较快,说明这个商品的转化率比较高,非常值得进一步分析。我们想统计这些具有较高转化率的商品,比如统计从首次聊天到用户下单购买的时间小于 1 分钟。 -![Time-windowed Join:聊天对话和用户行为的Join](./img/time-window-join.png) +```{figure} ./img/time-window-join.png +--- +name: fig-time-window-join +width: 80% +align: center +--- +Time-windowed Join:聊天对话和用户行为的 Join +``` -图中,左侧为记录用户首次聊天的数据流`chat`表,它有两个字段:`buyer_id`、`item_id`和`ts`,右侧为我们之前一直使用的`user_behavior`。我们以`item_id`字段来对两个数据流进行Join,同时还增加一个时间窗口的限制,即首次聊天发生之后1分钟内用户有购买行为。相应的SQL语句如下: +{numref}`fig-time-window-join` 中,左侧为记录用户首次聊天的数据流 `chat` 表,它有两个字段:`buyer_id`、`item_id` 和 `ts`, 右侧为我们之前一直使用的 `user_behavior`。我们以 `item_id` 字段来对两个数据流进行 Join,同时还增加一个时间窗口的限制,即首次聊天发生之后 1 分钟内用户有购买行为。相应的 SQL 语句如下: ```sql SELECT @@ -58,9 +65,16 @@ WHERE chat.item_id = user_behavior.item_id AND user_behavior.ts BETWEEN chat.ts AND chat.ts + INTERVAL '1' MINUTE; ``` -Time-windowed Join其实和第五章中的Interval Join比较相似,可以用下图来解释其原理。我们对A和B两个表做Join,需要对B设置一个上下限,A表中所有界限内的数据都要与B表中的数据做连接。 +Time-windowed Join 其实和第五章中的 Interval Join 比较相似,可以用 {numref}`fig-time-window-join-timeline` 来解释其原理。我们对 A 和 B 两个表做 Join,需要对 B 设置一个上下限,A 表中所有界限内的数据都要与 B 表中的数据做连接。 -![Time-windowed Join时间线](./img/time-window-join-timeline.png) +```{figure} ./img/time-window-join-timeline.png +--- +name: fig-time-window-join-timeline +width: 80% +align: center +--- +Time-windowed Join 时间线 +``` 一个更加通用的模板为: @@ -72,44 +86,51 @@ WHERE A.id = B.id AND A.ts BETWEEN B.ts - lowBound AND B.ts + upperBound; ``` -从语法中可以读出,`BETWEEN ... AND ...`设置了一个时间窗口,B表中某个元素的窗口为:[B.ts - lowBound, B.ts + upperBound]的闭区间,如果A表元素恰好落在这个区间,则该元素与B中这个元素连接。其中,A和B都使用时间属性进行上述窗口操作。此外,我们还需要等于谓词来进行匹配,比如`A.id = B.id`,否则大量数据会被连接到一起。 +从语法中可以读出,`BETWEEN ... AND ...` 设置了一个时间窗口,B 表中某个元素的窗口为:[B.ts - lowBound, B.ts + upperBound] 的闭区间,如果 A 表元素恰好落在这个区间,则该元素与 B 中这个元素连接。其中,A 和 B 都使用时间属性进行上述窗口操作。此外,我们还需要等于谓词来进行匹配,比如 `A.id = B.id`,否则大量数据会被连接到一起。 -除了使用`BETWEEN ... AND ...`来确定窗口起始结束点外,Flink也支持比较符号 `>, <, >=, <=`,所以,一个时间窗口也可以被写为`A.ts >= B.ts - lowBound AND A.ts <= B.ts + upperBound`这样的语法。 +除了使用 `BETWEEN ... AND ...` 来确定窗口起始结束点外,Flink 也支持比较符号 `>, <, >=, <=`,所以,一个时间窗口也可以被写为 `A.ts >= B.ts - lowBound AND A.ts <= B.ts + upperBound` 这样的语法。 :::info -A表和B表必须是Append-only模式的表,即只可以追加,不可以更新。 +A 表和 B 表必须是 Append-only 模式的表,即只可以追加,不可以更新。 ::: -在实现上,Flink使用状态来存储一些时间窗口相关数据。时间一般接近单调递增(Event Time模式不可能保证百分百的单调递增)。过期后,这些状态数据会被清除。当然,使用Event Time意味着窗口要等待更长的时间才能关闭,状态数据会更大。 +在实现上,Flink 使用状态来存储一些时间窗口相关数据。时间一般接近单调递增(Event Time 模式不可能保证百分百的单调递增)。过期后,这些状态数据会被清除。当然,使用 Event Time 意味着窗口要等待更长的时间才能关闭,状态数据会更大。 ## Temporal Table Join -电商平台的商品价格有可能发生变化,假如我们有一个商品数据源,里面有各个商品的价格变动,它由`item_id`、`price`和`version_ts`组成,其中,`price`为当前的价格,`version_ts`为价格改动的时间戳。一旦一件商品的价格有改动,数据都会追加到这个表中,这个表保存了价格变动的日志。如果我们想获取一件被购买的商品最近的价格,需要从这个表中找到最新的数据。这个表可以根据时间戳拆分为临时表(Temporal Table),Temporal Table如下图所示: +电商平台的商品价格有可能发生变化,假如我们有一个商品数据源,里面有各个商品的价格变动,它由 `item_id`、`price` 和 `version_ts` 组成,其中,`price` 为当前的价格,`version_ts` 为价格改动的时间戳。一旦一件商品的价格有改动,数据都会追加到这个表中,这个表保存了价格变动的日志。如果我们想获取一件被购买的商品最近的价格,需要从这个表中找到最新的数据。这个表可以根据时间戳拆分为临时表(Temporal Table),Temporal Table 如 {numref}`fig-temporal-table` 所示: -![将item_log拆解为临时表](./img/temporal-table.png) +```{figure} ./img/temporal-table.png +--- +name: fig-temporal-table +width: 80% +align: center +--- +将 item_log 拆解为临时表 +``` -从图中可以看到,由于商品价格在更新,不同时间点的各商品价格不同。假如我们想获取00:00:07时刻各商品价格,得到的结果为右侧上表,如果获取00:01:00时刻各商品的价格,得到的结果为右侧下表。从图中拆解的过程可以看到,Temporal Table可以让我们获得某个时间点的信息,就像整个数据的一个子版本,版本之间通过时间属性来区分。 +从 {numref}`fig-temporal-table` 可以看到,由于商品价格在更新,不同时间点的各商品价格不同。假如我们想获取 00:00:07 时刻各商品价格,得到的结果为右侧上表,如果获取 00:01:00 时刻各商品的价格,得到的结果为右侧下表。从图中拆解的过程可以看到,Temporal Table 可以让我们获得某个时间点的信息,就像整个数据的一个子版本,版本之间通过时间属性来区分。 -对于Temporal Table来说,数据源必须是一个Append-only的追加表,表中有一个Key作为唯一标识,数据追加到这个表后,我们可以根据Key来更新Temporal Table。上图中的表使用`item_id`作为Key。每行数据都有一个时间属性,用来标记不同的版本,时间属性可以是Event Time也可以是Processing Time。上图中的表使用`version_ts`作为时间属性字段。 +对于 Temporal Table 来说,数据源必须是一个 Append-only 的追加表,表中有一个 Key 作为唯一标识,数据追加到这个表后,我们可以根据 Key 来更新 Temporal Table。上图中的表使用 `item_id` 作为 Key。每行数据都有一个时间属性,用来标记不同的版本,时间属性可以是 Event Time 也可以是 Processing Time。上图中的表使用 `version_ts` 作为时间属性字段。 -总结下来,定义一个Temporal Time需要注意以下几点: +总结下来,定义一个 Temporal Time 需要注意以下几点: -* 数据源是一个Append-only的追加表 -* 定义Key,Key用来做唯一标识 +* 数据源是一个 Append-only 的追加表 +* 定义 Key,Key 用来做唯一标识 * 数据源中有时间属性字段,根据时间的先后来区分不同的版本 -下面的代码生成Temporal Table,其中`registerFunction`方法对这个Temporal Table进行了注册,它定义了Key并指定了时间属性字段,我们将在用户自定义方法的章节中专门介绍`registerFunction`使用方法。 +下面的代码生成 Temporal Table,其中 `registerFunction` 方法对这个 Temporal Table 进行了注册,它定义了 Key 并指定了时间属性字段,我们将在用户自定义方法的章节中专门介绍 `registerFunction` 使用方法。 ```java DataStream> itemStream = ... // 获取 Table Table itemTable = tEnv.fromDataStream(itemStream, "item_id, price, version_ts.rowtime"); -// 注册 Temporal Table Function,指定时间属性和Key +// 注册 Temporal Table Function,指定时间属性和 Key tEnv.registerFunction("item", itemTable.createTemporalTableFunction("version_ts", "item_id")); ``` -注册后,我们拥有了一个名为`item`的Temporal Table,接下来可以在SQL中对这个表进行Join: +注册后,我们拥有了一个名为 `item` 的 Temporal Table,接下来可以在 SQL 中对这个表进行 Join: ```sql SELECT @@ -122,17 +143,24 @@ WHERE user_behavior.item_id = latest_item.item_id AND user_behavior.behavior = 'buy' ``` -这个SQL语句筛选购买行为:`user_behavior.behavior = 'buy'`,Temporal Table `item(user_behavior.ts)`按照`user_behavior`表中的时间`ts`来获取该时间点上对应的`item`的版本,将这个表重命名为`latest_item`。这个SQL语句的计算过程如下图所示: +这个 SQL 语句筛选购买行为:`user_behavior.behavior = 'buy'`,Temporal Table `item(user_behavior.ts)` 按照 `user_behavior` 表中的时间 `ts` 来获取该时间点上对应的 `item` 的版本,将这个表重命名为 `latest_item`。这个 SQL 语句的计算过程如 {numref}`fig-temporal-table-join` 所示: -![Temporal Table Join:对user_behavior和item_log进行Join](./img/temporal-table-join.png) +```{figure} ./img/temporal-table-join.png +--- +name: fig-temporal-table-join +width: 80% +align: center +--- +Temporal Table Join:对 user_behavior 和 item_log 进行 Join +``` -整个程序的Java实现如下: +整个程序的 Java 实现如下: ```java // userBehavior DataStream> userBehaviorStream = env .fromCollection(userBehaviorData) - // 使用Event Time必须设置时间戳和Watermark + // 使用 Event Time 必须设置时间戳和 Watermark .assignTimestampsAndWatermarks(new AscendingTimestampExtractor>() { @Override public long extractAscendingTimestamp(Tuple4 element) { @@ -140,7 +168,7 @@ DataStream> userBehaviorStream = env } }); -// 获取Table +// 获取 Table Table userBehaviorTable = tEnv.fromDataStream(userBehaviorStream, "user_id, item_id, behavior,ts.rowtime"); tEnv.createTemporaryView("user_behavior", userBehaviorTable); @@ -155,7 +183,7 @@ DataStream> itemStream = env }); Table itemTable = tEnv.fromDataStream(itemStream, "item_id, price, version_ts.rowtime"); -// 注册 Temporal Table Function,指定时间戳和Key +// 注册 Temporal Table Function,指定时间戳和 Key tEnv.registerFunction( "item", itemTable.createTemporalTableFunction("version_ts", "item_id")); @@ -169,16 +197,23 @@ String sqlQuery = "SELECT \n" + "WHERE user_behavior.item_id = latest_item.item_id" + " AND user_behavior.behavior = 'buy'"; -// 执行SQL语句 +// 执行 SQL 语句 Table joinResult = tEnv.sqlQuery(sqlQuery); DataStream result = tEnv.toAppendStream(joinResult, Row.class); ``` -从时间维度上来看,Temporal Table Join的效果如下图所示。 +从时间维度上来看,Temporal Table Join 的效果如 {numref}`fig-temporal-join-timeline` 所示。 -![Append-only Table与Temporal Table进行Join操作](./img/temporal-join-timeline.png) +```{figure} ./img/temporal-join-timeline.png +--- +name: fig-temporal-join-timeline +width: 80% +align: center +--- +Append-only Table 与 Temporal Table 进行 Join 操作 +``` -将这个场景推广,如果想在其他地方使用Temporal Table Join,需要按照下面的模板编写SQL: +将这个场景推广,如果想在其他地方使用 Temporal Table Join,需要按照下面的模板编写 SQL: ```sql SELECT * @@ -188,19 +223,26 @@ WHERE A.id = B.id 使用时,要注意: -* A表必须是一个Append-only的追加表。 -* B表的数据源必须是一个Append-only的追加表,且必须使用`registerFunction`将该表注册到Catalog中。注册时需要指定Key和时间属性。 -* A表和B表通过Key进行等于谓词匹配:`A.id = B.id`。 +* A 表必须是一个 Append-only 的追加表。 +* B 表的数据源必须是一个 Append-only 的追加表,且必须使用 `registerFunction` 将该表注册到 Catalog 中。注册时需要指定 Key 和时间属性。 +* A 表和 B 表通过 Key 进行等于谓词匹配:`A.id = B.id`。 -在具体实现Temporal Table时,Flink维护了一个类似Keyed State的状态,某个Key值下会保存对应的数据。Event Time下,为了等待一些迟到数据,状态数据会更大一些。 +在具体实现 Temporal Table 时,Flink 维护了一个类似 Keyed State 的状态,某个 Key 值下会保存对应的数据。Event Time 下,为了等待一些迟到数据,状态数据会更大一些。 ## Regular Join -基于前面列举的两种时间维度上的Join,我们可以更好地理解传统意义上的Regular Join。对于刚刚的例子,如果商品表不是把所有改动历史都记录下来,而是只保存了某一时刻的最新值,那么我们应该使用Regular Join。如下图所示,`item`表用来存储当前最新的商品信息数据,00:02:00时刻,`item`表有了改动,Join结果如图中的`result`表。 +基于前面列举的两种时间维度上的 Join,我们可以更好地理解传统意义上的 Regular Join。对于刚刚的例子,如果商品表不是把所有改动历史都记录下来,而是只保存了某一时刻的最新值,那么我们应该使用 Regular Join。如下图所示,`item` 表用来存储当前最新的商品信息数据,00:02:00 时刻,`item` 表有了改动,Join 结果如 {numref}`fig-regular-join` 中的 `result` 表。 -![Regular Join](./img/regular-join.png) +```{figure} ./img/regular-join.png +--- +name: fig-regular-join +width: 80% +align: center +--- +Regular Join +``` -实际上,大部分数据库都如图中左侧所示,只保存数据的最新值,而数据库的改动历史日志不会呈现给用户,仅用来做故障恢复。那么,对于这种类型的表,具体的SQL语句为: +实际上,大部分数据库都如 {numref}`fig-regular-join` 中左侧所示,只保存数据的最新值,而数据库的改动历史日志不会呈现给用户,仅用来做故障恢复。那么,对于这种类型的表,具体的 SQL 语句为: ```sql SELECT @@ -212,7 +254,7 @@ WHERE user_behavior.item_id = item.item_id AND user_behavior.behavior = 'buy' ``` -Regular Join是最常规的Join,它不像Time-windowed Join和Temporal Table Join那样需要在SQL语句中考虑太多时间。它的SQL语法也和批处理中的Join一样,一般符合下面的模板: +Regular Join 是最常规的 Join,它不像 Time-windowed Join 和 Temporal Table Join 那样需要在 SQL 语句中考虑太多时间。它的 SQL 语法也和批处理中的 Join 一样,一般符合下面的模板: ```sql SELECT * @@ -220,10 +262,10 @@ FROM A INNER JOIN B ON A.id = B.id ``` -A和B可以是Append-only的追加表,也可以是可更新的Update表,A、B两个表中的数据可以插入、删除和更新。A、B表对应的元素都会被连接起来。在具体实现上,Flink需要将两个表都放在状态中存储。任何一个表有新数据加入,都会和另外表中所有对应行进行连接。因此,Regular Join适合输入源不太大或源数据增长量非常小的场景。我们可以配置一定的过期时间,超过这个时间后,数据会被清除。我们在[Dynamic Table](dynamic-table.md)节提到的使用下面的方法来设置过期时间:`tEnv.getConfig.setIdleStateRetentionTime(Time.hours(1), Time.hours(2))`。 +A 和 B 可以是 Append-only 的追加表,也可以是可更新的 Update 表,A、B 两个表中的数据可以插入、删除和更新。A、B 表对应的元素都会被连接起来。在具体实现上,Flink 需要将两个表都放在状态中存储。任何一个表有新数据加入,都会和另外表中所有对应行进行连接。因此,Regular Join 适合输入源不太大或源数据增长量非常小的场景。我们可以配置一定的过期时间,超过这个时间后,数据会被清除。我们在 [Dynamic Table](dynamic-table.md) 节提到的使用下面的方法来设置过期时间:`tEnv.getConfig.setIdleStateRetentionTime(Time.hours(1), Time.hours(2))`。 -目前,Flink可以支持`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL OUTER JOIN`,只支持等于谓词匹配:`ON A.id = B.id`。使用Regular Join时,尽量避免出现笛卡尔积式的连接。 +目前,Flink 可以支持 `INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN` 和 `FULL OUTER JOIN`,只支持等于谓词匹配:`ON A.id = B.id`。使用 Regular Join 时,尽量避免出现笛卡尔积式的连接。 :::info -在Regular Join中,我们无法`SELECT`时间属性,因为Flink SQL无法严格保证数据按照时间属性排序。如果我们想要`SELECT`时间字段,一个办法是在定义Schema时,不明确指定该字段为时间属性,比如使用SQL DDL定义时,不设置`WATERMARK FOR rowtime_column AS watermark_strategy_expression`。 +在 Regular Join 中,我们无法 `SELECT` 时间属性,因为 Flink SQL 无法严格保证数据按照时间属性排序。如果我们想要 `SELECT` 时间字段,一个办法是在定义 Schema 时,不明确指定该字段为时间属性,比如使用 SQL DDL 定义时,不设置 `WATERMARK FOR rowtime_column AS watermark_strategy_expression`。 ::: \ No newline at end of file diff --git a/doc/ch-table-sql/sql-window.md b/doc/ch-table-sql/sql-window.md index d255d81..5a86676 100644 --- a/doc/ch-table-sql/sql-window.md +++ b/doc/ch-table-sql/sql-window.md @@ -3,53 +3,53 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -本节主要讨论如何在Flink SQL上使用窗口。 +本节主要讨论如何在 Flink SQL 上使用窗口。 ## 时间属性 -Table API & SQL支持时间维度上的处理。时间属性(Time Attribute)用一个`TIMESTAMP(int precision)`数据类型来表示,这个类型与SQL标准中的时间戳类型相对应,是Table API& SQL中专门用来表征时间属性的数据类型。`precision`为精度,表示秒以下保留几位小数点,可以是0到9的一个数字。具体而言,时间的格式为: +Table API & SQL 支持时间维度上的处理。时间属性(Time Attribute)用一个 `TIMESTAMP(int precision)` 数据类型来表示,这个类型与 SQL 标准中的时间戳类型相对应,是 Table API& SQL 中专门用来表征时间属性的数据类型。`precision` 为精度,表示秒以下保留几位小数点,可以是 0 到 9 的一个数字。具体而言,时间的格式为: ``` year-month-day hour:minute:second[.fractional] ``` -假如我们想要使用一个纳秒精度的时间,应该声明类型为`TIMESTAMP(9)`,套用上面的时间格式的话,可以表征从`0000-01-01 00:00:00.000000000`到`9999-12-31 23:59:59.999999999`。绝大多数情况下,我们使用毫秒精度即可,即`TIMESTAMP(3)`。 +假如我们想要使用一个纳秒精度的时间,应该声明类型为 `TIMESTAMP(9)`,套用上面的时间格式的话,可以表征从 `0000-01-01 00:00:00.000000000` 到 `9999-12-31 23:59:59.999999999`。绝大多数情况下,我们使用毫秒精度即可,即 `TIMESTAMP(3)`。 -当涉及到时间窗口,往往就要涉及到窗口的长度单位,现有的时间单位有`MILLISECOND`、`SECOND`、`MINUTE`、`HOUR`、`DAY`、`MONTH`和`YEAR`。 +当涉及到时间窗口,往往就要涉及到窗口的长度单位,现有的时间单位有 `MILLISECOND`、`SECOND`、`MINUTE`、`HOUR`、`DAY`、`MONTH` 和 `YEAR`。 -在第五章中,我们曾介绍,Flink提供了三种时间语义:Processing Time、Ingestion Time和Event Time。Processing Time是数据被机器处理时的系统时间,Ingestion Time是数据流入Flink的时间,Event Time是数据实际发生的时间。我们在之前章节曾详细探讨这几种时间语义的使用方法,这里我们主要介绍一下在Table API & SQL中Processing Time和Event Time两种时间语义的使用方法。 +在第五章中,我们曾介绍,Flink 提供了三种时间语义:Processing Time、Ingestion Time 和 Event Time。Processing Time 是数据被机器处理时的系统时间,Ingestion Time 是数据流入 Flink 的时间,Event Time 是数据实际发生的时间。我们在之前章节曾详细探讨这几种时间语义的使用方法,这里我们主要介绍一下在 Table API & SQL 中 Processing Time 和 Event Time 两种时间语义的使用方法。 -如果想在Table API & SQL中使用时间相关的计算,我们必须在Java或Scala代码中设置使用哪种时间语义: +如果想在 Table API & SQL 中使用时间相关的计算,我们必须在 Java 或 Scala 代码中设置使用哪种时间语义: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); -// 默认使用Processing Time +// 默认使用 Processing Time env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime); -// 使用IngestionTime +// 使用 IngestionTime env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime); -// 使用EventTime +// 使用 EventTime env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); ``` -同时,我们必须要在Schema中指定一个字段为时间属性,否则Flink无法知道具体哪个字段与时间相关。 +同时,我们必须要在 Schema 中指定一个字段为时间属性,否则 Flink 无法知道具体哪个字段与时间相关。 -指定时间属性时可以有下面几种方式:使用SQL DDL或者由`DataStream`转为`Table`时定义一个时间属性。 +指定时间属性时可以有下面几种方式:使用 SQL DDL 或者由 `DataStream` 转为 `Table` 时定义一个时间属性。 ### Processing Time #### SQL DDL -Processing Time使用当机器的系统时间作为时间,在Table API & SQL中这个字段被称为`proctime`。它不需要配置Watermark。使用时,我们在原本的Schema上添加一个虚拟的时间戳列,时间戳列由`PROCTIME()`函数计算产生。 +Processing Time 使用当机器的系统时间作为时间,在 Table API & SQL 中这个字段被称为 `proctime`。它不需要配置 Watermark。使用时,我们在原本的 Schema 上添加一个虚拟的时间戳列,时间戳列由 `PROCTIME()` 函数计算产生。 ```sql CREATE TABLE user_behavior ( @@ -58,14 +58,14 @@ CREATE TABLE user_behavior ( category_id BIGINT, behavior STRING, ts TIMESTAMP(3), - -- 在原有Schema基础上添加一列proctime + -- 在原有 Schema 基础上添加一列 proctime proctime as PROCTIME() ) WITH ( ... ); ``` -后续过程中,我们可以在`proctime`这个时间属性上进行相关计算: +后续过程中,我们可以在 `proctime` 这个时间属性上进行相关计算: ```sql SELECT @@ -76,27 +76,27 @@ FROM user_behavior GROUP BY user_id, TUMBLE(proctime, INTERVAL '1' MINUTE) ``` -#### 由DataStream转化 +#### 由 DataStream 转化 -将`DataStream`转为`Table`: +将 `DataStream` 转为 `Table`: ```java DataStream userBehaviorDataStream = ... -// 定义了Schema中各字段的名字,其中proctime使用了.proctime属性,这个属性帮我们生成一个Processing Time +// 定义了 Schema 中各字段的名字,其中 proctime 使用了.proctime 属性,这个属性帮我们生成一个 Processing Time tEnv.createTemporaryView("user_behavior", userBehaviorDataStream, "userId as user_id, itemId as item_id, categoryId as category_id, behavior, proctime.proctime"); ``` -可以看到,`proctime`这个属性追加到了其他字段之后,是在原有Schema基础上增加的一个字段。Flink帮我们自动生成了Processing Time的时间属性。 +可以看到,`proctime` 这个属性追加到了其他字段之后,是在原有 Schema 基础上增加的一个字段。Flink 帮我们自动生成了 Processing Time 的时间属性。 ### Event Time -Event Time时间语义使用一条数据实际发生的时间作为时间属性,在Table API & SQL中这个字段通常被称为`rowtime`。这种模式下多次重复计算时,计算结果是确定的。这意味着,Event Time时间语义可以保证流处理和批处理的统一。Event Time时间语义下,我们需要设置每条数据发生时的时间戳,并提供一个Watermark。Watermark表示迟于该时间的数据都作为迟到数据对待。 +Event Time 时间语义使用一条数据实际发生的时间作为时间属性,在 Table API & SQL 中这个字段通常被称为 `rowtime`。这种模式下多次重复计算时,计算结果是确定的。这意味着,Event Time 时间语义可以保证流处理和批处理的统一。Event Time 时间语义下,我们需要设置每条数据发生时的时间戳,并提供一个 Watermark。Watermark 表示迟于该时间的数据都作为迟到数据对待。 #### SQL DDL -我们需要在SQL DDL中使用`WATERMARK`关键字,用来表明某个字段是Event Time时间属性,并且设置一个Watermark等待策略。 +我们需要在 SQL DDL 中使用 `WATERMARK` 关键字,用来表明某个字段是 Event Time 时间属性,并且设置一个 Watermark 等待策略。 ```sql CREATE TABLE user_behavior ( @@ -105,51 +105,58 @@ CREATE TABLE user_behavior ( category_id BIGINT, behavior STRING, ts TIMESTAMP(3), - -- 定义ts字段为Event Time时间戳,Watermark比监测到的最晚时间还晚5秒 + -- 定义 ts 字段为 Event Time 时间戳,Watermark 比监测到的最晚时间还晚 5 秒 WATERMARK FOR ts as ts - INTERVAL '5' SECOND ) WITH ( ... ); ``` -在上面的DDL中,`WATERMARK`起到了定义Event Time时间属性的作用,它的基本语法规则为:`WATERMARK FOR rowtime_column AS watermark_strategy_expression`。 +在上面的 DDL 中,`WATERMARK` 起到了定义 Event Time 时间属性的作用,它的基本语法规则为:`WATERMARK FOR rowtime_column AS watermark_strategy_expression`。 -`rowtime_column`为时间戳字段,可以是数据中的自带字段,也可以是类似`PROCTIME()`函数计算出的虚拟时间戳字段,这个字段必须是`TIMESTAMP(3)`类型。 +`rowtime_column` 为时间戳字段,可以是数据中的自带字段,也可以是类似 `PROCTIME()` 函数计算出的虚拟时间戳字段,这个字段必须是 `TIMESTAMP(3)` 类型。 -`watermark_strategy_expression`定义了Watermark的生成策略,返回值必须是`TIMESTAMP(3)`类型。Flink提供了几种常用的策略: +`watermark_strategy_expression` 定义了 Watermark 的生成策略,返回值必须是 `TIMESTAMP(3)` 类型。Flink 提供了几种常用的策略: -* 数据自身的时间戳严格按照单调递增的形式出现,即晚到达的时间戳总比早到达的时间戳大,可以使用`WATERMARK FOR rowtime_column AS rowtime_column`或`WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL '0.001' SECOND`生成Watermark。这个策略的原理是:监测所有数据时间戳,并记录时间戳最大值,在最大值基础上添加一个1毫秒的延迟作为Watermark时间。 +* 数据自身的时间戳严格按照单调递增的形式出现,即晚到达的时间戳总比早到达的时间戳大,可以使用 `WATERMARK FOR rowtime_column AS rowtime_column` 或 `WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL '0.001' SECOND` 生成 Watermark。这个策略的原理是:监测所有数据时间戳,并记录时间戳最大值,在最大值基础上添加一个 1 毫秒的延迟作为 Watermark 时间。 -* 数据本身是乱序到达的,Watermark在时间戳最大值的基础上延迟一定时间间隔,如果数据仍比这个时间还晚,则被定为迟到数据。我们可以使用`WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL 'duration' timeUnit`生成Watermark。例如,`WATERMARK FOR ts as ts - INTERVAL '5' SECOND`定义的Watermark比时间戳最大值还延迟了5秒。这里`timeUnit`可以是`SECOND`、`MINUTE`或`HOUR`等时间单位。 +* 数据本身是乱序到达的,Watermark 在时间戳最大值的基础上延迟一定时间间隔,如果数据仍比这个时间还晚,则被定为迟到数据。我们可以使用 `WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL 'duration' timeUnit` 生成 Watermark。例如,`WATERMARK FOR ts as ts - INTERVAL '5' SECOND` 定义的 Watermark 比时间戳最大值还延迟了 5 秒。这里 `timeUnit` 可以是 `SECOND`、`MINUTE` 或 `HOUR` 等时间单位。 -#### 由DataStream转化 +#### 由 DataStream 转化 -如果由`DataStream`转化为一个`Table`,那么需要在`DataStream`上设置好时间戳和Watermark。我们曾在第五章中讲解如何对数据流设置时间戳和Watermark。设置好后,再将`DataStream`转为`Table`: +如果由 `DataStream` 转化为一个 `Table`,那么需要在 `DataStream` 上设置好时间戳和 Watermark。我们曾在第五章中讲解如何对数据流设置时间戳和 Watermark。设置好后,再将 `DataStream` 转为 `Table`: ```java env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); DataStream userBehaviorDataStream = env .addSource(...) - // 在DataStream里设置时间戳和Watermark + // 在 DataStream 里设置时间戳和 Watermark .assignTimestampsAndWatermarks(...); -// 创建一个user_behavior表 -// ts.rowtime表示该列使用EventTime Timestamp +// 创建一个 user_behavior 表 +// ts.rowtime 表示该列使用 EventTime Timestamp tEnv.createTemporaryView("user_behavior", userBehaviorDataStream, "userId as user_id, itemId as item_id, categoryId as category_id, behavior, ts.rowtime"); ``` ## 窗口聚合 -基于上述的时间属性,我们可以在时间维度上进行一些分组和聚合操作。SQL用户经常使用聚合操作,比如`GROUP BY`和`OVER WINDOW`,目前Flink已经在流处理中支持了这两种SQL语法。 +基于上述的时间属性,我们可以在时间维度上进行一些分组和聚合操作。SQL 用户经常使用聚合操作,比如 `GROUP BY` 和 `OVER WINDOW`,目前 Flink 已经在流处理中支持了这两种 SQL 语法。 ### GROUP BY -`GROUP BY`是很多SQL用户经常使用的窗口聚合函数,在流处理的一个时间窗口上进行`GROUP BY`与批处理中的非常相似,在之前的例子中我们已经开始使用了`GROUP BY`。以`GROUP BY field1, time_attr_window`语句为例,所有含有相同`field1 + time_attr_window`的行会被分到一组中,再对这组数据中的其他字段`field2`进行聚合操作,常见的聚合操作有`COUNT`、`SUM`、`AVG`、`MAX`等。可见,时间窗口`time_attr_window`被作当做整个表的一个字段,用来做分组,下图展示了这个过程。 +`GROUP BY` 是很多 SQL 用户经常使用的窗口聚合函数,在流处理的一个时间窗口上进行 `GROUP BY` 与批处理中的非常相似,在之前的例子中我们已经开始使用了 `GROUP BY`。以 `GROUP BY field1, time_attr_window` 语句为例,所有含有相同 `field1 + time_attr_window` 的行会被分到一组中,再对这组数据中的其他字段 `field2` 进行聚合操作,常见的聚合操作有 `COUNT`、`SUM`、`AVG`、`MAX` 等。可见,时间窗口 `time_attr_window` 被作当做整个表的一个字段,用来做分组,{numref}`fig-group-by-window` 展示了这个过程。 -![时间窗口上的GROUP BY](./img/group-by.png) +```{figure} ./img/group-by.png +--- +name: fig-group-by-window +width: 80% +align: center +--- +时间窗口上的 GROUP BY +``` -下面的SQL语句是我们之前使用的例子: +下面的 SQL 语句是我们之前使用的例子: ```sql SELECT @@ -160,21 +167,21 @@ FROM user_behavior GROUP BY user_id, TUMBLE(proctime, INTERVAL '1' MINUTE) ``` -这里再次对这个SQL语句进行分析解释。我们定义一个1分钟的滚动窗口,滚动窗口函数定义为:`TUMBLE(proctime, INTERVAL '1' MINUTE)`,窗口以`proctime`这个Processing Time为时间属性。这里我们使用了一个窗口分组函数,这是一个滚动窗口,它形如:`TUMBLE(time_attr, interval)`,它将某个时间段内的数据都分到一组上。我们可以在`SELECT`中添加字段`TUMBLE_START(proctime, INTERVAL '1' MINUTE)`查看窗口的的起始时间。接下来我们将介绍几种常见的窗口分组函数。 +这里再次对这个 SQL 语句进行分析解释。我们定义一个 1 分钟的滚动窗口,滚动窗口函数定义为:`TUMBLE(proctime, INTERVAL '1' MINUTE)`,窗口以 `proctime` 这个 Processing Time 为时间属性。这里我们使用了一个窗口分组函数,这是一个滚动窗口,它形如:`TUMBLE(time_attr, interval)`,它将某个时间段内的数据都分到一组上。我们可以在 `SELECT` 中添加字段 `TUMBLE_START(proctime, INTERVAL '1' MINUTE)` 查看窗口的的起始时间。接下来我们将介绍几种常见的窗口分组函数。 #### 三种窗口分组函数 -我们在第5章中曾详细分析几种窗口的区别,下表展示了Flink SQL中窗口分组函数和相对应的使用方法。 +我们在第 5 章中曾详细分析几种窗口的区别,下表展示了 Flink SQL 中窗口分组函数和相对应的使用方法。 | 窗口分组函数 | 使用介绍 | | :-------------------------------------------: | :----------------------------------------------------------: | -| TUMBLE(time_attr, interval) | 定义一个滚动窗口,窗口是定长的,长度为interval,窗口之间互不重叠,滚动向前。比如我们刚才定义了一个1分钟的滚动窗口,所有属于该分钟的数据都会被归到该窗口中。 | -| HOP(time_attr, slide_interval, size_interval) | 定义一个滑动窗口,窗口长度是定长的,长度为size_interval,窗口以slide_interval的速度向前滑动。如果slide_interval比size_interval小,那么窗口之间会重叠。这意味着一条数据可能被划分到多个窗口中。比如,窗口长度size_interval为3分钟,滑动速度slide_interval为1分钟,那么每1分钟都产生一个窗口,一条数据应该会被分到3个窗口中。如果slide_interval等于size_interval,这就是一个滚动窗口。如果slide_interval大于size_interval,那么窗口之间有间隙。 | -| SESSION(time_attr, interval) | 定义一个会话窗口,窗口长度是变长的,当两条数据之间的Session Gap超过了interval,这两条数据被分到两个窗口上。或者说,一个窗口等待超过interval后仍无数据进入,该窗口关闭。比如,我们定义Session Gap为3分钟,一个窗口最后一条数据之后的三分钟内没有新数据出现,则该窗口关闭,再之后的数据被归为下一个窗口。 | +| TUMBLE(time_attr, interval) | 定义一个滚动窗口,窗口是定长的,长度为 interval,窗口之间互不重叠,滚动向前。比如我们刚才定义了一个 1 分钟的滚动窗口,所有属于该分钟的数据都会被归到该窗口中。 | +| HOP(time_attr, slide_interval, size_interval) | 定义一个滑动窗口,窗口长度是定长的,长度为 size_interval,窗口以 slide_interval 的速度向前滑动。如果 slide_interval 比 size_interval 小,那么窗口之间会重叠。这意味着一条数据可能被划分到多个窗口中。比如,窗口长度 size_interval 为 3 分钟,滑动速度 slide_interval 为 1 分钟,那么每 1 分钟都产生一个窗口,一条数据应该会被分到 3 个窗口中。如果 slide_interval 等于 size_interval,这就是一个滚动窗口。如果 slide_interval 大于 size_interval,那么窗口之间有间隙。 | +| SESSION(time_attr, interval) | 定义一个会话窗口,窗口长度是变长的,当两条数据之间的 Session Gap 超过了 interval,这两条数据被分到两个窗口上。或者说,一个窗口等待超过 interval 后仍无数据进入,该窗口关闭。比如,我们定义 Session Gap 为 3 分钟,一个窗口最后一条数据之后的三分钟内没有新数据出现,则该窗口关闭,再之后的数据被归为下一个窗口。 | -在这些函数中,时间间隔应该按照`INTERVAL 'duration' timeUnit`的格式来写。比如,1分钟可以写为:`INTERVAL '1' MINUTE`。 +在这些函数中,时间间隔应该按照 `INTERVAL 'duration' timeUnit` 的格式来写。比如,1 分钟可以写为:`INTERVAL '1' MINUTE`。 -Flink的流处理和批处理都支持上述三种窗口函数的。批处理没有时间语义之说,直接使用数据集中的时间字段;流处理中,如上一小节所示,时间语义可以选择为Event Time或Processing Time。当然,时间窗口必须基于上一节所提到的时间属性。 +Flink 的流处理和批处理都支持上述三种窗口函数的。批处理没有时间语义之说,直接使用数据集中的时间字段;流处理中,如上一小节所示,时间语义可以选择为 Event Time 或 Processing Time。当然,时间窗口必须基于上一节所提到的时间属性。 #### 窗口的起始结束时间 @@ -182,16 +189,16 @@ Flink的流处理和批处理都支持上述三种窗口函数的。批处理没 | 函数 | 使用介绍 | | :---------------------------------------: | :----------------------------------------------------------: | -| TUMBLE_START(time_attr, interval) | 返回当前窗口的起始时间(包含边界),如`[00:10, 00:20) `的窗口,返回 `00:10` 。 | -| TUMBLE_END(time_attr, interval) | 返回当前窗口的结束时间(包含边界),如`[00:00, 00:20)` 的窗口,返回 `00:20`。 | -| TUMBLE_ROWTIME(time_attr, interval) | 返回窗口的结束时间(不包含边界)。如 `[00:00, 00:20]` 的窗口,返回 `00:19:59.999` 。返回值是一个rowtime,可以基于该字段做时间属性的操作,如内联视图子查询或时间窗口上的JOIN。只能用在Event Time时间语义的作业上。 | -| TUMBLE_PROCTIME(time-attr, size-interval) | 返回窗口的结束时间(不包含边界)。如 `[00:00, 00:20]` 的窗口,返回 `00:19:59.999` 。返回值是一个proctime,可以基于该字段做时间属性的操作,如内联视图子查询或时间窗口上的JOIN。 只能用在Processing Time时间语义的作业上。 | +| TUMBLE_START(time_attr, interval) | 返回当前窗口的起始时间(包含边界),如 `[00:10, 00:20) ` 的窗口,返回 `00:10` 。 | +| TUMBLE_END(time_attr, interval) | 返回当前窗口的结束时间(包含边界),如 `[00:00, 00:20)` 的窗口,返回 `00:20`。 | +| TUMBLE_ROWTIME(time_attr, interval) | 返回窗口的结束时间(不包含边界)。如 `[00:00, 00:20]` 的窗口,返回 `00:19:59.999` 。返回值是一个 rowtime,可以基于该字段做时间属性的操作,如内联视图子查询或时间窗口上的 JOIN。只能用在 Event Time 时间语义的作业上。 | +| TUMBLE_PROCTIME(time-attr, size-interval) | 返回窗口的结束时间(不包含边界)。如 `[00:00, 00:20]` 的窗口,返回 `00:19:59.999` 。返回值是一个 proctime,可以基于该字段做时间属性的操作,如内联视图子查询或时间窗口上的 JOIN。 只能用在 Processing Time 时间语义的作业上。 | :::note -同一个SQL查询中,`TUMBLE(time_attr, interval)`函数中的`interval`和`TUMBLE_START(time_attr, interval)`函数中的`interval`要保持一致。确切地说,`INTERVAL 'duration' timeUnit`中的`duration`时间长度和`timeUnit`时间单位都要前后保持一致。 +同一个 SQL 查询中,`TUMBLE(time_attr, interval)` 函数中的 `interval` 和 `TUMBLE_START(time_attr, interval)` 函数中的 `interval` 要保持一致。确切地说,`INTERVAL 'duration' timeUnit` 中的 `duration` 时间长度和 `timeUnit` 时间单位都要前后保持一致。 ::: -我们已经在前面的例子中展示了`TUMBLE_END`的例子,这里不再过多解释。`TUMBLE_START`或`TUMBLE_END`返回的是展示的结果,已经不再是一个时间属性,无法被后续其他查询用来作为时间属性做进一步查询。假如我们想基于窗口时间戳做进一步的查询,比如内联视图子查询或Join等操作,我们需要使用`TUMBLE_ROWTIME`和`TUMBLE_PROCTIME`。比如下面的例子: +我们已经在前面的例子中展示了 `TUMBLE_END` 的例子,这里不再过多解释。`TUMBLE_START` 或 `TUMBLE_END` 返回的是展示的结果,已经不再是一个时间属性,无法被后续其他查询用来作为时间属性做进一步查询。假如我们想基于窗口时间戳做进一步的查询,比如内联视图子查询或 Join 等操作,我们需要使用 `TUMBLE_ROWTIME` 和 `TUMBLE_PROCTIME`。比如下面的例子: ```java SELECT @@ -209,21 +216,28 @@ FROM ( GROUP BY TUMBLE(rowtime, INTERVAL '20' MINUTE), user_id ``` -这是一个嵌套的内联视图查询,我们先做一个10秒钟的视图,再在此基础上进行20分钟的聚合。子查询使用了`TUMBLE_ROWTIME`,这个字段仍然是一个时间属性,后续其他操作可以在此基础上继续使用各种时间相关计算。 +这是一个嵌套的内联视图查询,我们先做一个 10 秒钟的视图,再在此基础上进行 20 分钟的聚合。子查询使用了 `TUMBLE_ROWTIME`,这个字段仍然是一个时间属性,后续其他操作可以在此基础上继续使用各种时间相关计算。 -前面详细分析了滚动窗口的各个函数,对于滑动窗口,Flink提供有`HOP_START()`、`HOP_END()`、`HOP_ROWTIME()`、`HOP_PROCTIME()`这些函数;对于会话窗口,有`SESSION_START()`、`SESSION_END()`、`SESSION_ROWTIME()`和`SESSION_PROCTIME()`。这些函数的使用方法比较相似,这里不再赘述。 +前面详细分析了滚动窗口的各个函数,对于滑动窗口,Flink 提供有 `HOP_START()`、`HOP_END()`、`HOP_ROWTIME()`、`HOP_PROCTIME()` 这些函数;对于会话窗口,有 `SESSION_START()`、`SESSION_END()`、`SESSION_ROWTIME()` 和 `SESSION_PROCTIME()`。这些函数的使用方法比较相似,这里不再赘述。 -综上,`GROUP BY`将多行数据分到一组,然后对一组的数据进行聚合,聚合结果为一行数据。或者说,`GROUP BY`一般是多行变一行。 +综上,`GROUP BY` 将多行数据分到一组,然后对一组的数据进行聚合,聚合结果为一行数据。或者说,`GROUP BY` 一般是多行变一行。 ### OVER WINDOW -传统SQL中专门进行窗口处理的函数为`OVER WINDOW`。`OVER WINDOW`与`GROUP BY`有些不同,它对每一行数据都生成窗口,在窗口上进行聚合,聚合的结果会生成一个新字段。或者说,`OVER WINDOW`一般是一行变一行。 +传统 SQL 中专门进行窗口处理的函数为 `OVER WINDOW`。`OVER WINDOW` 与 `GROUP BY` 有些不同,它对每一行数据都生成窗口,在窗口上进行聚合,聚合的结果会生成一个新字段。或者说,`OVER WINDOW` 一般是一行变一行。 -![OVER WINDOW示意图](./img/over-window.png) +```{figure} ./img/over-window.png +--- +name: fig-over-window +width: 80% +align: center +--- +OVER WINDOW 示意图 +``` -上图展示了`OVER WINDOW`的工作示意图,窗口确定的方式为:先对`field1`做分组,相同`field1`的数据被分到一起,按照时间属性排序,即上图中的`PARTITION BY`和`ORDER BY`部分;然后每行数据都建立一个窗口,窗口起始点是`field1`分组的第一行数据,结束点是当前行;窗口划分好后,再对窗口内的`field2`字段做各类聚合操作,生成`field2_agg`的新字段,常见的聚合操作有`COUNT`、`SUM`、`AVG`或`MAX`等。从图中可以看出,每一行都有一个窗口,当前行是这个窗口的最后一行,窗口的聚合结果生成一个新的字段。具体的实现逻辑上,Flink为每一个元素维护一个窗口,为每一个元素执行一次窗口计算,完成计算后会清除过期数据。 +{numref}`fig-over-window` 展示了 `OVER WINDOW` 的工作示意图,窗口确定的方式为:先对 `field1` 做分组,相同 `field1` 的数据被分到一起,按照时间属性排序,即上图中的 `PARTITION BY` 和 `ORDER BY` 部分;然后每行数据都建立一个窗口,窗口起始点是 `field1` 分组的第一行数据,结束点是当前行;窗口划分好后,再对窗口内的 `field2` 字段做各类聚合操作,生成 `field2_agg` 的新字段,常见的聚合操作有 `COUNT`、`SUM`、`AVG` 或 `MAX` 等。从图中可以看出,每一行都有一个窗口,当前行是这个窗口的最后一行,窗口的聚合结果生成一个新的字段。具体的实现逻辑上,Flink 为每一个元素维护一个窗口,为每一个元素执行一次窗口计算,完成计算后会清除过期数据。 -Flink SQL中对`OVER WINDOW`的定义遵循了标准的SQL语法,我们先来看一下`OVER WINDOW`的语法结构: +Flink SQL 中对 `OVER WINDOW` 的定义遵循了标准的 SQL 语法,我们先来看一下 `OVER WINDOW` 的语法结构: ```sql SELECT @@ -233,7 +247,7 @@ SELECT FROM tab1 ``` -其中,`windowDefinition2`是定义窗口的规则,包括根据哪些字段进行`PARTITION BY`等,在定义好的窗口上,我们使用`AGG_FUNCTION(field2)`对`field2`字段进行聚合计算。或者我们可以使用别名来定义窗口`WINDOW w AS ...`: +其中,`windowDefinition2` 是定义窗口的规则,包括根据哪些字段进行 `PARTITION BY` 等,在定义好的窗口上,我们使用 `AGG_FUNCTION(field2)` 对 `field2` 字段进行聚合计算。或者我们可以使用别名来定义窗口 `WINDOW w AS ...`: ```sql SELECT @@ -243,7 +257,7 @@ FROM tab1 WINDOW w AS (windowDefinition) ``` -那么具体应该如何划分窗口,如何写`windowDefinition`呢?上图中只演示了一种窗口划分的方式,常用的窗口划分方式可以基于行,也可以基于时间段,接下来我们通过一些例子来展示窗口的划分。 +那么具体应该如何划分窗口,如何写 `windowDefinition` 呢?上图中只演示了一种窗口划分的方式,常用的窗口划分方式可以基于行,也可以基于时间段,接下来我们通过一些例子来展示窗口的划分。 #### ROWS OVER WINDOW @@ -263,19 +277,26 @@ WINDOW w AS ( ) ``` -上面的SQL语句中,`WINDOW w AS (...)`定义了一个名为`w`的窗口,它根据用户的`user_id`来分组,并按照`ts`来排序。原始数据并不是基于用户ID来分组的,`PARTITION BY user_id`起到了分组的作用,相同`user_id`的用户被分到了一组,组内按照时间戳`ts`来排序。这里完成了上图中最左侧表到中间表的转化。 +上面的 SQL 语句中,`WINDOW w AS (...)` 定义了一个名为 `w` 的窗口,它根据用户的 `user_id` 来分组,并按照 `ts` 来排序。原始数据并不是基于用户 ID 来分组的,`PARTITION BY user_id` 起到了分组的作用,相同 `user_id` 的用户被分到了一组,组内按照时间戳 `ts` 来排序。这里完成了上图中最左侧表到中间表的转化。 -`ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`定义了窗口的起始和结束,窗口的起始点为`UNBOUNDED PRECEDING`,这两个SQL关键词组合在一起表示窗口起始点是数据流的最开始的行,`CURRENT ROW`表示结束点是当前行。`ROWS BETWEEN ... AND ...`这样的语句定义了窗口的起始和结束。结合分组和排序策略,这就意味着,这个窗口从数据流的第一行开始到当前行结束,按照`user_id`分组,按照`ts`排序。 +`ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW` 定义了窗口的起始和结束,窗口的起始点为 `UNBOUNDED PRECEDING`,这两个 SQL 关键词组合在一起表示窗口起始点是数据流的最开始的行,`CURRENT ROW` 表示结束点是当前行。`ROWS BETWEEN ... AND ...` 这样的语句定义了窗口的起始和结束。结合分组和排序策略,这就意味着,这个窗口从数据流的第一行开始到当前行结束,按照 `user_id` 分组,按照 `ts` 排序。 -:::note -目前`OVER WINDOW`上,Flink只支持基于时间属性的`ORDER BY`排序,无法基于其他字段进行排序。 +:::{note} +目前 `OVER WINDOW` 上,Flink 只支持基于时间属性的 `ORDER BY` 排序,无法基于其他字段进行排序。 ::: -![ROWS:按行划分窗口](./img/rows-over-window.png) +```{figure} ./img/rows-over-window.png +--- +name: fig-rows-over-window +width: 80% +align: center +--- +ROWS:按行划分窗口 +``` -上图展示了按行划分窗口的基本原理,图中上半部分使用`UNBOUNDED PRECEDING`表示起始位置,那么窗口是从数据流的第一个元素开始一直到当前元素;下半部分使用`1 PRECEDING`表示起始位置,窗口的起始点是本元素的前一个元素,我们可以把1换成其他我们想要的数字。 +{numref}`fig-rows-over-window` 展示了按行划分窗口的基本原理,图中上半部分使用 `UNBOUNDED PRECEDING` 表示起始位置,那么窗口是从数据流的第一个元素开始一直到当前元素;下半部分使用 `1 PRECEDING` 表示起始位置,窗口的起始点是本元素的前一个元素,我们可以把 1 换成其他我们想要的数字。 -:::note +:::{note} 图中最后两行数据从时间上虽然同时到达,但由于窗口是按行划分的,这两行数据被划分为两个窗口,这与后文提到的按时间段划分有所区别。 ::: @@ -288,7 +309,7 @@ WINDOW w AS ( | 1 | pv | 2017-12-01 00:00:02 | | 2 | cart | 2017-12-01 00:00:03 | -那么对于之前的SQL语句,一个查询的结果将产生下面的数据: +那么对于之前的 SQL 语句,一个查询的结果将产生下面的数据: | user_id | behavior | behavior_cnt | ts | | :-----: | :------: | :----------: | :-----------------: | @@ -299,7 +320,7 @@ WINDOW w AS ( 可以看到,对于输入的每一行数据,都有一行输出。 -总结下来,`ROWS OVER WINDOW`的模式应该按照下面的模式来编写SQL: +总结下来,`ROWS OVER WINDOW` 的模式应该按照下面的模式来编写 SQL: ```sql SELECT @@ -311,7 +332,7 @@ SELECT BETWEEN (UNBOUNDED | rowCount) PRECEDING AND CURRENT ROW) AS fieldName FROM tab1 --- 使用AS +-- 使用 AS SELECT field1, AGG_FUNCTION(field2) OVER w AS fieldName @@ -326,13 +347,13 @@ WINDOW w AS ( 需要注意: -* `PARTITION BY`是可选的,可以根据一到多个字段来对数据进行分组。 -* `ORDER BY`之后必须是一个时间属性,用于对数据进行排序。 -* `ROWS BETWEEN ... AND ...`用来界定窗口的起始结束点。`UNBOUNDED PRECEDING`表示整个数据流的开始作为起始点,也可以使用`rowCount PRECEDING`来表示当前行之前的某个元素作为起始点,`rowCount`是一个数字;`CURRENT ROW`表示当前行作为结束点。 +* `PARTITION BY` 是可选的,可以根据一到多个字段来对数据进行分组。 +* `ORDER BY` 之后必须是一个时间属性,用于对数据进行排序。 +* `ROWS BETWEEN ... AND ...` 用来界定窗口的起始结束点。`UNBOUNDED PRECEDING` 表示整个数据流的开始作为起始点,也可以使用 `rowCount PRECEDING` 来表示当前行之前的某个元素作为起始点,`rowCount` 是一个数字;`CURRENT ROW` 表示当前行作为结束点。 #### RANGES OVER WINDOW -第二种划分的方式是按照时间段来划分窗口,SQL中关键字为`RANGE`。这种窗口的结束点也是当前行,起始点是当前行之前的某个时间点。我们仍然以用户行为为例,SQL语句改为: +第二种划分的方式是按照时间段来划分窗口,SQL 中关键字为 `RANGE`。这种窗口的结束点也是当前行,起始点是当前行之前的某个时间点。我们仍然以用户行为为例,SQL 语句改为: ```sql SELECT @@ -347,13 +368,20 @@ WINDOW w AS ( ) ``` -可以看到,与`ROWS`的区别在于,`RANGE`后面使用的是一个时间段,根据当前行的时间减去这个时间段,可以得到起始时间。 +可以看到,与 `ROWS` 的区别在于,`RANGE` 后面使用的是一个时间段,根据当前行的时间减去这个时间段,可以得到起始时间。 -![RANGE:按时间段划分窗口](./img/range-over-window.png) +```{figure} ./img/range-over-window.png +--- +name: fig-range-over-window +width: 80% +align: center +--- +RANGE:按时间段划分窗口 +``` -上图展示了按时间段划分窗口的基本原理,图中上半部分使用`UNBOUNDED PRECEDING`表示起始位置,与`ROWS`按行划分不同的是,最后两个元素虽然同时到达,但是他们被划分为一个窗口(图上半部分中的w4);下半部分使用`INTERVAL '2' SECOND`表示起始位置,窗口的起始点是当前元素减去2秒,最后两个元素也被划分到了一个窗口(图下半部分中的w4)。 +{numref}`fig-range-over-window` 展示了按时间段划分窗口的基本原理,图中上半部分使用 `UNBOUNDED PRECEDING` 表示起始位置,与 `ROWS` 按行划分不同的是,最后两个元素虽然同时到达,但是他们被划分为一个窗口(图上半部分中的 w4);下半部分使用 `INTERVAL '2' SECOND` 表示起始位置,窗口的起始点是当前元素减去 2 秒,最后两个元素也被划分到了一个窗口(图下半部分中的 w4)。 -总结下来,`RANGE OVER WINDOW`的格式应该按照下面的模式来编写SQL: +总结下来,`RANGE OVER WINDOW` 的格式应该按照下面的模式来编写 SQL: ```sql SELECT @@ -365,7 +393,7 @@ SELECT BETWEEN (UNBOUNDED | timeInterval) PRECEDING AND CURRENT ROW) AS fieldName FROM tab1 --- 使用AS +-- 使用 AS SELECT field1, AGG_FUNCTION(field2) OVER w AS fieldName @@ -380,8 +408,8 @@ WINDOW w AS ( 需要注意: -* `PARTITION BY`是可选的,可以根据一个一到多个字段来对数据进行分组。 -* `ORDER BY`之后必须是一个时间属性,用于对数据进行排序。 -* `RANGE BETWEEN ... AND ...`用来界定窗口的起始结束点。我们可以使用`UNBOUNDED PRECEDING`表示数据流的开始作为起始点,也可以使用一个`timeInterval PRECEDING`来表示当前行之前的某个时间点作为起始点。 +* `PARTITION BY` 是可选的,可以根据一个一到多个字段来对数据进行分组。 +* `ORDER BY` 之后必须是一个时间属性,用于对数据进行排序。 +* `RANGE BETWEEN ... AND ...` 用来界定窗口的起始结束点。我们可以使用 `UNBOUNDED PRECEDING` 表示数据流的开始作为起始点,也可以使用一个 `timeInterval PRECEDING` 来表示当前行之前的某个时间点作为起始点。 -综上,`OVER WINDOW`下,每行数据都生成一个窗口,窗口内的数据聚合后生成一个新字段。窗口的划分可以按行`ROWS`,也可以按时间段`RANGE`。 \ No newline at end of file +综上,`OVER WINDOW` 下,每行数据都生成一个窗口,窗口内的数据聚合后生成一个新字段。窗口的划分可以按行 `ROWS`,也可以按时间段 `RANGE`。 \ No newline at end of file diff --git a/doc/ch-table-sql/system-function.md b/doc/ch-table-sql/system-function.md index a4ca9b9..09b7227 100644 --- a/doc/ch-table-sql/system-function.md +++ b/doc/ch-table-sql/system-function.md @@ -3,7 +3,7 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -13,20 +13,20 @@ ## 函数简介 -Table API & SQL提供给用户强大的操作数据的方法:函数(Function)。对于Function,可以有两种维度来对其分类。 +Table API & SQL 提供给用户强大的操作数据的方法:函数(Function)。对于 Function,可以有两种维度来对其分类。 -第一种维度根据是否为系统内置(System)来分类。System Function是Flink提供的内置函数,在任何地方都可以直接拿来使用。非系统内置函数一般注册到一个Catalog下的Database里,该函数有自己的命名空间(Namespace),表示该函数归属于哪个Catalog和Database。例如,使用名为`func`的函数时需要加上Namespace前缀:`mycatalog.mydb.func`。由于函数被注册到Catalog中,这种函数被称为表目录函数(Catalog Function)。 +第一种维度根据是否为系统内置(System)来分类。System Function 是 Flink 提供的内置函数,在任何地方都可以直接拿来使用。非系统内置函数一般注册到一个 Catalog 下的 Database 里,该函数有自己的命名空间(Namespace),表示该函数归属于哪个 Catalog 和 Database。例如,使用名为 `func` 的函数时需要加上 Namespace 前缀:`mycatalog.mydb.func`。由于函数被注册到 Catalog 中,这种函数被称为表目录函数(Catalog Function)。 -第二种维度根据是否为临时函数来分类。临时函数(Temporary Function)只存在于一个Flink Session中,Session结束后就被销毁,其他Session无法使用。非临时函数,又被成为持久化函数(Persistent Function),可以存在于多个Flink Session中,它可以是一个System Function,也可以是一个Catalog Function。 +第二种维度根据是否为临时函数来分类。临时函数(Temporary Function)只存在于一个 Flink Session 中,Session 结束后就被销毁,其他 Session 无法使用。非临时函数,又被成为持久化函数(Persistent Function),可以存在于多个 Flink Session 中,它可以是一个 System Function,也可以是一个 Catalog Function。 -根据这两个维度,Function可以被划分四类: +根据这两个维度,Function 可以被划分四类: * Temporary System Function * System Function * Temporary Catalog Function * Catalog Function -这些函数可以在Table API中使用Java、Scala或Python语言调用,也可以在Flink SQL中以SQL语句的形式调用。这里以SQL为例来介绍如何使用这些函数。绝大多数System Function已经内置在Table API & SQL中,它们也是Persistent Function,本节将主要介绍这部分内容,下节将介绍Catalog Function。由于System Function较多,这里只介绍一些常用的函数并提供一些例子,其他函数的具体使用方法可以参考Flink的官方文档。 +这些函数可以在 Table API 中使用 Java、Scala 或 Python 语言调用,也可以在 Flink SQL 中以 SQL 语句的形式调用。这里以 SQL 为例来介绍如何使用这些函数。绝大多数 System Function 已经内置在 Table API & SQL 中,它们也是 Persistent Function,本节将主要介绍这部分内容,下节将介绍 Catalog Function。由于 System Function 较多,这里只介绍一些常用的函数并提供一些例子,其他函数的具体使用方法可以参考 Flink 的官方文档。 ## 标量函数 @@ -36,34 +36,34 @@ Table API & SQL提供给用户强大的操作数据的方法:函数(Function * `value1 = value2` -如果`value1`和`value2`相等,返回`TRUE`;如果`value1`或`value2`任何一个值为`NULL`,返回`UNKNOWN`。 +如果 `value1` 和 `value2` 相等,返回 `TRUE`;如果 `value1` 或 `value2` 任何一个值为 `NULL`,返回 `UNKNOWN`。 * `value1 <> value2` -如果`value1`和`value2`不相等,返回`TRUE`;如果`value1`或`value2`任何一个值为`NULL`,返回`UNKNOWN`。 +如果 `value1` 和 `value2` 不相等,返回 `TRUE`;如果 `value1` 或 `value2` 任何一个值为 `NULL`,返回 `UNKNOWN`。 * `value1 >= value2` -如果`value1`大于等于`value2`,返回`TRUE`;如果`value1`或`value2`任何一个值为`NULL`,返回`UNKNOWN`。其他`>`、`<`、<`=`比较函数与此相似。 -* `value IS NULL`和`value IS NOT NULL` +如果 `value1` 大于等于 `value2`,返回 `TRUE`;如果 `value1` 或 `value2` 任何一个值为 `NULL`,返回 `UNKNOWN`。其他 `>`、`<`、<`=` 比较函数与此相似。 +* `value IS NULL` 和 `value IS NOT NULL` -判断`value`是否为`NULL`。 -* `value1 BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3` +判断 `value` 是否为 `NULL`。 +* `value1 BETWEEN [ASYMMETRIC | SYMMETRIC] value2 AND value3` -判断`value1`是否在一个区间。支持`DOUBLE`、`BIGINT`、`INT`、`VARCHAR`、`DATE`、`TIMESTAMP`、`TIME`这些类型。 +判断 `value1` 是否在一个区间。支持 `DOUBLE`、`BIGINT`、`INT`、`VARCHAR`、`DATE`、`TIMESTAMP`、`TIME` 这些类型。 -例如,`12 BETWEEN 15 AND 12`返回`FALSE`,`12 BETWEEN SYMMETRIC 15 AND 12` returns `TRUE`。`SYMMETRIC`表示包含区间边界。`value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3`与之相似。 +例如,`12 BETWEEN 15 AND 12` 返回 `FALSE`,`12 BETWEEN SYMMETRIC 15 AND 12` returns `TRUE`。`SYMMETRIC` 表示包含区间边界。`value1 NOT BETWEEN [ASYMMETRIC | SYMMETRIC] value2 AND value3` 与之相似。 * `string1 LIKE string2` -如果`string1`符合`string2`的模板,返回`TRUE`。`LIKE`主要用于字符串匹配,`string2`中可以使用 `%`来定义通配符。例如,`'TEST' LIKE '%EST'`返回`TRUE`。`string1 NOT LIKE string2`与之类似。 +如果 `string1` 符合 `string2` 的模板,返回 `TRUE`。`LIKE` 主要用于字符串匹配,`string2` 中可以使用 `%` 来定义通配符。例如,`'TEST' LIKE '%EST'` 返回 `TRUE`。`string1 NOT LIKE string2` 与之类似。 * `string1 SIMILAR TO string2` -如果`string1`符合SQL正则表达式`string2`,返回`TRUE`。例如,`'TEST' SIMILAR TO '.EST'`返回`TRUE`。`string1 NOT SIMILAR TO string2`与之类似。 +如果 `string1` 符合 SQL 正则表达式 `string2`,返回 `TRUE`。例如,`'TEST' SIMILAR TO '.EST'` 返回 `TRUE`。`string1 NOT SIMILAR TO string2` 与之类似。 -* `value1 IN (value2 [, value3]* )`:如果`value1`在列表中,列表包括`value2`、`value3`等元素,返回`TRUE`。例如,`'TEST' IN ('west', 'TEST', 'rest')`返回`TRUE`;`'TEST' IN ('west', 'rest')`返回`FALSE`。`value1 NOT IN (value2 [, value3]* )`与之类似。 +* `value1 IN (value2 [, value3]* )`:如果 `value1` 在列表中,列表包括 `value2`、`value3` 等元素,返回 `TRUE`。例如,`'TEST' IN ('west', 'TEST', 'rest')` 返回 `TRUE`;`'TEST' IN ('west', 'rest')` 返回 `FALSE`。`value1 NOT IN (value2 [, value3]* )` 与之类似。 -* `EXISTS (sub-query)`:如果子查询有至少一行结果,返回`TRUE`。例如,下面的SQL语句使用了`EXISTS`,实际上起到了Join的作用: +* `EXISTS (sub-query)`:如果子查询有至少一行结果,返回 `TRUE`。例如,下面的 SQL 语句使用了 `EXISTS`,实际上起到了 Join 的作用: ```sql SELECT * @@ -71,7 +71,7 @@ FROM l WHERE EXISTS (select * from r where l.a = r.c) ``` -* `value IN (sub-query)`:如果`value`等于子查询中的一行结果,返回`TRUE`。`value NOT IN (sub-query)`与之类似。例如: +* `value IN (sub-query)`:如果 `value` 等于子查询中的一行结果,返回 `TRUE`。`value NOT IN (sub-query)` 与之类似。例如: ```sql SELECT * @@ -80,26 +80,26 @@ WHERE a IN (SELECT c FROM r) ``` :::note -在流处理模式下,`EXISTS(sub-query)`和`value IN (sub-query)`都需要使用状态进行计算,我们必须确保配置了状态过期时间,否则状态可能会无限增大。 +在流处理模式下,`EXISTS(sub-query)` 和 `value IN (sub-query)` 都需要使用状态进行计算,我们必须确保配置了状态过期时间,否则状态可能会无限增大。 ::: ### 逻辑函数 * `boolean1 OR boolean2` -如果`boolean1`或`boolean2`任何一个为`TRUE`,返回`TRUE`。 +如果 `boolean1` 或 `boolean2` 任何一个为 `TRUE`,返回 `TRUE`。 * `boolean1 AND boolean2` -如果`boolean1`和`boolean2`都为`TRUE`,返回`TRUE`。 +如果 `boolean1` 和 `boolean2` 都为 `TRUE`,返回 `TRUE`。 * `NOT boolean` -如果`boolean`为`TRUE`,返回`FALSE`;`boolean`为`FALSE`,返回`TRUE`。 +如果 `boolean` 为 `TRUE`,返回 `FALSE`;`boolean` 为 `FALSE`,返回 `TRUE`。 -* `boolean IS FALSE`、`boolean IS TRUE`和`boolean IS UNKNOWN` +* `boolean IS FALSE`、`boolean IS TRUE` 和 `boolean IS UNKNOWN` -根据`boolean`结果,判断是否为`FALSE`、`TRUE`或者`UNKNOWN`。`boolean IS NOT FALSE`等与之类似。 +根据 `boolean` 结果,判断是否为 `FALSE`、`TRUE` 或者 `UNKNOWN`。`boolean IS NOT FALSE` 等与之类似。 ### 数学函数 @@ -114,34 +114,34 @@ FROM tab * `ABS(numeric)` -返回`numeric`的绝对值。 +返回 `numeric` 的绝对值。 * `MOD(numeric1, numeric2)` -余数函数,`numeric1`除以`numeric2`,返回余数。 +余数函数,`numeric1` 除以 `numeric2`,返回余数。 * `SQRT(numeric)` -平方根函数,返回`numeric`的平方根。 +平方根函数,返回 `numeric` 的平方根。 -* `LN(numeric)`、`LOG10(numeric)`和`LOG2(numeric)` +* `LN(numeric)`、`LOG10(numeric)` 和 `LOG2(numeric)` -对数函数,返回`numeric`的对数,分别以e为底、以10为底和以2为底。 +对数函数,返回 `numeric` 的对数,分别以 e 为底、以 10 为底和以 2 为底。 * `EXP(numeric)` -指数函数,返回以e为底`numeric`的指数。 +指数函数,返回以 e 为底 `numeric` 的指数。 -* `SIN(numeric)`、`COS(numeric)`等 +* `SIN(numeric)`、`COS(numeric)` 等 -三角函数,包括`SIN`、`COS`、`TAN`等。 +三角函数,包括 `SIN`、`COS`、`TAN` 等。 * `RAND()` -返回0到1之间的一个伪随机数。 +返回 0 到 1 之间的一个伪随机数。 -* `CEIL(numeric)`和`FLOOR(numeric)` +* `CEIL(numeric)` 和 `FLOOR(numeric)` 向上和向下取整。 @@ -155,31 +155,31 @@ FROM tab 连接多个字符串。 -* `CHAR_LENGTH(string)`和`CHARACTER_LENGTH(string)` +* `CHAR_LENGTH(string)` 和 `CHARACTER_LENGTH(string)` -返回字符串`string`的长度。 +返回字符串 `string` 的长度。 -* `SUBSTRING(string FROM start [ FOR length ])` +* `SUBSTRING(string FROM start [ FOR length])` -对字符串做截断,返回`string`的一部分,从`start`位置开始,默认到字符串结尾结束,填写`length`参数后,字符串截断到`length`长度。 +对字符串做截断,返回 `string` 的一部分,从 `start` 位置开始,默认到字符串结尾结束,填写 `length` 参数后,字符串截断到 `length` 长度。 * `POSITION(string1 IN string2)` -返回`string1`在`string2`中第一次出现的位置,如果未曾出现则返回0。 +返回 `string1` 在 `string2` 中第一次出现的位置,如果未曾出现则返回 0。 -* `TRIM([ BOTH | LEADING | TRAILING ] string1 FROM string2)` +* `TRIM([BOTH | LEADING | TRAILING] string1 FROM string2)` -将`string2`中出现的`string1`移除。`BOTH`选项表示移除左右两侧的字符串。一般情况下,如果不指定`string1`,默认移除空格。例如,`TRIM(LEADING 'x' FROM 'xxxxSTRINGxxxx')`返回`STRINGxxxx`。 +将 `string2` 中出现的 `string1` 移除。`BOTH` 选项表示移除左右两侧的字符串。一般情况下,如果不指定 `string1`,默认移除空格。例如,`TRIM(LEADING 'x' FROM 'xxxxSTRINGxxxx')` 返回 `STRINGxxxx`。 * `REGEXP_REPLACE(string1, string2, string3)` -替换函数,将`string1`中符合正则表达式`string2`的字符全替换为`string3`。例如,`REGEXP_REPLACE('foobar', 'oo|ar', '')`移除了正则表达式`oo|ar`,返回`fb`。 +替换函数,将 `string1` 中符合正则表达式 `string2` 的字符全替换为 `string3`。例如,`REGEXP_REPLACE('foobar', 'oo|ar', '')` 移除了正则表达式 `oo|ar`,返回 `fb`。 ### 时间函数 -* `DATE string`、`TIME string`和`TIMESTAMP string` +* `DATE string`、`TIME string` 和 `TIMESTAMP string` -将字符串`string`转换为`java.sql.Date`、`java.sql.Time`或`java.sql.Timestamp`。我们可以在`WHERE`语句中做过滤: +将字符串 `string` 转换为 `java.sql.Date`、`java.sql.Time` 或 `java.sql.Timestamp`。我们可以在 `WHERE` 语句中做过滤: ```sql SELECT * FROM tab @@ -188,7 +188,7 @@ AND c = TIME '14:34:24' AND d = TIMESTAMP '1984-07-12 14:34:24 ``` -或者应用在`SELECT`语句中: +或者应用在 `SELECT` 语句中: ```sql SELECT a, b, c, @@ -200,33 +200,33 @@ FROM tab * `LOCALTIME`、`LOCALTIMESTAMP` -返回当前本地时间,格式为`java.sql.Time`和`java.sql.Timestamp`。 +返回当前本地时间,格式为 `java.sql.Time` 和 `java.sql.Timestamp`。 -* `YEAR(date)`、`MONTH(date)`和`DAYOFWEEK(date)`等 +* `YEAR(date)`、`MONTH(date)` 和 `DAYOFWEEK(date)` 等 -将`java.sql.Date`转化为年月日。例如,`YEAR(DATE '1994-09-27')`返回为1994,`MONTH(DATE '1994-09-27')`返回为9,`DAYOFYEAR(DATE '1994-09-27')`返回为270。 +将 `java.sql.Date` 转化为年月日。例如,`YEAR(DATE '1994-09-27')` 返回为 1994,`MONTH(DATE '1994-09-27')` 返回为 9,`DAYOFYEAR(DATE '1994-09-27')` 返回为 270。 -* `HOUR(timestamp)`、`MINUTE(timestamp)`和`SECOND(timestamp)` +* `HOUR(timestamp)`、`MINUTE(timestamp)` 和 `SECOND(timestamp)` -将`java.sql.Timestamp`转化为时分秒。例如,`HOUR(TIMESTAMP '1994-09-27 13:14:15')`返回13,`MINUTE(TIMESTAMP '1994-09-27 13:14:15')`返回14。 +将 `java.sql.Timestamp` 转化为时分秒。例如,`HOUR(TIMESTAMP '1994-09-27 13:14:15')` 返回 13,`MINUTE(TIMESTAMP '1994-09-27 13:14:15')` 返回 14。 -* `FLOOR(timepoint TO timeintervalunit)`和`CEIL(timepoint TO timeintervalunit)` +* `FLOOR(timepoint TO timeintervalunit)` 和 `CEIL(timepoint TO timeintervalunit)` -向下和向上取整。例如,`FLOOR(TIME '12:44:31' TO MINUTE)`返回12:44:00,`CEIL(TIME '12:44:31' TO MINUTE)`返回12:45:00。 +向下和向上取整。例如,`FLOOR(TIME '12:44:31' TO MINUTE)` 返回 12:44:00,`CEIL(TIME '12:44:31' TO MINUTE)` 返回 12:45:00。 ### 判断函数 * `CASE ... WHEN ... END` -类似很多编程语言提供的`switch ... case ...`判断逻辑。在Flink SQL中可以对某个字段进行判断,其模板为: +类似很多编程语言提供的 `switch ... case ...` 判断逻辑。在 Flink SQL 中可以对某个字段进行判断,其模板为: ```sql CASE value - WHEN value1_1 [, value1_2 ]* THEN result1 - [ WHEN value2_1 [, value2_2 ]* THEN result2 ]* - [ ELSE resultZ ] + WHEN value1_1 [, value1_2]* THEN result1 + [WHEN value2_1 [, value2_2]* THEN result2 ]* + [ELSE resultZ] END ``` -例如,对表中字段`a`进行判断,生成一个新字段`correct`,SQL语句可以写为: +例如,对表中字段 `a` 进行判断,生成一个新字段 `correct`,SQL 语句可以写为: ```sql SELECT @@ -242,12 +242,12 @@ FROM tab ```sql CASE WHEN condition1 THEN result1 - [ WHEN condition2 THEN result2 ]* - [ ELSE resultZ ] + [WHEN condition2 THEN result2]* + [ELSE resultZ] END ``` -例如,对表中字段`c`进行`c > 0`的判断,为`TRUE`时生成`b`,SQL语句可以写为: +例如,对表中字段 `c` 进行 `c > 0` 的判断,为 `TRUE` 时生成 `b`,SQL 语句可以写为: ```sql SELECT @@ -262,7 +262,7 @@ FROM tab * `CAST(value AS type)` -将字段`value`转化为类型`type`。例如,`int1`字段原本为`INT`,现将其转化为`DOUBLE`: +将字段 `value` 转化为类型 `type`。例如,`int1` 字段原本为 `INT`,现将其转化为 `DOUBLE`: ```sql SELECT CAST(int1 AS DOUBLE) as aa @@ -271,9 +271,9 @@ FROM tab ### 集合函数 -* `ARRAY ‘[’ value1 [, value2 ]* ‘]’` +* `ARRAY ‘[’ value1 [, value2]* ‘]’` -将多个字段连接成一个列表。例如,某表中两个字段`a`和`b`均为`INT`类型,将其连接到一起,后面再添加一个数字99: +将多个字段连接成一个列表。例如,某表中两个字段 `a` 和 `b` 均为 `INT` 类型,将其连接到一起,后面再添加一个数字 99: ```sql SELECT @@ -292,32 +292,32 @@ FROM ( ) ``` -`ARRAY[a, b, 99]`创建一个3个字段组成的列表,`CARDINALITY(arr) `返回值为3。 +`ARRAY[a, b, 99]` 创建一个 3 个字段组成的列表,`CARDINALITY(arr) ` 返回值为 3。 ## 聚合函数 -在[窗口](sql-window)部分我们重点讲解了`GROUP BY`和`OVER WINDOW`的窗口划分方式,聚合函数一般应用在窗口上,对窗口内的多行数据进行处理,并生成一个聚合后的结果。 +在 [窗口](sql-window) 部分我们重点讲解了 `GROUP BY` 和 `OVER WINDOW` 的窗口划分方式,聚合函数一般应用在窗口上,对窗口内的多行数据进行处理,并生成一个聚合后的结果。 -* `COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*)` +* `COUNT([ALL] expression | DISTINCT expression1 [, expression2]*)` -返回行数,默认情况下是开启了`ALL`选项,即返回所有行。使用`DISTINCT`选项后,对数据做去重处理。 +返回行数,默认情况下是开启了 `ALL` 选项,即返回所有行。使用 `DISTINCT` 选项后,对数据做去重处理。 -* `AVG([ ALL | DISTINCT ] expression)` +* `AVG([ALL | DISTINCT] expression)` -返回平均值,默认情况下开启了`ALL`选项。使用`DISTINCT`选项后,对数据做去重处理。 +返回平均值,默认情况下开启了 `ALL` 选项。使用 `DISTINCT` 选项后,对数据做去重处理。 -* `SUM([ ALL | DISTINCT ] expression)` +* `SUM([ALL | DISTINCT] expression)` -对数据求和,默认情况下开启了`ALL`选项。使用`DISTINCT`选项后,对数据做去重处理。 +对数据求和,默认情况下开启了 `ALL` 选项。使用 `DISTINCT` 选项后,对数据做去重处理。 -* `MAX([ ALL | DISTINCT ] expression)`和`MIN([ ALL | DISTINCT ] expression)` +* `MAX([ALL | DISTINCT] expression)` 和 `MIN([ ALL | DISTINCT] expression)` -求数据中的最大值/最小值,默认情况下开启了`ALL`选项。使用`DISTINCT`选项后,对数据做去重处理。 +求数据中的最大值 / 最小值,默认情况下开启了 `ALL` 选项。使用 `DISTINCT` 选项后,对数据做去重处理。 -* `STDDEV_POP([ ALL | DISTINCT ] expression)` +* `STDDEV_POP([ALL | DISTINCT] expression)` -求数据总体的标准差,默认情况下开启了`ALL`选项。使用`DISTINCT`选项后,对数据做去重处理。 +求数据总体的标准差,默认情况下开启了 `ALL` 选项。使用 `DISTINCT` 选项后,对数据做去重处理。 ## 时间单位 -一些时间相关计算需要使用时间单位,常见的有`YEAR`、`MONTH`、`WEEK`、`DAY`、`HOUR`、`MINUTE`和`SECOND`等。 \ No newline at end of file +一些时间相关计算需要使用时间单位,常见的有 `YEAR`、`MONTH`、`WEEK`、`DAY`、`HOUR`、`MINUTE` 和 `SECOND` 等。 \ No newline at end of file diff --git a/doc/ch-table-sql/table-overview.md b/doc/ch-table-sql/table-overview.md index 668e28e..478a6eb 100644 --- a/doc/ch-table-sql/table-overview.md +++ b/doc/ch-table-sql/table-overview.md @@ -1,41 +1,41 @@ (table-overview)= -# Table API & SQL综述 +# Table API & SQL 综述 :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -Table API和SQL两者结合非常紧密,它们的API与关系型数据库中查询非常相似,本质上它们都依赖于一个像数据表的结构:`Table`。 +Table API 和 SQL 两者结合非常紧密,它们的 API 与关系型数据库中查询非常相似,本质上它们都依赖于一个像数据表的结构:`Table`。 -在具体执行层面,Flink将Table API或SQL语句使用一个名为执行计划器(Planner)的组件将关系型查询转换为可执行的Flink作业,并对作业进行一些优化。在本书写作期间出现了阿里巴巴的Blink版本的Planner(或者称为Blink Planner)和Flink社区版本的老Planner(或者称为Flink Planner、Old Planner)并存的现象,Flink社区正在进行这方面的迭代和融合。从名称中可以看出,Blink Planner未来将逐步取代Flink Planner,读者可以根据需求来确定使用哪种Planner。同时,Table API & SQL的迭代速度较快,读者可以根据Flink官方文档查询最新的使用方法。 +在具体执行层面,Flink 将 Table API 或 SQL 语句使用一个名为执行计划器(Planner)的组件将关系型查询转换为可执行的 Flink 作业,并对作业进行一些优化。在本书写作期间出现了阿里巴巴的 Blink 版本的 Planner(或者称为 Blink Planner)和 Flink 社区版本的老 Planner(或者称为 Flink Planner、Old Planner)并存的现象,Flink 社区正在进行这方面的迭代和融合。从名称中可以看出,Blink Planner 未来将逐步取代 Flink Planner,读者可以根据需求来确定使用哪种 Planner。同时,Table API & SQL 的迭代速度较快,读者可以根据 Flink 官方文档查询最新的使用方法。 -本节主要介绍Table API & SQL程序的骨架结构以及如何连接外部系统。 +本节主要介绍 Table API & SQL 程序的骨架结构以及如何连接外部系统。 -## Table API & SQL程序骨架结构 +## Table API & SQL 程序骨架结构 -下面的代码展示了Table API & SQL的骨架结构: +下面的代码展示了 Table API & SQL 的骨架结构: ```java -// 基于StreamExecutionEnvironment创建TableEnvironment +// 基于 StreamExecutionEnvironment 创建 TableEnvironment StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env); -// 读取数据源,创建数据表Table +// 读取数据源,创建数据表 Table tableEnv.connect(...).createTemporaryTable("user_behavior"); -// 注册输出数据表Table +// 注册输出数据表 Table tableEnv.connect(...).createTemporaryTable("output_table"); -// 使用Table API查询user_behavior +// 使用 Table API 查询 user_behavior Table tabApiResult = tableEnv.from("user_behavior").select(...); -// 使用SQL查询table1 +// 使用 SQL 查询 table1 Table sqlResult = tableEnv.sqlQuery("SELECT ... FROM user_behavior ... "); -// 将查询结果输出到outputTable +// 将查询结果输出到 outputTable tabApiResult.insertInto("output_table"); sqlResult.insertInto("output_table"); @@ -43,15 +43,15 @@ sqlResult.insertInto("output_table"); tableEnv.execute("table"); ``` -从程序骨架结构上来看,目前的Table API & SQL要与DataStream/DataSet API相结合来使用,主要需要以下步骤: +从程序骨架结构上来看,目前的 Table API & SQL 要与 DataStream/DataSet API 相结合来使用,主要需要以下步骤: 1. 创建执行环境(ExecutionEnvironment)和表环境(TableEnvironment) -2. 获取数据表`Table` -3. 使用Table API或SQL在`Table`上做查询等操作 +2. 获取数据表 `Table` +3. 使用 Table API 或 SQL 在 `Table` 上做查询等操作 4. 将结果输出到外部系统 -5. 调用`execute()`,执行作业 +5. 调用 `execute()`,执行作业 -在真正编写一个作业之前,我们还需要在Maven中添加相应的依赖。根据用户选择Java还是Scala,需要引用`flink-table-api-*-bridge`项目,这个项目是Table API与DataStream/DataSet API之间的桥梁。 +在真正编写一个作业之前,我们还需要在 Maven 中添加相应的依赖。根据用户选择 Java 还是 Scala,需要引用 `flink-table-api-*-bridge` 项目,这个项目是 Table API 与 DataStream/DataSet API 之间的桥梁。 ``` @@ -70,17 +70,17 @@ tableEnv.execute("table"); ``` -此外,还需要添加Planner相关依赖: +此外,还需要添加 Planner 相关依赖: ``` - + org.apache.flink flink-table-planner_${scala.binary.version} ${flink.version} provided - + org.apache.flink flink-table-planner-blink_${scala.binary.version} @@ -89,67 +89,74 @@ tableEnv.execute("table"); ``` -其中,`${scala.binary.version}`是你所在环境中Scala的版本号,可以是2.11或2.12,`{flink.version}`是所采用的Flink版本号。Maven的配置和参数可以参考本书提供的样例程序中的`pom.xml`文件。 +其中,`${scala.binary.version}` 是你所在环境中 Scala 的版本号,可以是 2.11 或 2.12,`{flink.version}` 是所采用的 Flink 版本号。Maven 的配置和参数可以参考本书提供的样例程序中的 `pom.xml` 文件。 -## 创建TableEnvironment +## 创建 TableEnvironment -`TableEnvironment`是Table API & SQL编程中最基础的类,也是整个程序的入口,它包含了程序的核心上下文信息。`TableEnvironment`的核心功能包括: +`TableEnvironment` 是 Table API & SQL 编程中最基础的类,也是整个程序的入口,它包含了程序的核心上下文信息。`TableEnvironment` 的核心功能包括: * 连接外部系统 -* 向目录(Catalog)中注册`Table`或者从中获取`Table` -* 执行Table API或SQL操作 +* 向目录(Catalog)中注册 `Table` 或者从中获取 `Table` +* 执行 Table API 或 SQL 操作 * 注册用户自定义函数 * 提供一些其他配置功能 -在Flink社区对未来的规划中,`TableEnvironment`将统一流批处理,兼容Java和Scala两种语言。我们在第四章Flink的骨架结构中曾提到,在Flink 1.10中,针对流处理和批处理分别使用了`StreamExecutionEnvironment`和`ExecutionEnvironment`两套执行环境,底层有些逻辑还没完全统一,加上Java和Scala两种语言的区别,仅执行环境就四种之多。在Table API & SQL中,`TableEnvironment`也没有完全将上述问题统一,再加上Blink Planner与原有老Planner的区别,读者在编程时一定要注意如何初始化的`TableEnvironment`。 +在 Flink 社区对未来的规划中,`TableEnvironment` 将统一流批处理,兼容 Java 和 Scala 两种语言。我们在第四章 Flink 的骨架结构中曾提到,在 Flink 1.10 中,针对流处理和批处理分别使用了 `StreamExecutionEnvironment` 和 `ExecutionEnvironment` 两套执行环境,底层有些逻辑还没完全统一,加上 Java 和 Scala 两种语言的区别,仅执行环境就四种之多。在 Table API & SQL 中,`TableEnvironment` 也没有完全将上述问题统一,再加上 Blink Planner 与原有老 Planner 的区别,读者在编程时一定要注意如何初始化的 `TableEnvironment`。 -![Flink 1.10中保留了5个TableEnvironment](./img/environment.png) +```{figure} ./img/environment.png +--- +name: fig-flink-table-environment +width: 80% +align: center +--- +Flink 1.10 中保留了 5 个 TableEnvironment +``` -从上图中可以看到,Flink 1.10保留了5个`TableEnvironment`。其中,`TableEnvironment`是最顶级的接口,`StreamTableEnvironment`和`BatchTableEnvironment`都提供了Java和Scala两个实现: +从 {numref}`fig-flink-table-environment` 中可以看到,Flink 1.10 保留了 5 个 `TableEnvironment`。其中,`TableEnvironment` 是最顶级的接口,`StreamTableEnvironment` 和 `BatchTableEnvironment` 都提供了 Java 和 Scala 两个实现: -* `org.apache.flink.table.api.TableEnvironment`:兼容Java和Scala,统一流批处理,适用于整个作业都使用 Table API & SQL 编写程序的场景。 -* `org.apache.flink.table.api.java.StreamTableEnvironment`和`org.apache.flink.table.api.scala.StreamTableEnvironment`:分别用于Java和Scala的流处理场景,提供了`DataStream`和`Table`之间相互转换的接口。如果作业除了基于Table API & SQL外,还有和`DataStream`之间的转化,则需要使用`StreamTableEnvironment`。 -* `org.apache.flink.table.api.java.BatchTableEnvironment`和`org.apache.flink.table.api.scala.BatchTableEnvironment`:分别用于Java和Scala的批处理场景,提供了`DataSet`和`Table`之间相互转换的接口。如果作业除了基于Table API & SQL外,还有和`DataSet`之间的转化,则使用`BatchTableEnvironment`。 +* `org.apache.flink.table.api.TableEnvironment`:兼容 Java 和 Scala,统一流批处理,适用于整个作业都使用 Table API & SQL 编写程序的场景。 +* `org.apache.flink.table.api.java.StreamTableEnvironment` 和 `org.apache.flink.table.api.scala.StreamTableEnvironment`:分别用于 Java 和 Scala 的流处理场景,提供了 `DataStream` 和 `Table` 之间相互转换的接口。如果作业除了基于 Table API & SQL 外,还有和 `DataStream` 之间的转化,则需要使用 `StreamTableEnvironment`。 +* `org.apache.flink.table.api.java.BatchTableEnvironment` 和 `org.apache.flink.table.api.scala.BatchTableEnvironment`:分别用于 Java 和 Scala 的批处理场景,提供了 `DataSet` 和 `Table` 之间相互转换的接口。如果作业除了基于 Table API & SQL 外,还有和 `DataSet` 之间的转化,则使用 `BatchTableEnvironment`。 -下面的代码使用Java语言进行流处理,它基于老Planner创建`TableEnvironment`。 +下面的代码使用 Java 语言进行流处理,它基于老 Planner 创建 `TableEnvironment`。 ```java -// 使用Java和老Planner进行流处理 +// 使用 Java 和老 Planner 进行流处理 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.java.StreamTableEnvironment; -// 使用老Planner注意相应的Planner包要加入到Maven中 +// 使用老 Planner 注意相应的 Planner 包要加入到 Maven 中 EnvironmentSettings fsSettings = EnvironmentSettings.newInstance().useOldPlanner().inStreamingMode().build(); -// 基于StreamExecutionEnvironment创建StreamTableEnvironment +// 基于 StreamExecutionEnvironment 创建 StreamTableEnvironment StreamExecutionEnvironment fsEnv = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment fsTableEnv = StreamTableEnvironment.create(fsEnv, fsSettings); -// 或者基于TableEnvironment +// 或者基于 TableEnvironment TableEnvironment fsTableEnv = TableEnvironment.create(fsSettings); ``` -如果想基于Blink Planner进行流处理,那么需要改为: +如果想基于 Blink Planner 进行流处理,那么需要改为: ```java -// 使用Java和Blink Planner进行流处理 +// 使用 Java 和 Blink Planner 进行流处理 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.java.StreamTableEnvironment; -// 使用Blink Planner注意相应的Planner包要加入到Maven中 +// 使用 Blink Planner 注意相应的 Planner 包要加入到 Maven 中 EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build(); -// 基于StreamExecutionEnvironment创建StreamTableEnvironment +// 基于 StreamExecutionEnvironment 创建 StreamTableEnvironment StreamExecutionEnvironment bsEnv = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment bsTableEnv = StreamTableEnvironment.create(bsEnv, bsSettings); -// 或者基于TableEnvironment +// 或者基于 TableEnvironment TableEnvironment bsTableEnv = TableEnvironment.create(bsSettings); ``` -如果想基于老Planner进行批处理: +如果想基于老 Planner 进行批处理: ```java -// 使用Java和老Planner进行批处理 +// 使用 Java 和老 Planner 进行批处理 import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.table.api.java.BatchTableEnvironment; @@ -157,10 +164,10 @@ ExecutionEnvironment fbEnv = ExecutionEnvironment.getExecutionEnvironment(); BatchTableEnvironment fbTableEnv = BatchTableEnvironment.create(fbEnv); ``` -基于Blink Planner进行批处理: +基于 Blink Planner 进行批处理: ```java -// 使用Java和Blink Planner进行批处理 +// 使用 Java 和 Blink Planner 进行批处理 import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.TableEnvironment; @@ -168,11 +175,11 @@ EnvironmentSettings bbSettings = EnvironmentSettings.newInstance().useBlinkPlann TableEnvironment bbTableEnv = TableEnvironment.create(bbSettings); ``` -总结下来,使用Table API & SQL之前,要确定使用何种编程语言(Java/Scala),进行批处理还是流处理以及使用哪种Planner。 +总结下来,使用 Table API & SQL 之前,要确定使用何种编程语言(Java/Scala),进行批处理还是流处理以及使用哪种 Planner。 -## 获取Table +## 获取 Table -在关系型数据库中,表是描述数据的基本单元。数据库表一般由行和列组成,如果以电商用户行为数据为例,我们可以将这张表理解为一个Excel表格,每一列代表一种属性,比如`user_id`、`behavior`等,每一行表示一个用户的一次行为,比如某个用户在哪个时间对哪些商品产生了哪些行为。我们一般用表模式(Schema)来描述一个表中有哪些列,这些列的数据类型。例如,我们定义电商用户行为的Schema为: +在关系型数据库中,表是描述数据的基本单元。数据库表一般由行和列组成,如果以电商用户行为数据为例,我们可以将这张表理解为一个 Excel 表格,每一列代表一种属性,比如 `user_id`、`behavior` 等,每一行表示一个用户的一次行为,比如某个用户在哪个时间对哪些商品产生了哪些行为。我们一般用表模式(Schema)来描述一个表中有哪些列,这些列的数据类型。例如,我们定义电商用户行为的 Schema 为: ```java Schema schema = new Schema() @@ -183,56 +190,56 @@ Schema schema = new Schema() .field("ts", DataTypes.TIMESTAMP(3)); ``` -在传统的关系型数据库中,数据库表一般由开发者定义好,在后续对外地提供服务过程中,表是常驻数据库的,开发者不断在表上进行增删查改。在数据分析领域,表的概念被拓展,表不仅包括了关系型数据库中传统意义上的表,也包括了存储数据的文件,可以传输数据的消息队列等。Flink是一个计算引擎,它不提供数据存储的功能,但是可以通过Connector去连接不同的外部系统。为了基于外部数据进行Table API & SQL计算,Flink使用`Table`的概念表示广义上的表。它包括物理上确实存在的表,也包括基于物理表经过一些计算而生成的虚拟表,虚拟表又被称为视图(View)。 +在传统的关系型数据库中,数据库表一般由开发者定义好,在后续对外地提供服务过程中,表是常驻数据库的,开发者不断在表上进行增删查改。在数据分析领域,表的概念被拓展,表不仅包括了关系型数据库中传统意义上的表,也包括了存储数据的文件,可以传输数据的消息队列等。Flink 是一个计算引擎,它不提供数据存储的功能,但是可以通过 Connector 去连接不同的外部系统。为了基于外部数据进行 Table API & SQL 计算,Flink 使用 `Table` 的概念表示广义上的表。它包括物理上确实存在的表,也包括基于物理表经过一些计算而生成的虚拟表,虚拟表又被称为视图(View)。 -可见,如果想在Flink中使用`Table`来查询数据,最重要的一步是将数据(数据库、文件或消息队列)读取并转化成一个`Table`。我们可以在一个Flink作业运行时注册一个新的`Table`,也可以获取已创建好的常驻集群的`Table`。在每个Flink作业启动后临时创建的表是临时表(Temporary Table),随着这个Flink作业的结束,这种表也被销毁,它只能在一个Flink Session中使用。在骨架程序中`tableEnv.connect(...).createTemporaryTable("user_behavior");`就是创建了一个Temporary Table。但是更多的情况下,我们想跟传统的数据库那样提前创建好表,这些表后续可以为整个集群上的所有用户和所有作业提供服务,这种表被称为常驻表(Permanent Table)。Permanent Table可以在多个Flink Session中使用。 +可见,如果想在 Flink 中使用 `Table` 来查询数据,最重要的一步是将数据(数据库、文件或消息队列)读取并转化成一个 `Table`。我们可以在一个 Flink 作业运行时注册一个新的 `Table`,也可以获取已创建好的常驻集群的 `Table`。在每个 Flink 作业启动后临时创建的表是临时表(Temporary Table),随着这个 Flink 作业的结束,这种表也被销毁,它只能在一个 Flink Session 中使用。在骨架程序中 `tableEnv.connect(...).createTemporaryTable("user_behavior");` 就是创建了一个 Temporary Table。但是更多的情况下,我们想跟传统的数据库那样提前创建好表,这些表后续可以为整个集群上的所有用户和所有作业提供服务,这种表被称为常驻表(Permanent Table)。Permanent Table 可以在多个 Flink Session 中使用。 -为了管理多个Permanent Table,Flink使用Catalog来维护多个Permanent Table的名字、类型(文件、消息队列或数据库)、数据存储位置等元数据(Metadata)信息。一个Flink作业可以连接某个Catalog,这样就可以直接读取其中的各个表,生成`Table`。有了Catalog功能,数据管理团队对数据源更了解,他们可以提前在Catalog中创建Permanent Table,注册好该表的Schema、注明该表使用何种底层技术、写明数据存储位置等;数据分析团队可以完全不用关心这些元数据信息,无需了解这个表到底是存储在Kafka还是HDFS,直接在这个表上进行查询。 +为了管理多个 Permanent Table,Flink 使用 Catalog 来维护多个 Permanent Table 的名字、类型(文件、消息队列或数据库)、数据存储位置等元数据(Metadata)信息。一个 Flink 作业可以连接某个 Catalog,这样就可以直接读取其中的各个表,生成 `Table`。有了 Catalog 功能,数据管理团队对数据源更了解,他们可以提前在 Catalog 中创建 Permanent Table,注册好该表的 Schema、注明该表使用何种底层技术、写明数据存储位置等;数据分析团队可以完全不用关心这些元数据信息,无需了解这个表到底是存储在 Kafka 还是 HDFS,直接在这个表上进行查询。 本节后续部分将介绍注册表的几种常见方式。 -## 在Table上执行语句 +## 在 Table 上执行语句 ### Table API -基于`Table`,我们可以调用Table API或者SQL来查询其中的数据。Table API和编程语言结合更紧密,我们可以在`Table`类上使用链式调用,调用`Table`类中的各种方法,执行各类关系型操作。下面的代码在`user_behavior`表上进行`groupBy`和`select`操作。 +基于 `Table`,我们可以调用 Table API 或者 SQL 来查询其中的数据。Table API 和编程语言结合更紧密,我们可以在 `Table` 类上使用链式调用,调用 `Table` 类中的各种方法,执行各类关系型操作。下面的代码在 `user_behavior` 表上进行 `groupBy` 和 `select` 操作。 ```java StreamTableEnvironment tEnv = ... -// 创建一个TemporaryTable:user_behavior +// 创建一个 TemporaryTable:user_behavior tEnv.connect(new FileSystem().path("...")) .withFormat(new Csv()) .withSchema(schema) .createTemporaryTable("user_behavior"); Table userBehaviorTable = tEnv.from("user_behavior"); -// 在Table上使用Table API执行关系型操作 +// 在 Table 上使用 Table API 执行关系型操作 Table groupByUserId = userBehaviorTable.groupBy("user_id").select("user_id, COUNT(behavior) as cnt"); ``` ### SQL -我们也可以直接在`Table`执行SQL语句。SQL标准中定义了一系列语法和关键字,开发者可以基于SQL标准来编写SQL语句。与Table API中函数调用的方式不同,SQL语句是纯文本形式的。Flink SQL基于Apache Calcite(以下简称Calcite),将SQL语句转换为Flink可执行程序。Calcite支持SQL标准,因此Flink SQL也支持SQL标准。 +我们也可以直接在 `Table` 执行 SQL 语句。SQL 标准中定义了一系列语法和关键字,开发者可以基于 SQL 标准来编写 SQL 语句。与 Table API 中函数调用的方式不同,SQL 语句是纯文本形式的。Flink SQL 基于 Apache Calcite(以下简称 Calcite),将 SQL 语句转换为 Flink 可执行程序。Calcite 支持 SQL 标准,因此 Flink SQL 也支持 SQL 标准。 -下面的代码展示了如何使用Flink SQL对一个`Table`做查询: +下面的代码展示了如何使用 Flink SQL 对一个 `Table` 做查询: ```java StreamTableEnvironment tEnv = ... -// 创建一个TemporaryTable:user_behavior +// 创建一个 TemporaryTable:user_behavior tEnv.connect(new FileSystem().path("...")) .withFormat(new Csv()) .withSchema(schema) .createTemporaryTable("user_behavior"); -// 在Table上使用SQL执行关系型操作 +// 在 Table 上使用 SQL 执行关系型操作 Table groupByUserId = tEnv.sqlQuery("SELECT user_id, COUNT(behavior) FROM user_behavior GROUP BY user_id"); ``` -由于Table API和SQL都基于`Table`类,我们可以使用Table API,生成一个`Table`,再在此之上进行SQL查询,也可以先进行SQL查询得到一个`Table`,再在此之上调用Table API。由此可见,Table API和SQL的结合非常紧密。本书后半部分将主要介绍Flink SQL。 +由于 Table API 和 SQL 都基于 `Table` 类,我们可以使用 Table API,生成一个 `Table`,再在此之上进行 SQL 查询,也可以先进行 SQL 查询得到一个 `Table`,再在此之上调用 Table API。由此可见,Table API 和 SQL 的结合非常紧密。本书后半部分将主要介绍 Flink SQL。 -## 将Table结果输出 +## 将 Table 结果输出 -我们可以将查询结果通过`TableSink`输出到外部系统。`TableSink`和之前提到的Sink很像,它是一个数据输出的统一接口,可以将数据以CSV、Parquet、Avro等格式序列化,并将数据发送到关系型数据库、KV数据库、消息队列或文件系统上。`TableSink`与Catalog、Schema等概念紧密相关。下面的代码展示了如何将查询结果输出到文件系统。 +我们可以将查询结果通过 `TableSink` 输出到外部系统。`TableSink` 和之前提到的 Sink 很像,它是一个数据输出的统一接口,可以将数据以 CSV、Parquet、Avro 等格式序列化,并将数据发送到关系型数据库、KV 数据库、消息队列或文件系统上。`TableSink` 与 Catalog、Schema 等概念紧密相关。下面的代码展示了如何将查询结果输出到文件系统。 ```java StreamTableEnvironment tEnv = ... @@ -241,24 +248,31 @@ tEnv.connect(new FileSystem().path("...")) .withSchema(schema) .createTemporaryTable("CsvSinkTable"); -// 执行查询操作,得到一个名为result的Table +// 执行查询操作,得到一个名为 result 的 Table Table result = ... -// 将result发送到名为CsvSinkTable的TableSink +// 将 result 发送到名为 CsvSinkTable 的 TableSink result.insertInto("CsvSinkTable"); ``` ## 执行作业 -以上部分是一个Table API & SQL作业的核心代码编写阶段,但千万不要忘记调用`execute`方法来执行这个作业,否则作业无法被真正执行。 +以上部分是一个 Table API & SQL 作业的核心代码编写阶段,但千万不要忘记调用 `execute` 方法来执行这个作业,否则作业无法被真正执行。 -![Table API & SQL从调用到执行的大致流程](./img/table-internal.png) +```{figure} ./img/table-internal.png +--- +name: fig-table-api-sql-execution +width: 80% +align: center +--- +Table API & SQL 从调用到执行的大致流程 +``` -上图为Table API & SQL从调用到执行的大致流程。一个Table API或者SQL调用经过Planner最终转化为一个`JobGraph`,Planner在中间起到一个转换和优化的作用。对于流作业和批作业,Blink Planner分别有相应的优化规则。 +{numref}`fig-table-api-sql-execution` 为 Table API & SQL 从调用到执行的大致流程。一个 Table API 或者 SQL 调用经过 Planner 最终转化为一个 `JobGraph`,Planner 在中间起到一个转换和优化的作用。对于流作业和批作业,Blink Planner 分别有相应的优化规则。 -我们可以使用`TableEnvironment.explain(table)`来将查询转化为物理执行计划。 +我们可以使用 `TableEnvironment.explain(table)` 来将查询转化为物理执行计划。 ```java -// 声明一个SQL查询 +// 声明一个 SQL 查询 Table groupByUserId = tEnv.sqlQuery(...) String explanation = tEnv.explain(groupByUserId); @@ -289,44 +303,44 @@ Stage 1 : Data Source ... ``` -综上,Table API & SQL使用Planner将作业转化为具体可执行的程序。 +综上,Table API & SQL 使用 Planner 将作业转化为具体可执行的程序。 -Flink社区试图保证流批处理从使用体验到内部执行上的一致性。我们曾提到,Flink 1.10版本存在着DataStream API和DataSet API并存的现象,即DataStream API处理无界数据流,DataSet API处理有界数据集;也存在着Flink Planner和Blink Planner并存的现象。开源社区版的Flink Planner需要适配DataStream API和DataSet API,而Blink Planner的核心思想是将流批统一,它认为批处理是流处理的一个子集,是对有界数据流进行处理。因此,这两种Planner在具体实现上有一些区别。从名字中也看出,Flink社区决定逐渐将老的Flink Planner废弃,并不断推动流批一体化。因此,读者在使用时最好根据最新文档来选择合适的Planner。 +Flink 社区试图保证流批处理从使用体验到内部执行上的一致性。我们曾提到,Flink 1.10 版本存在着 DataStream API 和 DataSet API 并存的现象,即 DataStream API 处理无界数据流,DataSet API 处理有界数据集;也存在着 Flink Planner 和 Blink Planner 并存的现象。开源社区版的 Flink Planner 需要适配 DataStream API 和 DataSet API,而 Blink Planner 的核心思想是将流批统一,它认为批处理是流处理的一个子集,是对有界数据流进行处理。因此,这两种 Planner 在具体实现上有一些区别。从名字中也看出,Flink 社区决定逐渐将老的 Flink Planner 废弃,并不断推动流批一体化。因此,读者在使用时最好根据最新文档来选择合适的 Planner。 ## 获取表的具体方式 -在Flink 1.10中,Table API & SQL与外部系统交互主要有两大类方式: +在 Flink 1.10 中,Table API & SQL 与外部系统交互主要有两大类方式: 1. 在程序中使用代码编程配置 -2. 使用声明式的语言,如SQL的数据库定义语言(Data Definition Language,DDL)或YAML文件。 +2. 使用声明式的语言,如 SQL 的数据库定义语言(Data Definition Language,DDL)或 YAML 文件。 -无论哪类方式,都需要配置外部系统的必要参数、序列化方式和Schema。 +无论哪类方式,都需要配置外部系统的必要参数、序列化方式和 Schema。 ### 代码配置方式 在程序中使用代码配置的方式又具体分为: -1. 使用`connect`方法连接外部系统 -2. 将`DataStream`或`DataSet`转换为`Table` +1. 使用 `connect` 方法连接外部系统 +2. 将 `DataStream` 或 `DataSet` 转换为 `Table` -其中,第一种支持的外部系统有限,目前可以支持文件系统、Kafka、Elasticsearch和HBase。第二种方式和第七章所提到的Flink Connector使用方法相似,以流处理为例,我们需要首先获取一个`DataStream`,再进一步将其转化为`Table`。 +其中,第一种支持的外部系统有限,目前可以支持文件系统、Kafka、Elasticsearch 和 HBase。第二种方式和第七章所提到的 Flink Connector 使用方法相似,以流处理为例,我们需要首先获取一个 `DataStream`,再进一步将其转化为 `Table`。 -我们先看`connect`方法,下面的代码展示了一个比较详细的例子,它从一个Kafka数据流中获取`Table`,数据使用JSON序列化,最终创建一个名为`user_behavior`的表。 +我们先看 `connect` 方法,下面的代码展示了一个比较详细的例子,它从一个 Kafka 数据流中获取 `Table`,数据使用 JSON 序列化,最终创建一个名为 `user_behavior` 的表。 ```java tEnv - // 使用connect函数连接外部系统 + // 使用 connect 函数连接外部系统 .connect( new Kafka() - .version("universal") // 必填,Kafka版本,合法的参数有"0.8", "0.9", "0.10", "0.11"或"universal" - .topic("user_behavior") // 必填,Topic名 + .version("universal") // 必填,Kafka 版本,合法的参数有"0.8", "0.9", "0.10", "0.11"或"universal" + .topic("user_behavior") // 必填,Topic 名 .startFromLatest() // 首次消费时数据读取的位置 - .property("zookeeper.connect", "localhost:2181") // Kafka连接参数 + .property("zookeeper.connect", "localhost:2181") // Kafka 连接参数 .property("bootstrap.servers", "localhost:9092") ) - // 序列化方式 可以是JSON、Avro等 + // 序列化方式 可以是 JSON、Avro 等 .withFormat(new Json()) - // 数据的Schema + // 数据的 Schema .withSchema( new Schema() .field("user_id", DataTypes.BIGINT()) @@ -335,50 +349,50 @@ tEnv .field("behavior", DataTypes.STRING()) .field("ts", DataTypes.TIMESTAMP(3)) ) - // 临时表的表名,后续可以在SQL语句中使用这个表名 + // 临时表的表名,后续可以在 SQL 语句中使用这个表名 .createTemporaryTable("user_behavior"); ``` -关于`connect`以及各个外部系统的具体连接方法,本书将不逐一覆盖,读者可以根据Flink官网的最新文档来学习使用。 +关于 `connect` 以及各个外部系统的具体连接方法,本书将不逐一覆盖,读者可以根据 Flink 官网的最新文档来学习使用。 -`connect`方法可以直接连接外部数据并创建表,此外,我们也可以依托DataStream API,将一个`DataStream`转换为`Table`: +`connect` 方法可以直接连接外部数据并创建表,此外,我们也可以依托 DataStream API,将一个 `DataStream` 转换为 `Table`: ```java DataStream userBehaviorDataStream = ... -// 将数据流转换为一个视图,使用UserBehavior这个POJO类各字段名作为user_behavior表的字段名 +// 将数据流转换为一个视图,使用 UserBehavior 这个 POJO 类各字段名作为 user_behavior 表的字段名 tEnv.createTemporaryView("user_behavior", userBehaviorDataStream); ``` :::note -Flink 1.10的`TableEnvironment`不支持将`DataStream`或`DataSet`转换为`Table`,使用此功能需要使用`StreamTableEnvironment`或者`BatchTableEnvironment`。 +Flink 1.10 的 `TableEnvironment` 不支持将 `DataStream` 或 `DataSet` 转换为 `Table`,使用此功能需要使用 `StreamTableEnvironment` 或者 `BatchTableEnvironment`。 ::: ### 声明式方式 -另一种获取表的方式是使用SQL DDL或YAML等声明式方式来配置外部系统。 +另一种获取表的方式是使用 SQL DDL 或 YAML 等声明式方式来配置外部系统。 -很多系统用YAML文件来配置参数,不过目前YAML只能和SQL Client配合,而1.10版本的SQL Client暂时是一个测试功能,还不能用于生产环境,这里暂不介绍,感兴趣的读者可以通过官网文档了解。SQL DDL是很多熟悉SQL的朋友经常使用的功能,比如`CREATE TABLE`、`DROP TABLE`等,是很多SQL用户经常使用的语句。同样的一个Kafka数据流,使用SQL DDL可以这样定义: +很多系统用 YAML 文件来配置参数,不过目前 YAML 只能和 SQL Client 配合,而 1.10 版本的 SQL Client 暂时是一个测试功能,还不能用于生产环境,这里暂不介绍,感兴趣的读者可以通过官网文档了解。SQL DDL 是很多熟悉 SQL 的朋友经常使用的功能,比如 `CREATE TABLE`、`DROP TABLE` 等,是很多 SQL 用户经常使用的语句。同样的一个 Kafka 数据流,使用 SQL DDL 可以这样定义: ```sql CREATE TABLE user_behavior ( - -- 表的Schema + -- 表的 Schema user_id BIGINT, item_id BIGINT, category_id BIGINT, behavior STRING, ts TIMESTAMP(3), - WATERMARK FOR ts as ts - INTERVAL '5' SECOND -- 定义Watermark ts为EventTime + WATERMARK FOR ts as ts - INTERVAL '5' SECOND -- 定义 Watermark ts 为 EventTime ) WITH ( -- 外部系统连接参数 'connector.type' = 'kafka', - 'connector.version' = 'universal', -- Kafka版本 + 'connector.version' = 'universal', -- Kafka 版本 'connector.topic' = 'user_behavior', -- Kafka Topic - 'connector.startup-mode' = 'latest-offset', -- 从最近的offset开始读取数据 - 'connector.properties.zookeeper.connect' = 'localhost:2181', -- Kafka连接参数 + 'connector.startup-mode' = 'latest-offset', -- 从最近的 offset 开始读取数据 + 'connector.properties.zookeeper.connect' = 'localhost:2181', -- Kafka 连接参数 'connector.properties.bootstrap.servers' = 'localhost:9092', -- 序列化方式 'format.type' = 'json' -- 数据源格式为 json ); ``` -将上面的SQL语句粘贴到`tEnv.sqlUpdate("CREATE TABLE ...")`中,放在主逻辑中执行即可。我们将在[SQL DDL](sql-ddl.md)部分详细介绍如何使用这些语句创建表。 \ No newline at end of file +将上面的 SQL 语句粘贴到 `tEnv.sqlUpdate("CREATE TABLE ...")` 中,放在主逻辑中执行即可。我们将在 [SQL DDL](sql-ddl.md) 部分详细介绍如何使用这些语句创建表。 \ No newline at end of file diff --git a/doc/ch-time-window/exercise-stock.md b/doc/ch-time-window/exercise-stock.md index 159b1b7..151df0f 100644 --- a/doc/ch-time-window/exercise-stock.md +++ b/doc/ch-time-window/exercise-stock.md @@ -3,7 +3,7 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -18,7 +18,7 @@ ## 实验内容 -股票交易场景,我们经常见到名为“K线”的概念。K线形如蜡烛,它反应了价格的走势,在一个K线内同时记录了开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)。这里我们以5分钟为一个周期,计算该周期内的K线数据,即5分钟内的开盘价、最高价、最低价和收盘价(OHLC)。 +股票交易场景,我们经常见到名为“K 线”的概念。K 线形如蜡烛,它反应了价格的走势,在一个 K 线内同时记录了开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)。这里我们以 5 分钟为一个周期,计算该周期内的 K 线数据,即 5 分钟内的开盘价、最高价、最低价和收盘价(OHLC)。 关于价格,常见的是计算一个时间段内的平均值,考虑到交易量的权重,另外一个经常使用的一个计算价格的方式为交易量加权平均值(Volume Weighted Average Price,VWAP)。它的公式为: @@ -28,11 +28,11 @@ $$ ## 实验要求 -使用你认为合适的算子和函数,完成下面两个程序,使用`print`将结果打印输出。你可以根据需要自定义中间数据结构。 +使用你认为合适的算子和函数,完成下面两个程序,使用 `print` 将结果打印输出。你可以根据需要自定义中间数据结构。 -* 程序1:以5分钟为一个时间单位,计算其OHLC各值。 +* 程序 1:以 5 分钟为一个时间单位,计算其 OHLC 各值。 -* 程序2:以5分钟为一个时间单位,计算VWAP。 +* 程序 2:以 5 分钟为一个时间单位,计算 VWAP。 ## 实验报告 diff --git a/doc/ch-time-window/join.md b/doc/ch-time-window/join.md index 350e514..b888b1e 100644 --- a/doc/ch-time-window/join.md +++ b/doc/ch-time-window/join.md @@ -3,44 +3,65 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -批处理经常要解决的问题是将两个数据源做关联,或者称为Join。例如,很多手机APP都有一个用户数据源User,同时APP会记录用户的行为,我们称之为Behavior,两个表按照userId来进行Join,如下图所示。Flink支持流处理上的Join,只不过Flink是在一个时间窗口上来进行两个流的Join。 +批处理经常要解决的问题是将两个数据源做关联,或者称为 Join。例如,很多手机 APP 都有一个用户数据源 User,同时 APP 会记录用户的行为,我们称之为 Behavior,两个表按照 userId 来进行 Join,如 {numref}`fig-join-example` 所示。Flink 支持流处理上的 Join,只不过 Flink 是在一个时间窗口上来进行两个流的 Join。 -![Join示例图](./img/join.png) +```{figure} ./img/join.png +--- +name: fig-join-example +width: 80% +align: center +--- +Join 示例图 +``` -目前,Flink支持了两种Join:Window Join(窗口连接)和Interval Join(时间间隔连接)。 +目前,Flink 支持了两种 Join:Window Join(窗口连接)和 Interval Join(时间间隔连接)。 ## Window Join -从名字中能猜到,Window Join主要在Flink的窗口上进行操作,它将两个流中落在相同窗口的元素按照某个Key进行Join。一个Window Join的大致骨架结构为: +从名字中能猜到,Window Join 主要在 Flink 的窗口上进行操作,它将两个流中落在相同窗口的元素按照某个 Key 进行 Join。一个 Window Join 的大致骨架结构为: ```scala input1.join(input2) - .where() <- input1使用哪个字段作为Key - .equalTo() <- input2使用哪个字段作为Key - .window() <- 指定WindowAssigner - [.trigger()] <- 指定Trigger(可选) - [.evictor()] <- 指定Evictor(可选) - .apply() <- 指定JoinFunction + .where() <- input1 使用哪个字段作为 Key + .equalTo() <- input2 使用哪个字段作为 Key + .window() <- 指定 WindowAssigner + [.trigger()] <- 指定 Trigger(可选) + [.evictor()] <- 指定 Evictor(可选) + .apply() <- 指定 JoinFunction ``` -下图展示了Join的大致过程。两个输入数据流先分别按Key进行分组,然后将元素划分到窗口中。窗口的划分需要使用`WindowAssigner`来定义,这里可以使用Flink提供的滚动窗口、滑动窗口或会话窗口等默认的`WindowAssigner`。随后两个数据流中的元素会被分配到各个窗口上,也就是说一个窗口会包含来自两个数据流的元素。相同窗口内的数据会以内连接(Inner Join)的语义来相互关联,形成一个数据对。当窗口的时间结束,Flink会调用`JoinFunction`来对窗口内的数据对进行处理。当然,我们也可以使用`Trigger`或`Evictor`做一些自定义优化,他们的使用方法和普通窗口的使用方法一样。 +{numref}`fig-join-lifecycle` 展示了 Join 的大致过程。两个输入数据流先分别按 Key 进行分组,然后将元素划分到窗口中。窗口的划分需要使用 `WindowAssigner` 来定义,这里可以使用 Flink 提供的滚动窗口、滑动窗口或会话窗口等默认的 `WindowAssigner`。随后两个数据流中的元素会被分配到各个窗口上,也就是说一个窗口会包含来自两个数据流的元素。相同窗口内的数据会以内连接(Inner Join)的语义来相互关联,形成一个数据对。当窗口的时间结束,Flink 会调用 `JoinFunction` 来对窗口内的数据对进行处理。当然,我们也可以使用 `Trigger` 或 `Evictor` 做一些自定义优化,他们的使用方法和普通窗口的使用方法一样。 -![Join的大致流程](./img/join-lifecycle.png) +```{figure} ./img/join-lifecycle.png +--- +name: fig-join-lifecycle +width: 80% +align: center +--- +Join 的大致流程 +``` -接下来我们重点分析一下两个数据流是如何进行Inner Join的。 +接下来我们重点分析一下两个数据流是如何进行 Inner Join 的。 -一般滴,Inner Join只对两个数据源同时出现的元素做连接,形成一个数据对,即数据源input1中的某个元素与数据源input2中的所有元素逐个配对。当数据源某个窗口内没数据时,比如图中的第三个窗口,Join的结果也是空的。 +一般滴,Inner Join 只对两个数据源同时出现的元素做连接,形成一个数据对,即数据源 input1 中的某个元素与数据源 input2 中的所有元素逐个配对。当数据源某个窗口内没数据时,比如图中的第三个窗口,Join 的结果也是空的。 -![窗口内的数据INNER JOIN](./img/tumbling-window-join.png) +```{figure} ./img/tumbling-window-join.png +--- +name: fig-tumbling-window-join +width: 80% +align: center +--- +窗口内的数据 INNER JOIN +``` -下面的代码自定义了`JoinFunction`,并将Join结果打印出来。无论代码中演示的滚动窗口,还是滑动窗口或会话窗口,其原理都是一样的。 +下面的代码自定义了 `JoinFunction`,并将 Join 结果打印出来。无论代码中演示的滚动窗口,还是滑动窗口或会话窗口,其原理都是一样的。 ```java public static class MyJoinFunction @@ -62,9 +83,9 @@ DataStream joinResult = input1.join(input2) .apply(new MyJoinFunction()); ``` -除了`JoinFunction`,Flink还提供了`FlatJoinFunction`,其功能是输出零到多个结果。 +除了 `JoinFunction`,Flink 还提供了 `FlatJoinFunction`,其功能是输出零到多个结果。 -如果Inner Join不能满足我们的需求,`CoGroupFunction`提供了更多可自定义的功能,我们可以获得两个数据流中的所有元素,元素以`Iterable`的形式供开发者使用。如果第一个数据流中的某些Key是空的,`CoGroupFunction`被触发时,这个Key上的元素为空,开发者自己决定如何处理两个流里的数据。 +如果 Inner Join 不能满足我们的需求,`CoGroupFunction` 提供了更多可自定义的功能,我们可以获得两个数据流中的所有元素,元素以 `Iterable` 的形式供开发者使用。如果第一个数据流中的某些 Key 是空的,`CoGroupFunction` 被触发时,这个 Key 上的元素为空,开发者自己决定如何处理两个流里的数据。 ```java public static class MyCoGroupFunction @@ -77,7 +98,7 @@ public static class MyCoGroupFunction } ``` -在主逻辑调用时,要写成`input1.coGroup(input2).where().equalTo()`。 +在主逻辑调用时,要写成 `input1.coGroup(input2).where().equalTo()`。 ```java DataStream> input1 = ... @@ -92,19 +113,26 @@ DataStream coGroupResult = input1.coGroup(input2) ## Interval Join -与Window Join不同,Interval Join不依赖Flink的`WindowAssigner`,而是根据一个时间间隔(Interval)界定时间。Interval需要一个时间下界(Lower Bound)和上界(Upper Bound),如果我们将input1和input2进行Interval Join,input1中的某个元素为input1.element1,时间戳为input1.element1.ts,那么一个Interval就是[input1.element1.ts + lowerBound, input1.element1.ts + upperBound],input2中落在这个时间段内的元素将会和input1.element1组成一个数据对。用数学公式表达为,凡是符合下面公式的元素,会两两组合在一起。 +与 Window Join 不同,Interval Join 不依赖 Flink 的 `WindowAssigner`,而是根据一个时间间隔(Interval)界定时间。Interval 需要一个时间下界(Lower Bound)和上界(Upper Bound),如果我们将 input1 和 input2 进行 Interval Join,input1 中的某个元素为 input1.element1,时间戳为 input1.element1.ts,那么一个 Interval 就是 [input1.element1.ts + lowerBound, input1.element1.ts + upperBound],input2 中落在这个时间段内的元素将会和 input1.element1 组成一个数据对。用数学公式表达为,凡是符合下面公式的元素,会两两组合在一起。 $$ input1.element1.ts + lowerBound \le input2.elementX.ts \le input1.element1.ts + upperBound $$ 上下界可以是正数也可以是负数。 :::info -Flink(1.10)的Interval Join只支持Event Time语义。 +Flink(1.10)的 Interval Join 只支持 Event Time 语义。 ::: -![Interval Join](./img/interval-join.png) +```{figure} ./img/interval-join.png +--- +name: fig-interval-join +width: 80% +align: center +--- +Interval Join 示例 +``` -下面的代码展示了如何对两个数据流进行Interval Join: +下面的代码展示了如何对两个数据流进行 Interval Join: ```java public static class MyProcessFunction extends ProcessJoinFunction, Tuple3, String> { @@ -117,7 +145,7 @@ public static class MyProcessFunction extends ProcessJoinFunction> input1 = ... @@ -129,7 +157,7 @@ DataStream intervalJoinResult = input1.keyBy(i -> i.f0) .process(new MyProcessFunction()); ``` -默认的时间间隔是包含上下界的,我们可以使用`.lowerBoundExclusive()` 和`.upperBoundExclusive`来确定是否需要包含上下界。 +默认的时间间隔是包含上下界的,我们可以使用 `.lowerBoundExclusive()` 和 `.upperBoundExclusive` 来确定是否需要包含上下界。 ```java DataStream intervalJoinResult = input1.keyBy(i -> i.f0) @@ -140,4 +168,4 @@ DataStream intervalJoinResult = input1.keyBy(i -> i.f0) .process(new MyProcessFunction()); ``` -Interval Join内部是用缓存来存储所有数据的,因此需要注意缓存数据不能太大,以免对内存造成太大压力。 \ No newline at end of file +Interval Join 内部是用缓存来存储所有数据的,因此需要注意缓存数据不能太大,以免对内存造成太大压力。 \ No newline at end of file diff --git a/doc/ch-time-window/late-elements.md b/doc/ch-time-window/late-elements.md index bac727f..9087956 100644 --- a/doc/ch-time-window/late-elements.md +++ b/doc/ch-time-window/late-elements.md @@ -3,14 +3,14 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -Event Time语义下我们使用Watermark来判断数据是否迟到。一个迟到元素是指元素到达窗口算子时,该元素本该被分配到某个窗口,但由于延迟,窗口已经触发计算。目前Flink有三种处理迟到数据的方式: +Event Time 语义下我们使用 Watermark 来判断数据是否迟到。一个迟到元素是指元素到达窗口算子时,该元素本该被分配到某个窗口,但由于延迟,窗口已经触发计算。目前 Flink 有三种处理迟到数据的方式: * 直接将迟到数据丢弃 * 将迟到数据发送到另一个流 @@ -22,7 +22,7 @@ Event Time语义下我们使用Watermark来判断数据是否迟到。一个迟 ## 将迟到数据发送到另外一个流 -如果想对这些迟到数据处理,我们可以使用[ProcessFunction](./process-function.md)系列函数的侧输出功能,将迟到数据发到某个特定的流上。后续我们可以根据业务逻辑的要求,对迟到的数据流进行处理。 +如果想对这些迟到数据处理,我们可以使用 [ProcessFunction](./process-function.md) 系列函数的侧输出功能,将迟到数据发到某个特定的流上。后续我们可以根据业务逻辑的要求,对迟到的数据流进行处理。 ```scala final OutputTag lateOutputTag = new OutputTag("late-data"){}; @@ -39,22 +39,22 @@ SingleOutputStreamOperator result = input DataStream lateStream = result.getSideOutput(lateOutputTag); ``` -上面的代码将迟到的内容写进名为“late-data”的`OutputTag`下,之后使用`getSideOutput`获取这些迟到的数据。 +上面的代码将迟到的内容写进名为“late-data”的 `OutputTag` 下,之后使用 `getSideOutput` 获取这些迟到的数据。 ## 更新计算结果 对于迟到数据,使用上面两种方法,都对计算结果的正确性有影响。如果将数据流发送到单独的侧输出,我们仍然需要完成单独的处理逻辑,相对比较复杂。更理想的情况是,将迟到数据重新进行一次,得到一个更新的结果。 -`allowedLateness()`允许用户先得到一个结果,如果在一定时间内有迟到数据,迟到数据会和之前的数据一起重新被计算,以得到一个更准确的结果。使用这个功能时需要注意,原来窗口中的状态数据在窗口已经触发的情况下仍然会被保留,否则迟到数据到来后也无法与之前数据融合。另一方面,更新的结果要以一种合适的形式输出到外部系统,或者将原来结果覆盖,或者多份数据同时保存,且每份数据都有时间戳。比如,我们的计算结果是一个键值对(Key-Value),我们可以把这个结果输出到Redis这样的KV数据库中,使用某些Reids命令,同一个Key下,旧的结果会被新的结果所覆盖。 +`allowedLateness()` 允许用户先得到一个结果,如果在一定时间内有迟到数据,迟到数据会和之前的数据一起重新被计算,以得到一个更准确的结果。使用这个功能时需要注意,原来窗口中的状态数据在窗口已经触发的情况下仍然会被保留,否则迟到数据到来后也无法与之前数据融合。另一方面,更新的结果要以一种合适的形式输出到外部系统,或者将原来结果覆盖,或者多份数据同时保存,且每份数据都有时间戳。比如,我们的计算结果是一个键值对(Key-Value),我们可以把这个结果输出到 Redis 这样的 KV 数据库中,使用某些 Reids 命令,同一个 Key 下,旧的结果会被新的结果所覆盖。 -`allowedLateness()`的参数是一个整数值,表示要等待多长时间。如果不明确调用`allowedLateness()`方法,`allowedLateness()`默认的参数是0。 +`allowedLateness()` 的参数是一个整数值,表示要等待多长时间。如果不明确调用 `allowedLateness()` 方法,`allowedLateness()` 默认的参数是 0。 :::info -这个功能只针对Event Time,如果对一个Processing Time下的程序使用`allowedLateness()`,将引发异常。 +这个功能只针对 Event Time,如果对一个 Processing Time 下的程序使用 `allowedLateness()`,将引发异常。 ::: ```java /** - * ProcessWindowFunction接收的泛型参数分别为:[输入类型、输出类型、Key、Window] + * ProcessWindowFunction 接收的泛型参数分别为:[输入类型、输出类型、Key、Window] */ public static class AllowedLatenessFunction extends ProcessWindowFunction, Tuple4, String, TimeWindow> { @Override @@ -72,18 +72,18 @@ public static class AllowedLatenessFunction extends ProcessWindowFunction> allowedLatenessStream = inpu .process(new AllowedLatenessFunction()); ``` -在上面的代码中,我们设置的窗口为5秒,5秒结束后,窗口计算会被触发,生成第一个计算结果。`allowedLateness()`设置窗口结束后还要等待长为lateness的时间,某个迟到元素的Event Time大于窗口结束时间但是小于窗口结束时间+lateness,该元素仍然会被加入到该窗口中。每新到一个迟到数据,迟到数据被加入`ProcessWindowFunction`的缓存中,窗口的Trigger会触发一次FIRE,窗口函数被重新调用一次,计算结果得到一次更新。 +在上面的代码中,我们设置的窗口为 5 秒,5 秒结束后,窗口计算会被触发,生成第一个计算结果。`allowedLateness()` 设置窗口结束后还要等待长为 lateness 的时间,某个迟到元素的 Event Time 大于窗口结束时间但是小于窗口结束时间 +lateness,该元素仍然会被加入到该窗口中。每新到一个迟到数据,迟到数据被加入 `ProcessWindowFunction` 的缓存中,窗口的 Trigger 会触发一次 FIRE,窗口函数被重新调用一次,计算结果得到一次更新。 :::info -会话窗口依赖Session Gap来切分窗口,使用了`allowedLateness()`可能会导致两个窗口合并成一个窗口。 +会话窗口依赖 Session Gap 来切分窗口,使用了 `allowedLateness()` 可能会导致两个窗口合并成一个窗口。 ::: \ No newline at end of file diff --git a/doc/ch-time-window/process-function.md b/doc/ch-time-window/process-function.md index ca055ab..475694e 100644 --- a/doc/ch-time-window/process-function.md +++ b/doc/ch-time-window/process-function.md @@ -3,28 +3,28 @@ :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) ::: -在继续介绍Flink时间和窗口相关操作之前,我们需要先了解一下`ProcessFunction`系列函数。它们是Flink体系中最底层的API,提供了对数据流更细粒度的操作权限。之前提到的一些算子和函数能够进行一些时间上的操作,但是不能获取算子当前的Processing Time或者是Watermark时间戳,调用起来简单但功能相对受限。如果想获取数据流中Watermark的时间戳,或者使用定时器,需要使用`ProcessFunction`系列函数。Flink SQL是基于这些函数实现的,一些需要高度个性化的业务场景也需要使用这些函数。 +在继续介绍 Flink 时间和窗口相关操作之前,我们需要先了解一下 `ProcessFunction` 系列函数。它们是 Flink 体系中最底层的 API,提供了对数据流更细粒度的操作权限。之前提到的一些算子和函数能够进行一些时间上的操作,但是不能获取算子当前的 Processing Time 或者是 Watermark 时间戳,调用起来简单但功能相对受限。如果想获取数据流中 Watermark 的时间戳,或者使用定时器,需要使用 `ProcessFunction` 系列函数。Flink SQL 是基于这些函数实现的,一些需要高度个性化的业务场景也需要使用这些函数。 -目前,这个系列函数主要包括`KeyedProcessFunction`、`ProcessFunction`、`CoProcessFunction`、`KeyedCoProcessFunction`、`ProcessJoinFunction`和`ProcessWindowFunction`等多种函数,这些函数各有侧重,但核心功能比较相似,主要包括两点: +目前,这个系列函数主要包括 `KeyedProcessFunction`、`ProcessFunction`、`CoProcessFunction`、`KeyedCoProcessFunction`、`ProcessJoinFunction` 和 `ProcessWindowFunction` 等多种函数,这些函数各有侧重,但核心功能比较相似,主要包括两点: -* 状态:我们可以在这些函数中访问和更新Keyed State 。 +* 状态:我们可以在这些函数中访问和更新 Keyed State 。 * 定时器(Timer):像定闹钟一样设置定时器,我们可以在时间维度上设计更复杂的业务逻辑。 -状态的介绍可以参考第六章的内容,本节将重点介绍`ProcessFunction`系列函数时间功能上的相关特性。 +状态的介绍可以参考第六章的内容,本节将重点介绍 `ProcessFunction` 系列函数时间功能上的相关特性。 -## Timer的使用方法 +## Timer 的使用方法 -说到时间相关的操作,就不能避开定时器(Timer)。我们可以把Timer理解成一个闹钟,使用前先在Timer中注册一个未来的时间,当这个时间到达,闹钟会“响起”,程序会执行一个回调函数,回调函数中执行一定的业务逻辑。这里以`KeyedProcessFunction`为例,来介绍Timer的注册和使用。 +说到时间相关的操作,就不能避开定时器(Timer)。我们可以把 Timer 理解成一个闹钟,使用前先在 Timer 中注册一个未来的时间,当这个时间到达,闹钟会“响起”,程序会执行一个回调函数,回调函数中执行一定的业务逻辑。这里以 `KeyedProcessFunction` 为例,来介绍 Timer 的注册和使用。 -`ProcessFunction`有两个重要的方法:`processElement()`和`onTimer()`,其中`processElement`函数在源码中的Java签名如下: +`ProcessFunction` 有两个重要的方法:`processElement()` 和 `onTimer()`,其中 `processElement` 函数在源码中的 Java 签名如下: ```java @@ -32,29 +32,29 @@ public abstract void processElement(I value, Context ctx, Collector out) ``` -`processElement()`方法处理数据流中的一条类型为I的元素,并通过`Collector`输出出来。`Context`是它区别于`FlatMapFunction`等普通函数的特色,开发者可以通过`Context`来获取时间戳,访问`TimerService`,设置Timer。 +`processElement()` 方法处理数据流中的一条类型为 I 的元素,并通过 `Collector` 输出出来。`Context` 是它区别于 `FlatMapFunction` 等普通函数的特色,开发者可以通过 `Context` 来获取时间戳,访问 `TimerService`,设置 Timer。 -`ProcessFunction`类中另外一个接口是`onTimer()`方法: +`ProcessFunction` 类中另外一个接口是 `onTimer()` 方法: ```java // 时间到达后的回调函数 public void onTimer(long timestamp, OnTimerContext ctx, Collector out) ``` -这是一个回调函数,当到了“闹钟”时间,Flink会调用`onTimer()`,并执行一些业务逻辑。这里也有一个参数`OnTimerContext`,它实际上是继承了上面的那个`Context`,与`Context`几乎相同。 +这是一个回调函数,当到了“闹钟”时间,Flink 会调用 `onTimer()`,并执行一些业务逻辑。这里也有一个参数 `OnTimerContext`,它实际上是继承了上面的那个 `Context`,与 `Context` 几乎相同。 -使用Timer的方法主要逻辑为: +使用 Timer 的方法主要逻辑为: -1. 在`processElement()`方法中通过`Context`注册一个未来的时间戳t。这个时间戳的语义可以是Processing Time,也可以是Event Time,根据业务需求来选择。 -2. 在`onTimer()`方法中实现一些逻辑,到达t时刻,`onTimer()`方法被自动调用。 +1. 在 `processElement()` 方法中通过 `Context` 注册一个未来的时间戳 t。这个时间戳的语义可以是 Processing Time,也可以是 Event Time,根据业务需求来选择。 +2. 在 `onTimer()` 方法中实现一些逻辑,到达 t 时刻,`onTimer()` 方法被自动调用。 -从`Context`中,我们可以获取一个`TimerService`,这是一个访问时间戳和Timer的接口。我们可以通过`Context.timerService.registerProcessingTimeTimer()`或`Context.timerService.registerEventTimeTimer()`这两个方法来注册Timer,只需要传入一个时间戳即可。我们可以通过`Context.timerService.deleteProcessingTimeTimer`和`Context.timerService.deleteEventTimeTimer`来删除之前注册的Timer。此外,还可以从中获取当前的时间戳:`Context.timerService.currentProcessingTime`和`Context.timerService.currentWatermark`。这些方法中,名字带有“ProcessingTime”的方法表示该方法基于Processing Time语义;名字带有“EventTime”或“Watermark”的方法表示该方法基于Event Time语义。 +从 `Context` 中,我们可以获取一个 `TimerService`,这是一个访问时间戳和 Timer 的接口。我们可以通过 `Context.timerService.registerProcessingTimeTimer()` 或 `Context.timerService.registerEventTimeTimer()` 这两个方法来注册 Timer,只需要传入一个时间戳即可。我们可以通过 `Context.timerService.deleteProcessingTimeTimer` 和 `Context.timerService.deleteEventTimeTimer` 来删除之前注册的 Timer。此外,还可以从中获取当前的时间戳:`Context.timerService.currentProcessingTime` 和 `Context.timerService.currentWatermark`。这些方法中,名字带有“ProcessingTime”的方法表示该方法基于 Processing Time 语义;名字带有“EventTime”或“Watermark”的方法表示该方法基于 Event Time 语义。 :::info -我们只能在`KeyedStream`上注册Timer。每个Key下可以使用不同的时间戳注册不同的Timer,但是每个Key的每个时间戳只能注册一个Timer。如果想在一个`DataStream`上应用Timer,可以将所有数据映射到一个伪造的Key上,但这样所有数据会流入一个算子子任务。 +我们只能在 `KeyedStream` 上注册 Timer。每个 Key 下可以使用不同的时间戳注册不同的 Timer,但是每个 Key 的每个时间戳只能注册一个 Timer。如果想在一个 `DataStream` 上应用 Timer,可以将所有数据映射到一个伪造的 Key 上,但这样所有数据会流入一个算子子任务。 ::: -我们再次以[股票交易](../chapter-datastream-api/exercise-stock-basic.md)场景来解释如何使用Timer。一次股票交易包括:股票代号、时间戳、股票价格、成交量。我们现在想看一支股票未来是否一直连续上涨,如果一直上涨,则发送出一个提示。如果新数据比上次数据价格更高且目前没有注册Timer,则注册一个未来的Timer,如果在这期间价格降低则把刚才注册的Timer删除,如果在这期间价格没有降低,Timer时间到达后触发`onTimer()`,发送一个提示。下面的代码中,`intervalMills`表示一个毫秒精度的时间段,如果这个时间段内一支股票价格一直上涨,则会输出文字提示。 +我们再次以 [股票交易](../chapter-datastream-api/exercise-stock-basic.md) 场景来解释如何使用 Timer。一次股票交易包括:股票代号、时间戳、股票价格、成交量。我们现在想看一支股票未来是否一直连续上涨,如果一直上涨,则发送出一个提示。如果新数据比上次数据价格更高且目前没有注册 Timer,则注册一个未来的 Timer,如果在这期间价格降低则把刚才注册的 Timer 删除,如果在这期间价格没有降低,Timer 时间到达后触发 `onTimer()`,发送一个提示。下面的代码中,`intervalMills` 表示一个毫秒精度的时间段,如果这个时间段内一支股票价格一直上涨,则会输出文字提示。 ```java // 三个泛型分别为 Key、输入、输出 @@ -72,7 +72,7 @@ public static class IncreaseAlertFunction @Override public void open(Configuration parameters) throws Exception { - // 从RuntimeContext中获取状态 + // 从 RuntimeContext 中获取状态 lastPrice = getRuntimeContext().getState( new ValueStateDescriptor("lastPrice", Types.DOUBLE())); currentTimer = getRuntimeContext().getState( @@ -82,9 +82,9 @@ public static class IncreaseAlertFunction @Override public void processElement(StockPrice stock, Context context, Collector out) throws Exception { - // 状态第一次使用时,未做初始化,返回null + // 状态第一次使用时,未做初始化,返回 null if (null == lastPrice.value()) { - // 第一次使用lastPrice,不做任何处理 + // 第一次使用 lastPrice,不做任何处理 } else { double prevPrice = lastPrice.value(); long curTimerTimestamp; @@ -94,21 +94,21 @@ public static class IncreaseAlertFunction curTimerTimestamp = currentTimer.value(); } if (stock.price < prevPrice) { - // 如果新流入的股票价格降低,删除Timer,否则该Timer一直保留 + // 如果新流入的股票价格降低,删除 Timer,否则该 Timer 一直保留 context.timerService().deleteEventTimeTimer(curTimerTimestamp); currentTimer.clear(); } else if (stock.price >= prevPrice && curTimerTimestamp == 0) { // 如果新流入的股票价格升高 - // curTimerTimestamp为0表示currentTimer状态中是空的,还没有对应的Timer - // 新Timer = 当前时间 + interval + // curTimerTimestamp 为 0 表示 currentTimer 状态中是空的,还没有对应的 Timer + // 新 Timer = 当前时间 + interval long timerTs = context.timestamp() + intervalMills; context.timerService().registerEventTimeTimer(timerTs); - // 更新currentTimer状态,后续数据会读取currentTimer,做相关判断 + // 更新 currentTimer 状态,后续数据会读取 currentTimer,做相关判断 currentTimer.update(timerTs); } } - // 更新lastPrice + // 更新 lastPrice lastPrice.update(stock.price); } @@ -118,35 +118,35 @@ public static class IncreaseAlertFunction out.collect(formatter.format(ts) + ", symbol: " + ctx.getCurrentKey() + " monotonically increased for " + intervalMills + " millisecond."); - // 清空currentTimer状态 + // 清空 currentTimer 状态 currentTimer.clear(); } } ``` -在主逻辑里,通过下面的`process()`算子调用`KeyedProcessFunction`: +在主逻辑里,通过下面的 `process()` 算子调用 `KeyedProcessFunction`: ```java DataStream inputStream = ... DataStream warnings = inputStream .keyBy(stock -> stock.symbol) - // 调用process函数 + // 调用 process 函数 .process(new IncreaseAlertFunction(3000)); ``` -Checkpoint时,Timer也会随其他状态数据一起保存起来。如果使用Processing Time语义设置一些Timer,重启时这个时间戳已经过期,那些回调函数会立刻被调用执行。 +Checkpoint 时,Timer 也会随其他状态数据一起保存起来。如果使用 Processing Time 语义设置一些 Timer,重启时这个时间戳已经过期,那些回调函数会立刻被调用执行。 ## 侧输出 -`ProcessFunction`的另一大特色功能是可以将一部分数据发送到另外一个流中,而且输出到的两个流数据类型可以不一样。这个功能被称为为侧输出(Side Output)。我们通过`OutputTag`来标记另外一个数据流: +`ProcessFunction` 的另一大特色功能是可以将一部分数据发送到另外一个流中,而且输出到的两个流数据类型可以不一样。这个功能被称为为侧输出(Side Output)。我们通过 `OutputTag` 来标记另外一个数据流: ```java OutputTag highVolumeOutput = new OutputTag("high-volume-trade"){}; ``` -在`ProcessFunction`中,我们可以使用`Context.output`方法将某类数据过滤出来。`OutputTag`是这个方法的第一个参数,用来表示输出到哪个数据流。 +在 `ProcessFunction` 中,我们可以使用 `Context.output` 方法将某类数据过滤出来。`OutputTag` 是这个方法的第一个参数,用来表示输出到哪个数据流。 ```java public static class SideOutputFunction @@ -162,39 +162,39 @@ public static class SideOutputFunction } ``` -在主逻辑中,通过下面的方法先调用`ProcessFunction`,再获取侧输出: +在主逻辑中,通过下面的方法先调用 `ProcessFunction`,再获取侧输出: ```java DataStream inputStream = ... SingleOutputStreamOperator mainStream = inputStream .keyBy(stock -> stock.symbol) - // 调用process函数,包含侧输出逻辑 + // 调用 process 函数,包含侧输出逻辑 .process(new SideOutputFunction()); DataStream sideOutputStream = mainStream.getSideOutput(highVolumeOutput); ``` -其中,`SingleOutputStreamOperator`是`DataStream`的一种,它只有一种输出。下面是它在Flink源码中的定义: +其中,`SingleOutputStreamOperator` 是 `DataStream` 的一种,它只有一种输出。下面是它在 Flink 源码中的定义: ```java public class SingleOutputStreamOperator extends DataStream { ... } ``` -这个例子中,`KeyedProcessFunction`的输出类型是`String`,而SideOutput的输出类型是`StockPrice`,两者可以不同。 +这个例子中,`KeyedProcessFunction` 的输出类型是 `String`,而 SideOutput 的输出类型是 `StockPrice`,两者可以不同。 -## 在两个流上使用`ProcessFunction` {#process-on-two-streams} +## 在两个流上使用 `ProcessFunction` {#process-on-two-streams} -我们在DataStream API部分曾提到使用`connect()`将两个数据流的合并,如果想从更细的粒度在两个数据流进行一些操作,可以使用`CoProcessFunction`或`KeyedCoProcessFunction`。这两个函数都有`processElement1()`和`processElement2()`方法,分别对第一个数据流和第二个数据流的每个元素进行处理。第一个数据流类型、第二个数据流类型和经过函数处理后的输出类型可以互不相同。尽管数据来自两个不同的流,但是他们可以共享同样的状态,所以可以参考下面的逻辑来实现两个数据流上的Join: +我们在 DataStream API 部分曾提到使用 `connect()` 将两个数据流的合并,如果想从更细的粒度在两个数据流进行一些操作,可以使用 `CoProcessFunction` 或 `KeyedCoProcessFunction`。这两个函数都有 `processElement1()` 和 `processElement2()` 方法,分别对第一个数据流和第二个数据流的每个元素进行处理。第一个数据流类型、第二个数据流类型和经过函数处理后的输出类型可以互不相同。尽管数据来自两个不同的流,但是他们可以共享同样的状态,所以可以参考下面的逻辑来实现两个数据流上的 Join: -* 创建一到多个状态,两个数据流都能访问到这些状态,这里以状态a为例。 -* `processElement1()`方法处理第一个数据流,更新状态a。 -* `processElement2()`方法处理第二个数据流,根据状态a中的数据,生成相应的输出。 +* 创建一到多个状态,两个数据流都能访问到这些状态,这里以状态 a 为例。 +* `processElement1()` 方法处理第一个数据流,更新状态 a。 +* `processElement2()` 方法处理第二个数据流,根据状态 a 中的数据,生成相应的输出。 -我们这次将股票价格结合媒体评价两个数据流一起讨论,假设对于某支股票有一个媒体评价数据流,媒体评价数据流包含了对该支股票的正负评价。两支数据流一起流入`KeyedCoProcessFunction`,`processElement2()`方法处理流入的媒体数据,将媒体评价更新到状态`mediaState`上,`processElement1()`方法处理流入的股票交易数据,获取`mediaState`状态,生成到新的数据流。两个方法分别处理两个数据流,共享一个状态,通过状态来通信。 +我们这次将股票价格结合媒体评价两个数据流一起讨论,假设对于某支股票有一个媒体评价数据流,媒体评价数据流包含了对该支股票的正负评价。两支数据流一起流入 `KeyedCoProcessFunction`,`processElement2()` 方法处理流入的媒体数据,将媒体评价更新到状态 `mediaState` 上,`processElement1()` 方法处理流入的股票交易数据,获取 `mediaState` 状态,生成到新的数据流。两个方法分别处理两个数据流,共享一个状态,通过状态来通信。 -在主逻辑中,我们将两个数据流`connect()`,然后按照股票代号进行`keyBy()`,进而使用`process()`: +在主逻辑中,我们将两个数据流 `connect()`,然后按照股票代号进行 `keyBy()`,进而使用 `process()`: ```scala // 读入股票数据流 @@ -205,11 +205,11 @@ DataStream mediaStream = ... DataStream joinStream = stockStream.connect(mediaStream) .keyBy("symbol", "symbol") - // 调用process函数 + // 调用 process 函数 .process(new JoinStockMediaProcessFunction()); ``` -`KeyedCoProcessFunction`的具体实现: +`KeyedCoProcessFunction` 的具体实现: ```scala /** @@ -221,7 +221,7 @@ public static class JoinStockMediaProcessFunction extends KeyedCoProcessFunction @Override public void open(Configuration parameters) throws Exception { - // 从RuntimeContext中获取状态 + // 从 RuntimeContext 中获取状态 mediaState = getRuntimeContext().getState( new ValueStateDescriptor("mediaStatusState", Types.STRING)); } @@ -237,16 +237,16 @@ public static class JoinStockMediaProcessFunction extends KeyedCoProcessFunction @Override public void processElement2(Media media, Context context, Collector collector) throws Exception { - // 第二个流更新mediaState + // 第二个流更新 mediaState mediaState.update(media.status); } } ``` -这个例子比较简单,没有使用Timer,实际的业务场景中状态一般用到Timer将过期的状态清除。两个数据流的中间数据放在状态中,为避免状态的无限增长,需要使用Timer清除过期数据。 +这个例子比较简单,没有使用 Timer,实际的业务场景中状态一般用到 Timer 将过期的状态清除。两个数据流的中间数据放在状态中,为避免状态的无限增长,需要使用 Timer 清除过期数据。 -很多互联网APP的机器学习样本拼接都可能依赖这个函数来实现:服务端的机器学习特征是实时生成的,用户在APP上的行为是交互后产生的,两者属于两个不同的数据流,用户行为是机器学习所需要标注的正负样本,因此可以按照这个逻辑来将两个数据流拼接起来,通过拼接更快得到下一轮机器学习的样本数据。 +很多互联网 APP 的机器学习样本拼接都可能依赖这个函数来实现:服务端的机器学习特征是实时生成的,用户在 APP 上的行为是交互后产生的,两者属于两个不同的数据流,用户行为是机器学习所需要标注的正负样本,因此可以按照这个逻辑来将两个数据流拼接起来,通过拼接更快得到下一轮机器学习的样本数据。 :::info -使用Event Time时,两个数据流必须都设置好Watermark,只设置一个流的Event Time和Watermark,无法在`CoProcessFunction`和`KeyedCoProcessFunction`中使用Timer功能,因为`process`算子无法确定自己应该以怎样的时间来处理数据。 +使用 Event Time 时,两个数据流必须都设置好 Watermark,只设置一个流的 Event Time 和 Watermark,无法在 `CoProcessFunction` 和 `KeyedCoProcessFunction` 中使用 Timer 功能,因为 `process` 算子无法确定自己应该以怎样的时间来处理数据。 ::: \ No newline at end of file diff --git a/doc/ch-time-window/time.md b/doc/ch-time-window/time.md index b1606a9..574130c 100644 --- a/doc/ch-time-window/time.md +++ b/doc/ch-time-window/time.md @@ -1,9 +1,9 @@ (time)= -# Flink的时间语义 +# Flink 的时间语义 :::{note} -本教程已出版为《Flink原理与实践》,感兴趣的读者请在各大电商平台购买! +本教程已出版为《Flink 原理与实践》,感兴趣的读者请在各大电商平台购买! ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -12,91 +12,112 @@ 在流处理中,时间是一个非常核心的概念,是整个系统的基石。我们经常会遇到这样的需求:给定一个时间窗口,比如一个小时,统计时间窗口内的数据指标。那如何界定哪些数据将进入这个窗口呢?在窗口的定义之前,首先需要确定一个作业使用什么样的时间语义。 -本节将介绍Flink的Event Time、Processing Time和Ingestion Time三种时间语义,接着会详细介绍Event Time和Watermark的工作机制,以及如何对数据流设置Event Time并生成Watermark。 +本节将介绍 Flink 的 Event Time、Processing Time 和 Ingestion Time 三种时间语义,接着会详细介绍 Event Time 和 Watermark 的工作机制,以及如何对数据流设置 Event Time 并生成 Watermark。 -## Flink的三种时间语义 +## Flink 的三种时间语义 -![Flink中三种时间语义](./img/three-types-of-time.png) +```{figure} ./img/three-types-of-time.png +--- +name: fig-three-types-of-time +width: 80% +align: center +--- +Flink 中三种时间语义 +``` -如上图所示,Flink支持三种时间语义。 +如 {numref}`fig-three-types-of-time` 所示,Flink 支持三种时间语义。 ### Event Time -Event Time指的是数据流中每个元素或者每个事件自带的时间属性,一般是事件发生的时间。由于事件从发生到进入Flink时间算子之间有很多环节,一个较早发生的事件因为延迟可能较晚到达,因此使用Event Time意味着事件到达有可能是乱序的。 +Event Time 指的是数据流中每个元素或者每个事件自带的时间属性,一般是事件发生的时间。由于事件从发生到进入 Flink 时间算子之间有很多环节,一个较早发生的事件因为延迟可能较晚到达,因此使用 Event Time 意味着事件到达有可能是乱序的。 -使用Event Time时,最理想的情况下,我们可以一直等待所有的事件到达后再进行时间窗口的处理。假设一个时间窗口内的所有数据都已经到达,基于Event Time的流处理会得到正确且一致的结果。无论我们是将同一个程序部署在不同的计算环境,还是在相同的环境下多次计算同一份数据,都能够得到同样的计算结果。我们根本不同担心乱序到达的问题。 +使用 Event Time 时,最理想的情况下,我们可以一直等待所有的事件到达后再进行时间窗口的处理。假设一个时间窗口内的所有数据都已经到达,基于 Event Time 的流处理会得到正确且一致的结果。无论我们是将同一个程序部署在不同的计算环境,还是在相同的环境下多次计算同一份数据,都能够得到同样的计算结果。我们根本不同担心乱序到达的问题。 -但这只是理想情况,现实中无法实现,因为我们既不知道究竟要等多长时间才能确认所有事件都已经到达,更不可能无限地一直等待下去。在实际应用中,当涉及到对事件按照时间窗口进行统计时,Flink会将窗口内的事件缓存下来,直到接收到一个Watermark,Watermark假设不会有更晚数据的到达。Watermark意味着在一个时间窗口下,Flink会等待一个有限的时间,这在一定程度上降低了计算结果的绝对准确性,而且增加了系统的延迟。比起其他几种时间语义,使用Event Time的好处是某个事件的时间是确定的,这样能够保证计算结果在一定程度上的可预测性。 +但这只是理想情况,现实中无法实现,因为我们既不知道究竟要等多长时间才能确认所有事件都已经到达,更不可能无限地一直等待下去。在实际应用中,当涉及到对事件按照时间窗口进行统计时,Flink 会将窗口内的事件缓存下来,直到接收到一个 Watermark,Watermark 假设不会有更晚数据的到达。Watermark 意味着在一个时间窗口下,Flink 会等待一个有限的时间,这在一定程度上降低了计算结果的绝对准确性,而且增加了系统的延迟。比起其他几种时间语义,使用 Event Time 的好处是某个事件的时间是确定的,这样能够保证计算结果在一定程度上的可预测性。 -一个基于Event Time的Flink程序中必须定义:一、每条数据的Event Time时间戳作为Event Tme,二、如何生成Watermark。我们可以使用数据自带的时间作为Event Time,也可以在数据到达Flink后人为给Event Time赋值。 +一个基于 Event Time 的 Flink 程序中必须定义:一、每条数据的 Event Time 时间戳作为 Event Tme,二、如何生成 Watermark。我们可以使用数据自带的时间作为 Event Time,也可以在数据到达 Flink 后人为给 Event Time 赋值。 -总之,使用Event Time的优势是结果的可预测性,缺点是缓存较大,增加了延迟,且调试和定位问题更复杂。 +总之,使用 Event Time 的优势是结果的可预测性,缺点是缓存较大,增加了延迟,且调试和定位问题更复杂。 ### Processing Time -对于某个算子来说,Processing Time指算子使用当前机器的系统时钟时间。在Processing Time的时间窗口场景下,无论事件什么时候发生,只要该事件在某个时间段到达了某个算子,就会被归结到该窗口下,不需要Watermark机制。对于一个程序,在同一个计算环境来说,每个算子都有一定的耗时,同一个事件的Processing Time,第n个算子和第n+1个算子不同。如果一个程序在不同的集群和环境下执行,限于软硬件因素,不同环境下前序算子处理速度不同,对于下游算子来说,事件的Processing Time也会不同,不同环境下时间窗口的计算结果会发生变化。因此,Processing Time在时间窗口下的计算会有不确定性。 +对于某个算子来说,Processing Time 指算子使用当前机器的系统时钟时间。在 Processing Time 的时间窗口场景下,无论事件什么时候发生,只要该事件在某个时间段到达了某个算子,就会被归结到该窗口下,不需要 Watermark 机制。对于一个程序,在同一个计算环境来说,每个算子都有一定的耗时,同一个事件的 Processing Time,第 n 个算子和第 n+1 个算子不同。如果一个程序在不同的集群和环境下执行,限于软硬件因素,不同环境下前序算子处理速度不同,对于下游算子来说,事件的 Processing Time 也会不同,不同环境下时间窗口的计算结果会发生变化。因此,Processing Time 在时间窗口下的计算会有不确定性。 -Processing Time只依赖当前执行机器的系统时钟,不需要依赖Watermark,无需缓存。Processing Time是实现起来非常简单,也是延迟最小的一种时间语义。 +Processing Time 只依赖当前执行机器的系统时钟,不需要依赖 Watermark,无需缓存。Processing Time 是实现起来非常简单,也是延迟最小的一种时间语义。 ### Ingestion Time -Ingestion Time是事件到达Flink Source的时间。从Source到下游各个算子中间可能有很多计算环节,任何一个算子的处理速度快慢可能影响到下游算子的Processing Time。而Ingestion Time定义的是数据流最早进入Flink的时间,因此不会被算子处理速度影响。 +Ingestion Time 是事件到达 Flink Source 的时间。从 Source 到下游各个算子中间可能有很多计算环节,任何一个算子的处理速度快慢可能影响到下游算子的 Processing Time。而 Ingestion Time 定义的是数据流最早进入 Flink 的时间,因此不会被算子处理速度影响。 -Ingestion Time通常是Event Time和Processing Time之间的一个折中方案。比起Event Time,Ingestion Time可以不需要设置复杂的Watermark,因此也不需要太多缓存,延迟较低。比起Processing Time,Ingestion Time的时间是Source赋值的,一个事件在整个处理过程从头至尾都使用这个时间,而且后续算子不受前序算子处理速度的影响,计算结果相对准确一些,但计算成本比Processing Time稍高。 +Ingestion Time 通常是 Event Time 和 Processing Time 之间的一个折中方案。比起 Event Time,Ingestion Time 可以不需要设置复杂的 Watermark,因此也不需要太多缓存,延迟较低。比起 Processing Time,Ingestion Time 的时间是 Source 赋值的,一个事件在整个处理过程从头至尾都使用这个时间,而且后续算子不受前序算子处理速度的影响,计算结果相对准确一些,但计算成本比 Processing Time 稍高。 ## 设置时间语义 -在Flink中,我们需要在执行环境层面设置使用哪种时间语义。下面的代码使用Event Time: +在 Flink 中,我们需要在执行环境层面设置使用哪种时间语义。下面的代码使用 Event Time: ```java env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); ``` -如果想用另外两种时间语义,需要替换为:`TimeCharacteristic.ProcessingTime`和`TimeCharacteristic.IngestionTime`。 +如果想用另外两种时间语义,需要替换为:`TimeCharacteristic.ProcessingTime` 和 `TimeCharacteristic.IngestionTime`。 :::info -首次进行时间相关计算的读者可能因为没有正确设置数据流时间相关属性而得不到正确的结果。包括本书前序章节的示例代码在内,一些测试或演示代码常常使用`StreamExecutionEnvironment.fromElements()`或`StreamExecutionEnvironment.fromCollection()`方法来创建一个`DataStream`,用这种方法生成的`DataStream`没有时序性,如果不对元素设置时间戳,无法进行时间相关的计算。或者说,在一个没有时序性的数据流上进行时间相关计算,无法得到正确的结果。想要建立数据之间的时序性,一种方法是继续用`StreamExecutionEnvironment.fromElements()`或`StreamExecutionEnvironment.fromCollection()`方法,使用Event Time时间语义,对数据流中每个元素的Event Time进行赋值。另一种方法是使用其他的Source,比如`StreamExecutionEnvironment.socketTextStream()`或Kafka,这些Source的输入数据本身带有时序性,支持Processinng Time时间语义。 +首次进行时间相关计算的读者可能因为没有正确设置数据流时间相关属性而得不到正确的结果。包括本书前序章节的示例代码在内,一些测试或演示代码常常使用 `StreamExecutionEnvironment.fromElements()` 或 `StreamExecutionEnvironment.fromCollection()` 方法来创建一个 `DataStream`,用这种方法生成的 `DataStream` 没有时序性,如果不对元素设置时间戳,无法进行时间相关的计算。或者说,在一个没有时序性的数据流上进行时间相关计算,无法得到正确的结果。想要建立数据之间的时序性,一种方法是继续用 `StreamExecutionEnvironment.fromElements()` 或 `StreamExecutionEnvironment.fromCollection()` 方法,使用 Event Time 时间语义,对数据流中每个元素的 Event Time 进行赋值。另一种方法是使用其他的 Source,比如 `StreamExecutionEnvironment.socketTextStream()` 或 Kafka,这些 Source 的输入数据本身带有时序性,支持 Processinng Time 时间语义。 ::: -## Event Time和Watermark +## Event Time 和 Watermark -Flink的三种时间语义中,Processing Time和Ingestion Time都可以不用设置Watermark。如果我们要使用Event Time语义,以下两项配置缺一不可:第一,使用一个时间戳为数据流中每个事件的Event Time赋值;第二,生成Watermark。 +Flink 的三种时间语义中,Processing Time 和 Ingestion Time 都可以不用设置 Watermark。如果我们要使用 Event Time 语义,以下两项配置缺一不可:第一,使用一个时间戳为数据流中每个事件的 Event Time 赋值;第二,生成 Watermark。 -实际上,Event Time是每个事件的元数据,如果不设置,Flink并不知道每个事件的发生时间,我们必须要为每个事件的Event Time赋值一个时间戳。关于时间戳,包括Flink在内的绝大多数系统都使用Unix时间戳系统(Unix time或Unix epoch)。Unix时间戳系统以1970-01-01 00:00:00.000 为起始点,其他时间记为距离该起始时间的整数差值,一般是毫秒(millisecond)精度。 +实际上,Event Time 是每个事件的元数据,如果不设置,Flink 并不知道每个事件的发生时间,我们必须要为每个事件的 Event Time 赋值一个时间戳。关于时间戳,包括 Flink 在内的绝大多数系统都使用 Unix 时间戳系统(Unix time 或 Unix epoch)。Unix 时间戳系统以 1970-01-01 00:00:00.000 为起始点,其他时间记为距离该起始时间的整数差值,一般是毫秒(millisecond)精度。 -有了Event Time时间戳,我们还必须生成Watermark。Watermark是Flink插入到数据流中的一种特殊的数据结构,它包含一个时间戳,并假设后续不会有小于该时间戳的数据。下图展示了一个乱序数据流,其中方框是单个事件,方框中的数字是其对应的Event Time时间戳,圆圈为Watermark,圆圈中的数字为Watermark对应的时间戳。 +有了 Event Time 时间戳,我们还必须生成 Watermark。Watermark 是 Flink 插入到数据流中的一种特殊的数据结构,它包含一个时间戳,并假设后续不会有小于该时间戳的数据。{numref}`fig-event-time-watermark` 展示了一个乱序数据流,其中方框是单个事件,方框中的数字是其对应的 Event Time 时间戳,圆圈为 Watermark,圆圈中的数字为 Watermark 对应的时间戳。 -![一个包含Watermark的乱序数据流](./img/event-time-watermark.png) +```{figure} ./img/event-time-watermark.png +--- +name: fig-event-time-watermark +width: 80% +align: center +--- +一个包含 Watermark 的乱序数据流 +``` -Watermark的生成有以下几点需要注意: +Watermark 的生成有以下几点需要注意: -* Watermark与事件的时间戳紧密相关。一个时间戳为t的Watermark会假设后续到达事件的时间戳都大于t。 -* 假如Flink算子接收到一个违背上述规则的事件,该事件将被认定为迟到数据,如上图中时间戳为19的事件比Watermark(20)更晚到达。Flink提供了一些其他机制来处理迟到数据。 -* Watermark时间戳必须单调递增,以保证时间不会倒流。 -* Watermark机制允许用户来控制准确度和延迟。Watermark设置得与事件时间戳相距紧凑,会产生不少迟到数据,影响计算结果的准确度,整个应用的延迟很低;Watermark设置得非常宽松,准确度能够得到提升,但应用的延迟较高,因为Flink必须等待更长的时间才进行计算。 +* Watermark 与事件的时间戳紧密相关。一个时间戳为 t 的 Watermark 会假设后续到达事件的时间戳都大于 t。 +* 假如 Flink 算子接收到一个违背上述规则的事件,该事件将被认定为迟到数据,如上图中时间戳为 19 的事件比 Watermark(20) 更晚到达。Flink 提供了一些其他机制来处理迟到数据。 +* Watermark 时间戳必须单调递增,以保证时间不会倒流。 +* Watermark 机制允许用户来控制准确度和延迟。Watermark 设置得与事件时间戳相距紧凑,会产生不少迟到数据,影响计算结果的准确度,整个应用的延迟很低;Watermark 设置得非常宽松,准确度能够得到提升,但应用的延迟较高,因为 Flink 必须等待更长的时间才进行计算。 -## 分布式环境下Watermark的传播 +## 分布式环境下 Watermark 的传播 -在实际计算过程中,Flink的算子一般分布在多个并行的算子子任务(或者称为实例、分区)上,Flink需要将Watermark在并行环境下向前传播。如下图中第一步所示,Flink的每个并行算子子任务会维护针对该子任务的Event Time时钟,这个时钟记录了这个算子子任务Watermark处理进度,随着上游Watermark数据不断向下发送,算子子任务的Event Time时钟也要不断向前更新。由于上游各分区的处理速度不同,到达当前算子的Watermark也会有先后快慢之分,每个算子子任务会维护来自上游不同分区的Watermark信息,这是一个列表,列表内对应上游算子各分区的Watermark时间戳等信息。 +在实际计算过程中,Flink 的算子一般分布在多个并行的算子子任务(或者称为实例、分区)上,Flink 需要将 Watermark 在并行环境下向前传播。如 {numref}`fig-parallel-watermark` 中第一步所示,Flink 的每个并行算子子任务会维护针对该子任务的 Event Time 时钟,这个时钟记录了这个算子子任务 Watermark 处理进度,随着上游 Watermark 数据不断向下发送,算子子任务的 Event Time 时钟也要不断向前更新。由于上游各分区的处理速度不同,到达当前算子的 Watermark 也会有先后快慢之分,每个算子子任务会维护来自上游不同分区的 Watermark 信息,这是一个列表,列表内对应上游算子各分区的 Watermark 时间戳等信息。 -![并行环境下Watermark的前向传播过程](./img/parallel-watermark.png) +```{figure} ./img/parallel-watermark.png +--- +name: fig-parallel-watermark +width: 80% +align: center +--- +并行环境下 Watermark 的前向传播过程 +``` -当上游某分区有Watermark进入该算子子任务后,Flink先判断新流入的Watermark时间戳是否大于Partition Watermark列表内记录的该分区的历史Watermark时间戳,如果新流入的更大,则更新该分区的Watermark。如上图中第二步所示,某个分区新流入的Watermark时间戳为4,算子子任务维护的该分区Watermark为1,那么Flink会更新Partition Watermark列表为最新的时间戳4。接着,Flink会遍历Partition Watermark列表中的所有时间戳,选择最小的一个作为该算子子任务的Event Time。同时,Flink会将更新的Event Time作为Watermark发送给下游所有算子子任务。算子子任务Event Time的更新意味着该子任务将时间推进到了这个时间,该时间之前的事件已经被处理并发送到下游。上图中第二步和第三步均执行了这个过程。Partition Watermark列表更新后,导致列表中最小时间戳发生了变化,算子子任务的Event Time时钟也相应进行了更新。整个过程可以理解为:数据流中的Watermark推动算子子任务的Watermark更新。Watermark像一个幕后推动者,不断将流处理系统的Event Time向前推进。我们可以将这种机制总结为: +当上游某分区有 Watermark 进入该算子子任务后,Flink 先判断新流入的 Watermark 时间戳是否大于 Partition Watermark 列表内记录的该分区的历史 Watermark 时间戳,如果新流入的更大,则更新该分区的 Watermark。如上图中第二步所示,某个分区新流入的 Watermark 时间戳为 4,算子子任务维护的该分区 Watermark 为 1,那么 Flink 会更新 Partition Watermark 列表为最新的时间戳 4。接着,Flink 会遍历 Partition Watermark 列表中的所有时间戳,选择最小的一个作为该算子子任务的 Event Time。同时,Flink 会将更新的 Event Time 作为 Watermark 发送给下游所有算子子任务。算子子任务 Event Time 的更新意味着该子任务将时间推进到了这个时间,该时间之前的事件已经被处理并发送到下游。上图中第二步和第三步均执行了这个过程。Partition Watermark 列表更新后,导致列表中最小时间戳发生了变化,算子子任务的 Event Time 时钟也相应进行了更新。整个过程可以理解为:数据流中的 Watermark 推动算子子任务的 Watermark 更新。Watermark 像一个幕后推动者,不断将流处理系统的 Event Time 向前推进。我们可以将这种机制总结为: -1. Flink某算子子任务根据各上游流入的Watermark来更新Partition Watermark列表。 -2. 选取Partition Watermark列表中最小的时间作为该算子子任务的Event Time,并将这个时间发送给下游算子。 +1. Flink 某算子子任务根据各上游流入的 Watermark 来更新 Partition Watermark 列表。 +2. 选取 Partition Watermark 列表中最小的时间作为该算子子任务的 Event Time,并将这个时间发送给下游算子。 -这样的设计机制满足了并行环境下Watermark在各算子中的传播问题,但是假如某个上游分区的Watermark一直不更新,Partition Watermark列表其他地方都在正常更新,唯独个别分区的Watermark停滞,这会导致算子的Event Time时钟不更新,相应的时间窗口计算也不会被触发,大量的数据积压在算子内部得不到处理,整个流处理处于空转状态。这种问题可能出现在数据流自带Watermark的场景,自带的Watermark在某些分区下没有及时更新。针对这种问题,一种解决办法是根据机器当前的时钟,周期性地生成Watermark。 +这样的设计机制满足了并行环境下 Watermark 在各算子中的传播问题,但是假如某个上游分区的 Watermark 一直不更新,Partition Watermark 列表其他地方都在正常更新,唯独个别分区的 Watermark 停滞,这会导致算子的 Event Time 时钟不更新,相应的时间窗口计算也不会被触发,大量的数据积压在算子内部得不到处理,整个流处理处于空转状态。这种问题可能出现在数据流自带 Watermark 的场景,自带的 Watermark 在某些分区下没有及时更新。针对这种问题,一种解决办法是根据机器当前的时钟,周期性地生成 Watermark。 -此外,在`union()`等多数据流处理时,Flink也使用上述Watermark更新机制,那就意味着,多个数据流的时间必须对齐,如果一方的Watermark时间较老,那整个应用的Event Time时钟也会使用这个较老的时间,其他数据流的数据会被积压。一旦发现某个数据流不再生成新的Watermark,我们要在`SourceFunction`中的`SourceContext`里调用`markAsTemporarilyIdle()`设置该数据流为空闲状态,避免空转。 +此外,在 `union()` 等多数据流处理时,Flink 也使用上述 Watermark 更新机制,那就意味着,多个数据流的时间必须对齐,如果一方的 Watermark 时间较老,那整个应用的 Event Time 时钟也会使用这个较老的时间,其他数据流的数据会被积压。一旦发现某个数据流不再生成新的 Watermark,我们要在 `SourceFunction` 中的 `SourceContext` 里调用 `markAsTemporarilyIdle()` 设置该数据流为空闲状态,避免空转。 -## 抽取时间戳及生成Watermark +## 抽取时间戳及生成 Watermark -至此,我们已经了解了Flink的Event Time和Watermark机制的大致工作原理,接下来我们将展示如何在代码层面设置时间戳并生成Watermark。因为时间在后续处理中都会用到,时间的设置要在任何时间窗口操作之前。总之,时间越早设置越好。对时间和Watermark的设置只对Event Time时间语义起作用,如果一个作业基于Processing Time或Ingestion Time,那设置时间没有什么意义。Flink提供了新老两种方法设置时间戳和Watermark。无论哪种方法,我们都需要明白,Event Time时间戳和Watermark是捆绑在一起的,一旦涉及到Event Time,就必须抽取时间戳并生成Watermark。 +至此,我们已经了解了 Flink 的 Event Time 和 Watermark 机制的大致工作原理,接下来我们将展示如何在代码层面设置时间戳并生成 Watermark。因为时间在后续处理中都会用到,时间的设置要在任何时间窗口操作之前。总之,时间越早设置越好。对时间和 Watermark 的设置只对 Event Time 时间语义起作用,如果一个作业基于 Processing Time 或 Ingestion Time,那设置时间没有什么意义。Flink 提供了新老两种方法设置时间戳和 Watermark。无论哪种方法,我们都需要明白,Event Time 时间戳和 Watermark 是捆绑在一起的,一旦涉及到 Event Time,就必须抽取时间戳并生成 Watermark。 ### Source -我们可以在Source阶段完成时间戳抽取和Watermark生成的工作。Flink 1.11开始推出了新的Source接口,并计划逐步替代老的Source接口,我们将在第七章展示两种接口的具体工作方式,这里暂时以老的Source接口来展示时间戳抽取和Watermark生成的过程。在老的Source接口中,通过自定义`SourceFunction`或`RichSourceFunction`,在`SourceContext`里重写`void collectWithTimestamp(T element, long timestamp)`和`void emitWatermark(Watermark mark)`两个方法,其中,`collectWithTimestamp()`给数据流中的每个元素T赋值一个`timestamp`作为Event Time,`emitWatermark()`生成Watermark。下面的代码展示了调用这两个方法抽取时间戳并生成Watermark。 +我们可以在 Source 阶段完成时间戳抽取和 Watermark 生成的工作。Flink 1.11 开始推出了新的 Source 接口,并计划逐步替代老的 Source 接口,我们将在第七章展示两种接口的具体工作方式,这里暂时以老的 Source 接口来展示时间戳抽取和 Watermark 生成的过程。在老的 Source 接口中,通过自定义 `SourceFunction` 或 `RichSourceFunction`,在 `SourceContext` 里重写 `void collectWithTimestamp(T element, long timestamp)` 和 `void emitWatermark(Watermark mark)` 两个方法,其中,`collectWithTimestamp()` 给数据流中的每个元素 T 赋值一个 `timestamp` 作为 Event Time,`emitWatermark()` 生成 Watermark。下面的代码展示了调用这两个方法抽取时间戳并生成 Watermark。 ```java class MyType { @@ -123,11 +144,11 @@ class MySource extends RichSourceFunction[MyType] { } ``` -### Source之后 +### Source 之后 -如果我们不想修改Source,也可以在Source之后,通过`assignTimestampsAndWatermarks()`方法来设置。与Source接口一样,Flink 1.11重构了`assignTimestampsAndWatermarks()`方法,重构后的`assignTimestampsAndWatermarks()`方法和新的Source接口结合更好、表达能力更强,这里介绍一下重构后的`assignTimestampsAndWatermarks()`方法。 +如果我们不想修改 Source,也可以在 Source 之后,通过 `assignTimestampsAndWatermarks()` 方法来设置。与 Source 接口一样,Flink 1.11 重构了 `assignTimestampsAndWatermarks()` 方法,重构后的 `assignTimestampsAndWatermarks()` 方法和新的 Source 接口结合更好、表达能力更强,这里介绍一下重构后的 `assignTimestampsAndWatermarks()` 方法。 -新的`assignTimestampsAndWatermarks()`方法主要依赖`WatermarkStrategy`,通过`WatermarkStrategy`我们可以为每个元素抽取时间戳并生成Watermark。`assignTimestampsAndWatermarks()`方法结合`WatermarkStrategy`的大致使用方式为: +新的 `assignTimestampsAndWatermarks()` 方法主要依赖 `WatermarkStrategy`,通过 `WatermarkStrategy` 我们可以为每个元素抽取时间戳并生成 Watermark。`assignTimestampsAndWatermarks()` 方法结合 `WatermarkStrategy` 的大致使用方式为: ```java DataStream stream = ... @@ -140,25 +161,25 @@ DataStream withTimestampsAndWatermarks = stream ); ``` -可以看到`WatermarkStrategy.forGenerator(...).withTimestampAssigner(...)`链式调用了两个方法,`forGenerator()`方法用来生成Watermark,`withTimestampAssigner()`方法用来为数据流的每个元素设置时间戳。 +可以看到 `WatermarkStrategy.forGenerator(...).withTimestampAssigner(...)` 链式调用了两个方法,`forGenerator()` 方法用来生成 Watermark,`withTimestampAssigner()` 方法用来为数据流的每个元素设置时间戳。 -`withTimestampAssigner()`方法相对更好理解,它抽取数据流中的每个元素的时间戳,一般是告知Flink具体哪个字段为时间戳字段。例如,一个`MyType`数据流中`eventTime`字段为时间戳,数据流的每个元素为`event`,使用Lambda表达式来抽取时间戳,可以写成:`.withTimestampAssigner((event, timestamp) -> event.eventTime)`。这个Lambda表达式可以帮我们抽取数据流元素中的时间戳``eventTime``,我们暂且可以不用关注第二个参数`timestamp`。 +`withTimestampAssigner()` 方法相对更好理解,它抽取数据流中的每个元素的时间戳,一般是告知 Flink 具体哪个字段为时间戳字段。例如,一个 `MyType` 数据流中 `eventTime` 字段为时间戳,数据流的每个元素为 `event`,使用 Lambda 表达式来抽取时间戳,可以写成:`.withTimestampAssigner((event, timestamp) -> event.eventTime)`。这个 Lambda 表达式可以帮我们抽取数据流元素中的时间戳 ``eventTime``,我们暂且可以不用关注第二个参数 `timestamp`。 -基于Event Time时间戳,我们还要设置Watermark生成策略,一种方法是自己实现一些Watermark策略类,并使用`forGenerator()`方法调用这些Watermark策略类。我们曾多次提到,Watermark是一种插入到数据流中的特殊元素,Watermark元素包含一个时间戳,当某个算子接收到一个Watermark元素时,算子会假设早于这条Watermark的数据流元素都已经到达。那么如何向数据流中插入Watermark呢?Flink提供了两种方式,一种是周期性地(Periodic)生成Watermark,一种是逐个式地(Punctuated)生成Watermark。无论是Periodic方式还是Punctuated方式,都需要实现`WatermarkGenerator`接口类,如下所示,`T`为数据流元素类型。 +基于 Event Time 时间戳,我们还要设置 Watermark 生成策略,一种方法是自己实现一些 Watermark 策略类,并使用 `forGenerator()` 方法调用这些 Watermark 策略类。我们曾多次提到,Watermark 是一种插入到数据流中的特殊元素,Watermark 元素包含一个时间戳,当某个算子接收到一个 Watermark 元素时,算子会假设早于这条 Watermark 的数据流元素都已经到达。那么如何向数据流中插入 Watermark 呢?Flink 提供了两种方式,一种是周期性地(Periodic)生成 Watermark,一种是逐个式地(Punctuated)生成 Watermark。无论是 Periodic 方式还是 Punctuated 方式,都需要实现 `WatermarkGenerator` 接口类,如下所示,`T` 为数据流元素类型。 ```java -// Flink源码 -// 生成Watermark的接口类 +// Flink 源码 +// 生成 Watermark 的接口类 @Public public interface WatermarkGenerator { - // 数据流中的每个元素流入后都会调用onEvent()方法 - // Punctunated方式下,一般根据数据流中的元素是否有特殊标记来判断是否需要生成Watermark - // Periodic方式下,一般用于记录各元素的Event Time时间戳 + // 数据流中的每个元素流入后都会调用 onEvent() 方法 + // Punctunated 方式下,一般根据数据流中的元素是否有特殊标记来判断是否需要生成 Watermark + // Periodic 方式下,一般用于记录各元素的 Event Time 时间戳 void onEvent(T event, long eventTimestamp, WatermarkOutput output); - // 每隔固定周期调用onPeriodicEmit()方法 - // 一般主要用于Periodic方式 + // 每隔固定周期调用 onPeriodicEmit() 方法 + // 一般主要用于 Periodic 方式 // 固定周期用 ExecutionConfig#setAutoWatermarkInterval() 方法设置 void onPeriodicEmit(WatermarkOutput output); } @@ -166,43 +187,43 @@ public interface WatermarkGenerator { #### Periodic -假如我们想周期性地生成Watermark,这个周期是可以设置的,默认情况下是每200毫秒生成一个Watermark,或者说Flink每200毫秒调用一次生成Watermark的方法。我们可以在执行环境中设置这个周期: +假如我们想周期性地生成 Watermark,这个周期是可以设置的,默认情况下是每 200 毫秒生成一个 Watermark,或者说 Flink 每 200 毫秒调用一次生成 Watermark 的方法。我们可以在执行环境中设置这个周期: ```java -// 每5000毫秒生成一个Watermark +// 每 5000 毫秒生成一个 Watermark env.getConfig.setAutoWatermarkInterval(5000L) ``` -下面的代码定期生成Watermark,数据流元素是一个`Tuple2`,第二个字段`Long`是Event Time时间戳。 +下面的代码定期生成 Watermark,数据流元素是一个 `Tuple2`,第二个字段 `Long` 是 Event Time 时间戳。 ```java -// 定期生成Watermark +// 定期生成 Watermark // 数据流元素 Tuple2 共两个字段 // 第一个字段为数据本身 // 第二个字段是时间戳 public static class MyPeriodicGenerator implements WatermarkGenerator> { - private final long maxOutOfOrderness = 60 * 1000; // 1分钟 - private long currentMaxTimestamp; // 已抽取的Timestamp最大值 + private final long maxOutOfOrderness = 60 * 1000; // 1 分钟 + private long currentMaxTimestamp; // 已抽取的 Timestamp 最大值 @Override public void onEvent(Tuple2 event, long eventTimestamp, WatermarkOutput output) { - // 更新currentMaxTimestamp为当前遇到的最大值 + // 更新 currentMaxTimestamp 为当前遇到的最大值 currentMaxTimestamp = Math.max(currentMaxTimestamp, eventTimestamp); } @Override public void onPeriodicEmit(WatermarkOutput output) { - // Watermark比currentMaxTimestamp最大值慢1分钟 + // Watermark 比 currentMaxTimestamp 最大值慢 1 分钟 output.emitWatermark(new Watermark(currentMaxTimestamp - maxOutOfOrderness)); } } ``` -我们用变量`currentMaxTimestamp`记录已抽取的时间戳最大值,每个元素到达后都会调用`onEvent()`方法,更新`currentMaxTimestamp`时间戳最大值。当需要发射Watermark时,以时间戳最大值减1分钟作为Watermark发送出去。这种Watermark策略假设Watermark比已流入数据的最大时间戳慢1分钟,超过1分钟的将被视为迟到数据。 +我们用变量 `currentMaxTimestamp` 记录已抽取的时间戳最大值,每个元素到达后都会调用 `onEvent()` 方法,更新 `currentMaxTimestamp` 时间戳最大值。当需要发射 Watermark 时,以时间戳最大值减 1 分钟作为 Watermark 发送出去。这种 Watermark 策略假设 Watermark 比已流入数据的最大时间戳慢 1 分钟,超过 1 分钟的将被视为迟到数据。 -实现好`MyPeriodicGenerator`后,我们要用`forGenerator()`方法调用这个类: +实现好 `MyPeriodicGenerator` 后,我们要用 `forGenerator()` 方法调用这个类: ```java // 第二个字段是时间戳 @@ -212,7 +233,7 @@ DataStream> watermark = input.assignTimestampsAndWatermarks .withTimestampAssigner((event, recordTimestamp) -> event.f1)); ``` -考虑到这种基于时间戳最大值的场景比较普遍,Flink已经帮我们封装好了这样的代码,名为`BoundedOutOfOrdernessWatermarks`,其内部实现与上面的代码几乎一致,我们只需要将最大的延迟时间作为参数传入: +考虑到这种基于时间戳最大值的场景比较普遍,Flink 已经帮我们封装好了这样的代码,名为 `BoundedOutOfOrdernessWatermarks`,其内部实现与上面的代码几乎一致,我们只需要将最大的延迟时间作为参数传入: ```java // 第二个字段是时间戳 @@ -225,7 +246,7 @@ DataStream> input = env ); ``` -除了`BoundedOutOfOrdernessWatermarks`,另外一种预置的Watermark策略为`AscendingTimestampsWatermarks`。`AscendingTimestampsWatermarks`其实是继承了`BoundedOutOfOrdernessWatermarks`,只不过`AscendingTimestampsWatermarks`会假设Event Time时间戳单调递增,从内部代码实现上来说,Watermark的发射时间为时间戳最大值,不添加任何延迟。使用时,可以参照下面的方式: +除了 `BoundedOutOfOrdernessWatermarks`,另外一种预置的 Watermark 策略为 `AscendingTimestampsWatermarks`。`AscendingTimestampsWatermarks` 其实是继承了 `BoundedOutOfOrdernessWatermarks`,只不过 `AscendingTimestampsWatermarks` 会假设 Event Time 时间戳单调递增,从内部代码实现上来说,Watermark 的发射时间为时间戳最大值,不添加任何延迟。使用时,可以参照下面的方式: ```java // 第二个字段是时间戳 @@ -240,14 +261,14 @@ DataStream> input = env #### Punctuated -假如数据流元素有一些特殊标记,标记了某些元素为Watermark,我们可以逐个检查数据流各元素,根据是否有特殊标记判断是否要生成Watermark。下面的代码以一个`Tuple3`为例,其中第二个字段是时间戳,第三个字段标记了是否为Watermark。我们只需要在`onEvent()`方法中根据第三个字段来决定是否生成一条新的Watermark,由于这里不需要周期性的操作,因此`onPeriodicEmit()`方法里不需要做任何事情。 +假如数据流元素有一些特殊标记,标记了某些元素为 Watermark,我们可以逐个检查数据流各元素,根据是否有特殊标记判断是否要生成 Watermark。下面的代码以一个 `Tuple3` 为例,其中第二个字段是时间戳,第三个字段标记了是否为 Watermark。我们只需要在 `onEvent()` 方法中根据第三个字段来决定是否生成一条新的 Watermark,由于这里不需要周期性的操作,因此 `onPeriodicEmit()` 方法里不需要做任何事情。 ```java -// 逐个检查数据流中的元素,根据元素中的特殊字段,判断是否要生成Watermark +// 逐个检查数据流中的元素,根据元素中的特殊字段,判断是否要生成 Watermark // 数据流元素 Tuple3 共三个字段 // 第一个字段为数据本身 // 第二个字段是时间戳 -// 第三个字段判断是否为Watermark的标记 +// 第三个字段判断是否为 Watermark 的标记 public static class MyPunctuatedGenerator implements WatermarkGenerator> { @Override @@ -259,16 +280,16 @@ public static class MyPunctuatedGenerator implements WatermarkGenerator ![](https://img.shields.io/badge/JD-%E8%B4%AD%E4%B9%B0%E9%93%BE%E6%8E%A5-red) @@ -12,108 +12,136 @@ 在批处理场景下,数据已经是按照某个时间维度分批次地存储了。一些公司经常将用户行为日志按天存储在一个文件目录下,另外一些开放数据集都会说明数据采集的时间始末。因此,对于批处理任务,处理一个数据集,其实就是对该数据集对应的时间窗口内的数据进行处理。 -在流计算场景下,数据以源源不断的流的形式存在,数据一直在产生,没有始末。我们要对数据进行处理时,往往需要明确一个时间窗口,比如,数据在“每秒”、“每小时”、“每天”的维度下的一些特性。在一个时间窗口维度上对数据进行聚合,划分窗口是流处理需要解决的问题。Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理。本节将介绍如何在Flink上进行窗口的计算。 +在流计算场景下,数据以源源不断的流的形式存在,数据一直在产生,没有始末。我们要对数据进行处理时,往往需要明确一个时间窗口,比如,数据在“每秒”、“每小时”、“每天”的维度下的一些特性。在一个时间窗口维度上对数据进行聚合,划分窗口是流处理需要解决的问题。Flink 的窗口算子为我们提供了方便易用的 API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理。本节将介绍如何在 Flink 上进行窗口的计算。 ## 窗口程序的骨架 -一个Flink窗口程序的大致骨架结构如下所示: +一个 Flink 窗口程序的大致骨架结构如下所示: ```scala // Keyed Window stream - .keyBy() // 按照一个Key进行分组 + .keyBy() // 按照一个 Key 进行分组 .window() // 将数据流中的元素分配到相应的窗口中 - [.trigger()] // 指定触发器Trigger(可选) - [.evictor()] // 指定清除器Evictor(可选) - .reduce/aggregate/process() // 窗口处理函数Window Function + [.trigger()] // 指定触发器 Trigger(可选) + [.evictor()] // 指定清除器 Evictor(可选) + .reduce/aggregate/process() // 窗口处理函数 Window Function // Non-Keyed Window stream .windowAll(WindowAssigner) // 不分组,将数据流中的所有元素分配到相应的窗口中 - [.trigger()] // 指定触发器Trigger(可选) - [.evictor()] // 指定清除器Evictor(可选) - .reduce/aggregate/process() // 窗口处理函数Window Function + [.trigger()] // 指定触发器 Trigger(可选) + [.evictor()] // 指定清除器 Evictor(可选) + .reduce/aggregate/process() // 窗口处理函数 Window Function ``` -首先,我们要决定是否对一个`DataStream`按照Key进行分组,这一步必须在窗口计算之前进行。经过`keyBy()`的数据流将形成多组数据,下游算子的多个实例可以并行计算。`windowAll()`不对数据流进行分组,所有数据将发送到下游算子单个实例上。决定是否分组之后,窗口的后续操作基本相同,本文所涉及内容主要针对经过`keyBy()`的窗口(Keyed Window),经过`windowAll()`的是不分组的窗口(Non-Keyed Window),它们的原理和操作与Keyed Window类似,唯一的区别在于所有数据将发送给下游的单个实例,或者说下游算子的并行度为1。 +首先,我们要决定是否对一个 `DataStream` 按照 Key 进行分组,这一步必须在窗口计算之前进行。经过 `keyBy()` 的数据流将形成多组数据,下游算子的多个实例可以并行计算。`windowAll()` 不对数据流进行分组,所有数据将发送到下游算子单个实例上。决定是否分组之后,窗口的后续操作基本相同,本文所涉及内容主要针对经过 `keyBy()` 的窗口(Keyed Window),经过 `windowAll()` 的是不分组的窗口(Non-Keyed Window),它们的原理和操作与 Keyed Window 类似,唯一的区别在于所有数据将发送给下游的单个实例,或者说下游算子的并行度为 1。 -Flink窗口的骨架程序中有两个必须的两个操作: +Flink 窗口的骨架程序中有两个必须的两个操作: * 使用窗口分配器(WindowAssigner)将数据流中的元素分配到对应的窗口。 -* 当满足窗口触发条件后,对窗口内的数据使用窗口处理函数(Window Function)进行处理,常用的Window Function有`reduce()`、`aggregate()`、`process()`。 +* 当满足窗口触发条件后,对窗口内的数据使用窗口处理函数(Window Function)进行处理,常用的 Window Function 有 `reduce()`、`aggregate()`、`process()`。 -其他的`trigger()`、`evictor()`则是窗口的触发和销毁过程中的附加选项,主要面向需要更多自定义的高级编程者,如果不设置则会使用默认的配置。 +其他的 `trigger()`、`evictor()` 则是窗口的触发和销毁过程中的附加选项,主要面向需要更多自定义的高级编程者,如果不设置则会使用默认的配置。 -下图是窗口的生命周期示意图,假如我们设置的是一个10分钟的滚动窗口,第一个窗口的起始时间是0:00,结束时间是0:10,后面以此类推。当数据流中的元素流入后,窗口分配器会根据时间(Event Time或Processing Time)分配给相应的窗口。相应窗口满足了触发条件,比如已经到了窗口的结束时间,会触发相应的Window Function进行计算。注意,本图只是一个大致示意图,不同的Window Function的处理方式略有不同。 +{numref}`fig-lifecycle-of-a-window` 是窗口的生命周期示意图,假如我们设置的是一个 10 分钟的滚动窗口,第一个窗口的起始时间是 0:00,结束时间是 0:10,后面以此类推。当数据流中的元素流入后,窗口分配器会根据时间(Event Time 或 Processing Time)分配给相应的窗口。相应窗口满足了触发条件,比如已经到了窗口的结束时间,会触发相应的 Window Function 进行计算。注意,本图只是一个大致示意图,不同的 Window Function 的处理方式略有不同。 -![窗口的生命周期](./img/lifecycle-of-a-window.png) +```{figure} ./img/lifecycle-of-a-window.png +--- +name: fig-lifecycle-of-a-window +width: 80% +align: center +--- +窗口的生命周期 +``` -如下图所示,从数据类型上来看,一个`DataStream`经过`keyBy()`转换成`KeyedStream`,再经过`window()`转换成`WindowedStream`,我们要在之上进行`reduce()`、`aggregate()`或`process()`等Window Function,对数据进行必要的聚合操作。 +如 {numref}`fig-data-stream-window-stream` 所示,从数据类型上来看,一个 `DataStream` 经过 `keyBy()` 转换成 `KeyedStream`,再经过 `window()` 转换成 `WindowedStream`,我们要在之上进行 `reduce()`、`aggregate()` 或 `process()` 等 Window Function,对数据进行必要的聚合操作。 -![DataStream、KeyedStream和WindowedStream之间如何相互转换](./img/data-stream-window-stream.png) +```{figure} ./img/data-stream-window-stream.png +--- +name: fig-data-stream-window-stream +width: 80% +align: center +--- +DataStream、KeyedStream 和 WindowedStream 之间如何相互转换 +``` ## 内置的三种窗口划分方法 -窗口主要有两种,一种基于时间(Time-based Window),一种基于数量(Count-based Window)。本文主要讨论Time-based Window,在Flink源码中,用`TimeWindow`表示。每个`TimeWindow`都有一个开始时间和结束时间,表示一个左闭右开的时间段。Flink为我们提供了一些内置的WindowAssigner,即滚动窗口、滑动窗口和会话窗口,接下来将一一介绍如何使用。 +窗口主要有两种,一种基于时间(Time-based Window),一种基于数量(Count-based Window)。本文主要讨论 Time-based Window,在 Flink 源码中,用 `TimeWindow` 表示。每个 `TimeWindow` 都有一个开始时间和结束时间,表示一个左闭右开的时间段。Flink 为我们提供了一些内置的 WindowAssigner,即滚动窗口、滑动窗口和会话窗口,接下来将一一介绍如何使用。 -Count-based Window根据元素到达窗口的先后顺序管理窗口,到达窗口的先后顺序和Event Time并不一致,因此Count-based Window的结果具有不确定性。 +Count-based Window 根据元素到达窗口的先后顺序管理窗口,到达窗口的先后顺序和 Event Time 并不一致,因此 Count-based Window 的结果具有不确定性。 ### 滚动窗口 -滚动窗口模式下窗口之间不重叠,且窗口长度(Size)是固定的。我们可以用`TumblingEventTimeWindows`和`TumblingProcessingTimeWindows`创建一个基于Event Time或Processing Time的滚动时间窗口。窗口的长度可以用`org.apache.flink.streaming.api.windowing.time.Time`中的`seconds`、`minutes`、`hours`和`days`来设置。 +滚动窗口模式下窗口之间不重叠,且窗口长度(Size)是固定的。我们可以用 `TumblingEventTimeWindows` 和 `TumblingProcessingTimeWindows` 创建一个基于 Event Time 或 Processing Time 的滚动时间窗口。窗口的长度可以用 `org.apache.flink.streaming.api.windowing.time.Time` 中的 `seconds`、`minutes`、`hours` 和 `days` 来设置。 -![滚动窗口](./img/tumbling-window.png) +```{figure} ./img/tumbling-window.png +--- +name: fig-tumbling-window +width: 80% +align: center +--- +滚动窗口 +``` -下面的代码展示了如何使用滚动窗口。代码中最后一个例子,我们在固定长度的基础上设置了偏移(Offset)。默认情况下,时间窗口会做一个对齐,比如设置一个一小时的窗口,那么窗口的起止时间是[0:00:00.000 - 0:59:59.999)。如果设置了Offset,那么窗口的起止时间将变为[0:15:00.000 - 1:14:59.999)。Offset可以用在全球不同时区设置上,如果系统时间基于格林威治标准时间(UTC-0),中国的当地时间可以设置offset为`Time.hours(-8)`。 +下面的代码展示了如何使用滚动窗口。代码中最后一个例子,我们在固定长度的基础上设置了偏移(Offset)。默认情况下,时间窗口会做一个对齐,比如设置一个一小时的窗口,那么窗口的起止时间是 [0:00:00.000 - 0:59:59.999)。如果设置了 Offset,那么窗口的起止时间将变为 [0:15:00.000 - 1:14:59.999)。Offset 可以用在全球不同时区设置上,如果系统时间基于格林威治标准时间(UTC-0),中国的当地时间可以设置 offset 为 `Time.hours(-8)`。 ```java DataStream input = ... -// 基于Event Time的滚动窗口 +// 基于 Event Time 的滚动窗口 input .keyBy() .window(TumblingEventTimeWindows.of(Time.seconds(5))) .(...) -// 基于Processing Time的滚动窗口 +// 基于 Processing Time 的滚动窗口 input .keyBy() .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) .(...) -// 在小时级滚动窗口上设置15分钟的Offset偏移 +// 在小时级滚动窗口上设置 15 分钟的 Offset 偏移 input .keyBy() .window(TumblingEventTimeWindows.of(Time.hours(1), Time.minutes(15))) .(...) ``` -读者在其他的代码中可能看到过,时间窗口使用的是`timeWindow()`而非`window()`,比如,`input.keyBy(...).timeWindow(Time.seconds(1))`。`timeWindow()`是一种简写。当我们在执行环境设置了`TimeCharacteristic.EventTime`时,Flink对应调用`TumblingEventTimeWindows`;如果我们基于`TimeCharacteristic.ProcessingTime`,Flink使用`TumblingProcessingTimeWindows`。 +读者在其他的代码中可能看到过,时间窗口使用的是 `timeWindow()` 而非 `window()`,比如,`input.keyBy(...).timeWindow(Time.seconds(1))`。`timeWindow()` 是一种简写。当我们在执行环境设置了 `TimeCharacteristic.EventTime` 时,Flink 对应调用 `TumblingEventTimeWindows`;如果我们基于 `TimeCharacteristic.ProcessingTime`,Flink 使用 `TumblingProcessingTimeWindows`。 ### 滑动窗口 -滑动窗口以一个步长(Slide)不断向前滑动,窗口的长度固定。使用时,我们要设置Slide和Size。Slide的大小决定了Flink以多快的速度来创建新的窗口,Slide较小,窗口的个数会很多。Slide小于窗口的Size时,相邻窗口会重叠,一个元素会被分配到多个窗口;Slide大于Size,有些元素可能被丢掉。 +滑动窗口以一个步长(Slide)不断向前滑动,窗口的长度固定。使用时,我们要设置 Slide 和 Size。Slide 的大小决定了 Flink 以多快的速度来创建新的窗口,Slide 较小,窗口的个数会很多。Slide 小于窗口的 Size 时,相邻窗口会重叠,一个元素会被分配到多个窗口;Slide 大于 Size,有些元素可能被丢掉。 -![滑动窗口](./img/sliding-window.png) +```{figure} ./img/sliding-window.png +--- +name: fig-sliding-window +width: 80% +align: center +--- +滑动窗口 +``` -跟前面介绍的一样,我们使用`Time`类中的时间单位来定义Slide和Size,也可以设置offset。同样,`timeWindow()`是一种缩写,根据执行环境中设置的时间语义来选择相应的方法设置窗口。 +跟前面介绍的一样,我们使用 `Time` 类中的时间单位来定义 Slide 和 Size,也可以设置 offset。同样,`timeWindow()` 是一种缩写,根据执行环境中设置的时间语义来选择相应的方法设置窗口。 ```java DataStream input = ... -// 基于Event Time的滑动窗口 +// 基于 Event Time 的滑动窗口 input .keyBy() .window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5))) .(...) -// 基于Processing Time的滑动窗口 +// 基于 Processing Time 的滑动窗口 input .keyBy() .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) .(...) -// 在滑动窗口上设置Offset偏移 +// 在滑动窗口上设置 Offset 偏移 input .keyBy() .window(SlidingProcessingTimeWindows.of(Time.hours(12), Time.hours(1), Time.hours(-8))) @@ -122,52 +150,59 @@ input ### 会话窗口 -会话窗口模式下,两个窗口之间有一个间隙,被称为Session Gap。当一个窗口在大于Session Gap的时间内没有接收到新数据时,窗口将关闭。在这种模式下,窗口的长度是可变的,每个窗口的开始和结束时间并不是确定的。我们可以设置定长的Session Gap,也可以使用`SessionWindowTimeGapExtractor`动态地确定Session Gap的长度。 +会话窗口模式下,两个窗口之间有一个间隙,被称为 Session Gap。当一个窗口在大于 Session Gap 的时间内没有接收到新数据时,窗口将关闭。在这种模式下,窗口的长度是可变的,每个窗口的开始和结束时间并不是确定的。我们可以设置定长的 Session Gap,也可以使用 `SessionWindowTimeGapExtractor` 动态地确定 Session Gap 的长度。 -![会话窗口](./img/session-window.png) +```{figure} ./img/session-window.png +--- +name: fig-session-window +width: 80% +align: center +--- +会话窗口 +``` -下面的代码展示了如何使用定长和变长的Session Gap来建立会话窗口,第二个和第四个例子展示了如何动态生成Session Gap。 +下面的代码展示了如何使用定长和变长的 Session Gap 来建立会话窗口,第二个和第四个例子展示了如何动态生成 Session Gap。 ```java DataStream input = ... -// 基于Event Time定长Session Gap的会话窗口 +// 基于 Event Time 定长 Session Gap 的会话窗口 input .keyBy() .window(EventTimeSessionWindows.withGap(Time.minutes(10))) .(...) -// 基于Event Time变长Session Gap的会话窗口 +// 基于 Event Time 变长 Session Gap 的会话窗口 input .keyBy() .window(EventTimeSessionWindows.withDynamicGap((element) -> { - // 返回Session Gap的长度 + // 返回 Session Gap 的长度 })) .(...) -// 基于Processing Time定长Session Gap的会话窗口 +// 基于 Processing Time 定长 Session Gap 的会话窗口 input .keyBy() .window(ProcessingTimeSessionWindows.withGap(Time.minutes(10))) .(...) -// 基于Processing Time变长Session Gap的会话窗口 +// 基于 Processing Time 变长 Session Gap 的会话窗口 input .keyBy() .window(ProcessingTimeSessionWindows.withDynamicGap((element) -> { - // 返回Session Gap的长度 + // 返回 Session Gap 的长度 })) .(...) ``` ## 窗口函数 -数据经过了`window()`和`WindowAssigner`之后,已经被分配到不同的窗口里,接下来,我们要通过窗口函数,在每个窗口上对窗口内的数据进行处理。窗口函数主要分为两种,一种是增量计算,如`reduce()`和`aggregate()`,一种是全量计算,如`process()`。增量计算指的是窗口保存一份中间数据,每流入一个新元素,新元素与中间数据两两合一,生成新的中间数据,再保存到窗口中。全量计算指的是窗口先缓存所有元素,等到触发条件后对窗口内的全量元素执行计算。 +数据经过了 `window()` 和 `WindowAssigner` 之后,已经被分配到不同的窗口里,接下来,我们要通过窗口函数,在每个窗口上对窗口内的数据进行处理。窗口函数主要分为两种,一种是增量计算,如 `reduce()` 和 `aggregate()`,一种是全量计算,如 `process()`。增量计算指的是窗口保存一份中间数据,每流入一个新元素,新元素与中间数据两两合一,生成新的中间数据,再保存到窗口中。全量计算指的是窗口先缓存所有元素,等到触发条件后对窗口内的全量元素执行计算。 ### ReduceFunction -使用`reduce()`时,我们要重写一个`ReduceFunction`。`ReduceFunction`在[DataStream API](../chapter-datastream-api/transformations.md)章节中已经介绍过,它接受两个相同类型的输入,生成一个输出,即两两合一地进行汇总操作,生成一个同类型的新元素。在窗口上进行`reduce()`的原理与之类似,只不过是在窗口元素上进行这个操作。窗口上的`reduce()`需要维护一个状态数据,这个状态数据的数据类型和输入的数据类型是一致的,是之前两两计算的中间结果数据。当数据流中的新元素流入后,`ReduceFunction`将中间结果和新流入数据两两合一,生成新的数据替换之前的状态数据。 +使用 `reduce()` 时,我们要重写一个 `ReduceFunction`。`ReduceFunction` 在 [DataStream API](../chapter-datastream-api/transformations.md) 章节中已经介绍过,它接受两个相同类型的输入,生成一个输出,即两两合一地进行汇总操作,生成一个同类型的新元素。在窗口上进行 `reduce()` 的原理与之类似,只不过是在窗口元素上进行这个操作。窗口上的 `reduce()` 需要维护一个状态数据,这个状态数据的数据类型和输入的数据类型是一致的,是之前两两计算的中间结果数据。当数据流中的新元素流入后,`ReduceFunction` 将中间结果和新流入数据两两合一,生成新的数据替换之前的状态数据。 ```java // 读入股票数据流 @@ -175,32 +210,32 @@ DataStream stockStream = ... senv.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime) -// reduce的返回类型必须和输入类型StockPrice一致 +// reduce 的返回类型必须和输入类型 StockPrice 一致 DataStream sum = stockStream .keyBy(s -> s.symbol) .timeWindow(Time.seconds(10)) .reduce((s1, s2) -> StockPrice.of(s1.symbol, s2.price, s2.ts,s1.volume + s2.volume)); ``` -上面的代码使用Lambda表达式对两个元组进行操作,由于对symbol字段进行了`keyBy()`,相同symbol的数据都分组到了一起,接着我们在`reduce()`中将交易量加和,`reduce()`的返回的结果必须也是`StockPrice`类型。 +上面的代码使用 Lambda 表达式对两个元组进行操作,由于对 symbol 字段进行了 `keyBy()`,相同 symbol 的数据都分组到了一起,接着我们在 `reduce()` 中将交易量加和,`reduce()` 的返回的结果必须也是 `StockPrice` 类型。 -使用`reduce()`的好处是窗口的状态数据量非常小,实现一个`ReduceFunction`也相对比较简单,可以使用Lambda表达式,也可以重写函数。缺点是能实现的功能非常有限,因为中间状态数据的数据类型、输入类型以及输出类型三者必须一致,而且只保存了一个中间状态数据,当我们想对整个窗口内的数据进行操作时,仅仅一个中间状态数据是远远不够的。 +使用 `reduce()` 的好处是窗口的状态数据量非常小,实现一个 `ReduceFunction` 也相对比较简单,可以使用 Lambda 表达式,也可以重写函数。缺点是能实现的功能非常有限,因为中间状态数据的数据类型、输入类型以及输出类型三者必须一致,而且只保存了一个中间状态数据,当我们想对整个窗口内的数据进行操作时,仅仅一个中间状态数据是远远不够的。 ### AggregateFunction {#aggregate-function} -`AggregateFunction`也是一种增量计算窗口函数,也只保存了一个中间状态数据,但`AggregateFunction`使用起来更复杂一些。我们看一下它的源码定义: +`AggregateFunction` 也是一种增量计算窗口函数,也只保存了一个中间状态数据,但 `AggregateFunction` 使用起来更复杂一些。我们看一下它的源码定义: ```java public interface AggregateFunction extends Function, Serializable { - // 在一次新的aggregate发起时,创建一个新的Accumulator,Accumulator是我们所说的中间状态数据,简称ACC + // 在一次新的 aggregate 发起时,创建一个新的 Accumulator,Accumulator 是我们所说的中间状态数据,简称 ACC // 这个函数一般在初始化时调用 ACC createAccumulator(); - // 当一个新元素流入时,将新元素与状态数据ACC合并,返回状态数据ACC + // 当一个新元素流入时,将新元素与状态数据 ACC 合并,返回状态数据 ACC ACC add(IN value, ACC accumulator); - // 将两个ACC合并 + // 将两个 ACC 合并 ACC merge(ACC a, ACC b); // 将中间数据转成结果数据 @@ -209,7 +244,7 @@ public interface AggregateFunction extends Function, Serializable } ``` -根据上面的代码,这个类输入类型是IN,输出类型是OUT,中间状态数据是ACC,这样复杂的设计主要是为了解决输入类型、中间状态和输出类型不一致的问题。同时,ACC可以自定义,我们可以在ACC里构建我们想要的数据结构。比如我们要计算一个窗口内某个字段的平均值,那么ACC中要保存总和以及个数,下面是一个计算平均值的示例: +根据上面的代码,这个类输入类型是 IN,输出类型是 OUT,中间状态数据是 ACC,这样复杂的设计主要是为了解决输入类型、中间状态和输出类型不一致的问题。同时,ACC 可以自定义,我们可以在 ACC 里构建我们想要的数据结构。比如我们要计算一个窗口内某个字段的平均值,那么 ACC 中要保存总和以及个数,下面是一个计算平均值的示例: ```scala /** @@ -255,26 +290,33 @@ DataStream> average = stockStream .aggregate(new AverageAggregate()); ``` -`AggregateFunction`里`createAccumulator`、`add`、`merge`这几个函数的工作流程如下图所示。在计算之前要创建一个新的ACC,ACC是中间状态数据,此时ACC里还未统计任何数据。当有新数据流入时,Flink会调用`add()`方法,更新ACC中的数据。当满足窗口结束条件时,Flink会调用`getResult()`方法,将ACC转换为最终结果。此外,还有一些跨窗口的ACC融合情况,比如,会话窗口模式下,窗口长短是不断变化的,多个窗口有可能合并为一个窗口,多个窗口内的ACC也需要合并为一个。窗口融合时,Flink会调用`merge()`,将多个ACC合并在一起,生成新的ACC。 +`AggregateFunction` 里 `createAccumulator`、`add`、`merge` 这几个函数的工作流程如下图所示。在计算之前要创建一个新的 ACC,ACC 是中间状态数据,此时 ACC 里还未统计任何数据。当有新数据流入时,Flink 会调用 `add()` 方法,更新 ACC 中的数据。当满足窗口结束条件时,Flink 会调用 `getResult()` 方法,将 ACC 转换为最终结果。此外,还有一些跨窗口的 ACC 融合情况,比如,会话窗口模式下,窗口长短是不断变化的,多个窗口有可能合并为一个窗口,多个窗口内的 ACC 也需要合并为一个。窗口融合时,Flink 会调用 `merge()`,将多个 ACC 合并在一起,生成新的 ACC。 -![aggregate的工作流程](./img/aggregate.png) +```{figure} ./img/aggregate.png +--- +name: fig-aggregate-workflow +width: 80% +align: center +--- +aggregate 的工作流程 +``` ### ProcessWindowFunction -与前两种方法不同,`ProcessWindowFunction`要对窗口内的全量数据都缓存。它在源码中的定义如下: +与前两种方法不同,`ProcessWindowFunction` 要对窗口内的全量数据都缓存。它在源码中的定义如下: ```java /** * 函数接收四个泛型 * IN 输入类型 * OUT 输出类型 - * KEY keyBy中按照Key分组,Key的类型 + * KEY keyBy 中按照 Key 分组,Key 的类型 * W 窗口的类型 */ public abstract class ProcessWindowFunction extends AbstractRichFunction { /** - * 对一个窗口内的元素进行处理,窗口内的元素缓存在Iterable,进行处理后输出到Collector中 + * 对一个窗口内的元素进行处理,窗口内的元素缓存在 Iterable,进行处理后输出到 Collector 中 * 我们可以输出一到多个结果 */ public abstract void process(KEY key, Context context, Iterable elements, Collector out) throws Exception; @@ -289,19 +331,19 @@ public abstract class ProcessWindowFunction exte */ public abstract class Context implements java.io.Serializable { - // 返回当前正在处理的Window + // 返回当前正在处理的 Window public abstract W window(); - // 返回当前Process Time + // 返回当前 Process Time public abstract long currentProcessingTime(); - // 返回当前Event Time对应的Watermark + // 返回当前 Event Time 对应的 Watermark public abstract long currentWatermark(); - // 返回某个Key下的某个Window的状态 + // 返回某个 Key 下的某个 Window 的状态 public abstract KeyedStateStore windowState(); - // 返回某个Key下的全局状态 + // 返回某个 Key 下的全局状态 public abstract KeyedStateStore globalState(); // 迟到数据发送到其他位置 @@ -310,9 +352,9 @@ public abstract class ProcessWindowFunction exte } ``` -使用时,我们需要实现`process()`方法,Flink将某个Key下某个窗口的所有元素都缓存在`Iterable`中,我们需要对其进行处理,然后用`Collector`收集输出。我们可以使用`Context`获取窗口内更多的信息,包括时间、状态、迟到数据发送位置等。 +使用时,我们需要实现 `process()` 方法,Flink 将某个 Key 下某个窗口的所有元素都缓存在 `Iterable` 中,我们需要对其进行处理,然后用 `Collector` 收集输出。我们可以使用 `Context` 获取窗口内更多的信息,包括时间、状态、迟到数据发送位置等。 -下面的代码是一个`ProcessWindowFunction`的简单应用,我们对价格出现的次数做了统计,选出出现次数最多的输出出来。 +下面的代码是一个 `ProcessWindowFunction` 的简单应用,我们对价格出现的次数做了统计,选出出现次数最多的输出出来。 ```java /** @@ -351,7 +393,7 @@ public static class FrequencyProcessFunction extends ProcessWindowFunction 0) { out.collect(Tuple2.of(key, list.get(0).getKey())); } @@ -359,23 +401,23 @@ public static class FrequencyProcessFunction extends ProcessWindowFunction stockStream = env .addSource(new StockSource("stock/stock-tick-20200108.csv")); -// reduce的返回类型必须和输入类型相同 -// 为此我们将StockPrice拆成一个四元组 (股票代号,最大值、最小值,时间戳) +// reduce 的返回类型必须和输入类型相同 +// 为此我们将 StockPrice 拆成一个四元组 (股票代号,最大值、最小值,时间戳) DataStream> maxMin = stockStream .map(s -> Tuple4.of(s.symbol, s.price, s.price, 0L)) .returns(Types.TUPLE(Types.STRING, Types.DOUBLE, Types.DOUBLE, Types.LONG)) @@ -391,7 +433,7 @@ public static class MaxMinReduce implements ReduceFunction, Tuple4, String, TimeWindow> { @Override public void process(String key, @@ -414,36 +456,36 @@ public static class WindowEndProcessFunction extends ProcessWindowFunction implements Serializable { - // 窗口增加一个元素时调用onElement方法,返回一个TriggerResult + // 窗口增加一个元素时调用 onElement 方法,返回一个 TriggerResult public abstract TriggerResult onElement(T element, long timestamp, W window, TriggerContext ctx) throws Exception; - // 当一个基于Processing Time的Timer触发了FIRE时被调用 + // 当一个基于 Processing Time 的 Timer 触发了 FIRE 时被调用 public abstract TriggerResult onProcessingTime(long time, W window, TriggerContext ctx) throws Exception; - // 当一个基于Event Time的Timer触发了FIRE时被调用 + // 当一个基于 Event Time 的 Timer 触发了 FIRE 时被调用 public abstract TriggerResult onEventTime(long time, W window, TriggerContext ctx) throws Exception; - // 当窗口数据被清理时,调用clear方法来清理所有的Trigger状态数据 + // 当窗口数据被清理时,调用 clear 方法来清理所有的 Trigger 状态数据 public abstract void clear(W window, TriggerContext ctx) throws Exception /** @@ -451,19 +493,19 @@ public abstract class Trigger implements Serializable { */ public interface TriggerContext { - // 返回当前Processing Time + // 返回当前 Processing Time long getCurrentProcessingTime(); - // 返回MetricGroup + // 返回 MetricGroup MetricGroup getMetricGroup(); - // 返回当前Watermark时间 + // 返回当前 Watermark 时间 long getCurrentWatermark(); - // 将某个time注册为一个Timer,当系统时间到达time这个时间点时,onProcessingTime方法会被调用 + // 将某个 time 注册为一个 Timer,当系统时间到达 time 这个时间点时,onProcessingTime 方法会被调用 void registerProcessingTimeTimer(long time); - // 将某个time注册为一个Timer,当Watermark时间到达time这个时间点时,onEventTime方法会被调用 + // 将某个 time 注册为一个 Timer,当 Watermark 时间到达 time 这个时间点时,onEventTime 方法会被调用 void registerEventTimeTimer(long time); void deleteProcessingTimeTimer(long time); @@ -478,7 +520,7 @@ public abstract class Trigger implements Serializable { } ``` -接下来我们以一个提前计算的案例来解释如何使用自定义的Trigger。在股票等交易场景中,我们比较关注价格急跌的情况,默认窗口长度是60秒,如果价格跌幅超过5%,则立即执行Window Function,如果价格跌幅在1%到5%之内,那么10秒后触发Window Function。 +接下来我们以一个提前计算的案例来解释如何使用自定义的 Trigger。在股票等交易场景中,我们比较关注价格急跌的情况,默认窗口长度是 60 秒,如果价格跌幅超过 5%,则立即执行 Window Function,如果价格跌幅在 1% 到 5% 之内,那么 10 秒后触发 Window Function。 ```scala public static class MyTrigger extends Trigger { @@ -491,18 +533,18 @@ public static class MyTrigger extends Trigger { new ValueStateDescriptor("lastPriceState", Types.DOUBLE) ); - // 设置返回默认值为CONTINUE + // 设置返回默认值为 CONTINUE TriggerResult triggerResult = TriggerResult.CONTINUE; - // 第一次使用lastPriceState时状态是空的,需要先进行判断 - // 如果是空,返回一个null + // 第一次使用 lastPriceState 时状态是空的, 需要先进行判断 + // 如果是空,返回一个 null if (null != lastPriceState.value()) { - if (lastPriceState.value() - element.price > lastPriceState.value() * 0.05) { - // 如果价格跌幅大于5%,直接FIRE_AND_PURGE + if (lastPriceState.value() - element.price > lastPriceState.value()* 0.05) { + // 如果价格跌幅大于 5%,直接 FIRE_AND_PURGE triggerResult = TriggerResult.FIRE_AND_PURGE; - } else if ((lastPriceState.value() - element.price) > lastPriceState.value() * 0.01) { - // 跌幅不大,注册一个10秒后的Timer - long t = triggerContext.getCurrentProcessingTime() + (10 * 1000 - (triggerContext.getCurrentProcessingTime() % 10 * 1000)); + } else if ((lastPriceState.value() - element.price)> lastPriceState.value() * 0.01) { + // 跌幅不大,注册一个 10 秒后的 Timer + long t = triggerContext.getCurrentProcessingTime()+ (10 * 1000 - (triggerContext.getCurrentProcessingTime() % 10 * 1000)); triggerContext.registerProcessingTimeTimer(t); } } @@ -510,7 +552,7 @@ public static class MyTrigger extends Trigger { return triggerResult; } - // 这里我们不用EventTime,直接返回一个CONTINUE + // 这里我们不用 EventTime,直接返回一个 CONTINUE @Override public TriggerResult onEventTime(long time, TimeWindow window, Trigger.TriggerContext triggerContext) { return TriggerResult.CONTINUE; @@ -543,32 +585,32 @@ DataStream> average = stockStream .aggregate(new AverageAggregate()); ``` -从这个例子中可以看出,窗口中每增加一个元素,Flink都会调用Trigger中的`onElement`方法,这个方法里判断是否需要执行计算,并发送相应的`TriggerResult`。一次计算的执行可以基于某个元素满足了一定条件,比如时间到达了窗口边界;也可以基于之前注册的定时器。 +从这个例子中可以看出,窗口中每增加一个元素,Flink 都会调用 Trigger 中的 `onElement` 方法,这个方法里判断是否需要执行计算,并发送相应的 `TriggerResult`。一次计算的执行可以基于某个元素满足了一定条件,比如时间到达了窗口边界;也可以基于之前注册的定时器。 -在自定义Trigger时,如果使用了状态,一定要使用`clear`方法将状态数据清理,否则随着窗口越来越多,状态数据会越积越多。 +在自定义 Trigger 时,如果使用了状态,一定要使用 `clear` 方法将状态数据清理,否则随着窗口越来越多,状态数据会越积越多。 :::info -假如我们使用了自定义的Trigger,那原来默认的触发逻辑会被自定义的逻辑覆盖。 +假如我们使用了自定义的 Trigger,那原来默认的触发逻辑会被自定义的逻辑覆盖。 ::: ### Evictor -清除器(Evictor)是在`WindowAssigner`和`Trigger`的基础上的一个可选选项,用来清除一些数据。我们可以在Window Function执行前或执行后调用Evictor。 +清除器(Evictor)是在 `WindowAssigner` 和 `Trigger` 的基础上的一个可选选项,用来清除一些数据。我们可以在 Window Function 执行前或执行后调用 Evictor。 ```java /** - * T为元素类型 - * W为窗口 + * T 为元素类型 + * W 为窗口 */ public interface Evictor extends Serializable { - // 在Window Function前调用 + // 在 Window Function 前调用 void evictBefore(Iterable> elements, int size, W window, EvictorContext evictorContext); - // 在Window Function后调用 + // 在 Window Function 后调用 void evictAfter(Iterable> elements, int size, W window, EvictorContext evictorContext); - // Evictor的上下文 + // Evictor 的上下文 interface EvictorContext { long getCurrentProcessingTime(); MetricGroup getMetricGroup(); @@ -577,12 +619,12 @@ public interface Evictor extends Serializable { } ``` -`evictBefore`和`evictAfter`分别在Window Function之前和之后被调用,窗口的所有元素被放在了`Iterable>`,我们要实现自己的清除逻辑。清除逻辑主要针对全量计算,对于增量计算的`ReduceFunction`和`AggregateFunction`,我们没必要使用Evictor。 +`evictBefore` 和 `evictAfter` 分别在 Window Function 之前和之后被调用,窗口的所有元素被放在了 `Iterable>`,我们要实现自己的清除逻辑。清除逻辑主要针对全量计算,对于增量计算的 `ReduceFunction` 和 `AggregateFunction`,我们没必要使用 Evictor。 一个清除的逻辑可以写成: ```java -for (Iterator> iterator = elements.iterator(); iterator.hasNext(); ) { +for (Iterator> iterator = elements.iterator(); iterator.hasNext();) { TimestampedValue record = iterator.next(); if (record.getTimestamp() <= evictCutoff) { iterator.remove(); @@ -590,7 +632,7 @@ for (Iterator> iterator = elements.iterator(); iterator } ``` -Flink提供了一些实现好的Evictor,例如: +Flink 提供了一些实现好的 Evictor,例如: -* `CountEvictor`保留一定数目的元素,多余的元素按照从前到后的顺序先后清理。 -* `TimeEvictor`保留一个时间段的元素,早于这个时间段的元素会被清理。 \ No newline at end of file +* `CountEvictor` 保留一定数目的元素,多余的元素按照从前到后的顺序先后清理。 +* `TimeEvictor` 保留一个时间段的元素,早于这个时间段的元素会被清理。 \ No newline at end of file From c4a1a256e61754da8f42b2a69c1986e39460262f Mon Sep 17 00:00:00 2001 From: hainaweiben Date: Fri, 5 Jul 2024 18:53:44 +0800 Subject: [PATCH 2/3] Replaced some watermarked images, --- doc/_toc.yml | 2 +- .../img/batch-streaming-api-import.png | Bin 91380 -> 46264 bytes doc/ch-datastream-api/img/connect-control.png | Bin 102434 -> 17696 bytes doc/ch-datastream-api/img/data-type.png | Bin 88354 -> 77435 bytes doc/ch-datastream-api/img/keyBy.png | Bin 23118 -> 10192 bytes .../img/keyedstream-datastream.png | Bin 17842 -> 9584 bytes doc/ch-datastream-api/img/map.png | Bin 14334 -> 10130 bytes doc/ch-datastream-api/img/rebalance.png | Bin 46121 -> 25683 bytes doc/ch-datastream-api/img/reduce.png | Bin 34706 -> 17246 bytes doc/ch-datastream-api/img/rescale1.png | Bin 39561 -> 22804 bytes doc/ch-datastream-api/img/rescale2.png | Bin 41711 -> 24151 bytes doc/ch-datastream-api/img/transformations.png | Bin 43712 -> 18314 bytes doc/ch-datastream-api/img/typeinformation.png | Bin 139172 -> 65090 bytes doc/ch-datastream-api/img/union.png | Bin 32694 -> 14073 bytes .../img/barrier-alignment.png | Bin 92352 -> 74519 bytes .../img/broadcast-state.png | Bin 111417 -> 17956 bytes doc/ch-state-checkpoint/img/checkpoint-1.png | Bin 71467 -> 25498 bytes doc/ch-state-checkpoint/img/checkpoint-2.png | Bin 99219 -> 39316 bytes doc/ch-state-checkpoint/img/checkpoint-3.png | Bin 77399 -> 63732 bytes doc/ch-state-checkpoint/img/checkpoint-4.png | Bin 87787 -> 59186 bytes .../img/checkpoint-barrier.png | Bin 47404 -> 20592 bytes doc/ch-state-checkpoint/img/index.png | Bin 91047 -> 0 bytes ...nheritance-relationships-of-keyedState.png | Bin 100767 -> 22959 bytes doc/ch-state-checkpoint/img/keyedstate.png | Bin 91047 -> 29467 bytes doc/ch-state-checkpoint/img/operatorstate.png | Bin 53621 -> 26636 bytes doc/ch-state-checkpoint/img/rescale.png | Bin 255880 -> 61752 bytes .../img/savepoint-data.png | Bin 79071 -> 33937 bytes doc/ch-state-checkpoint/img/savepoint.png | Bin 144367 -> 39498 bytes .../img/state-acquisition-and-update.png | Bin 43203 -> 11277 bytes doc/ch-table-sql/img/aggregate.png | Bin 67171 -> 16402 bytes doc/ch-table-sql/img/continuous-query.png | Bin 107736 -> 51953 bytes doc/ch-table-sql/img/data-to-table.png | Bin 94490 -> 64967 bytes doc/ch-table-sql/img/dynamic-table.png | Bin 58123 -> 31068 bytes doc/ch-table-sql/img/environment.png | Bin 65400 -> 25179 bytes doc/ch-table-sql/img/group-by.png | Bin 77389 -> 48461 bytes doc/ch-table-sql/img/iot-room-a.png | Bin 157617 -> 19419 bytes doc/ch-table-sql/img/over-window.png | Bin 78467 -> 61753 bytes doc/ch-table-sql/img/range-over-window.png | Bin 83005 -> 39130 bytes doc/ch-table-sql/img/regular-join.png | Bin 90909 -> 36816 bytes doc/ch-table-sql/img/retract.png | Bin 98845 -> 35220 bytes doc/ch-table-sql/img/rows-over-window.png | Bin 70470 -> 17513 bytes doc/ch-table-sql/img/table-internal.png | Bin 105104 -> 37543 bytes .../img/temporal-join-timeline.png | Bin 69546 -> 21813 bytes doc/ch-table-sql/img/temporal-table-join.png | Bin 80470 -> 38918 bytes doc/ch-table-sql/img/temporal-table.png | Bin 89917 -> 48256 bytes .../img/time-window-join-timeline.png | Bin 49887 -> 8537 bytes doc/ch-table-sql/img/time-window-join.png | Bin 72127 -> 31814 bytes doc/ch-table-sql/img/tumble-append.png | Bin 129719 -> 61688 bytes doc/ch-time-window/img/aggregate.png | Bin 43013 -> 11450 bytes .../img/data-stream-window-stream.png | Bin 29462 -> 16752 bytes .../img/event-time-watermark.png | Bin 20557 -> 11769 bytes doc/ch-time-window/img/interval-join.png | Bin 36343 -> 13088 bytes doc/ch-time-window/img/join-lifecycle.png | Bin 63381 -> 47667 bytes doc/ch-time-window/img/join.png | Bin 39759 -> 19563 bytes .../img/lifecycle-of-a-window.png | Bin 56696 -> 41946 bytes doc/ch-time-window/img/parallel-watermark.png | Bin 133911 -> 89980 bytes doc/ch-time-window/img/session-window.png | Bin 81904 -> 21895 bytes doc/ch-time-window/img/sliding-window.png | Bin 43480 -> 21617 bytes .../img/three-types-of-time.png | Bin 57663 -> 45706 bytes .../img/tumbling-window-join.png | Bin 49425 -> 15057 bytes doc/ch-time-window/img/tumbling-window.png | Bin 38923 -> 17024 bytes 61 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 doc/ch-state-checkpoint/img/index.png diff --git a/doc/_toc.yml b/doc/_toc.yml index 7a0b940..8b2ee89 100644 --- a/doc/_toc.yml +++ b/doc/_toc.yml @@ -40,9 +40,9 @@ subtrees: - file: ch-time-window/exercise-stock - file: ch-state-checkpoint/index entries: + - file: ch-state-checkpoint/state - file: ch-state-checkpoint/checkpoint - file: ch-state-checkpoint/savepoint - - file: ch-state-checkpoint/state - file: ch-state-checkpoint/exercise-state - file: ch-flink-connectors/index entries: diff --git a/doc/ch-datastream-api/img/batch-streaming-api-import.png b/doc/ch-datastream-api/img/batch-streaming-api-import.png index 104bfd59debf19ac3e9c85d5b23aa1d0a12438fa..b878a87460ff48af3242f2499dbed2bee86f938b 100644 GIT binary patch literal 46264 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�lHp|Hx|19 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