《基于Apache Flink的流处理》读书笔记

第1章 状态化流处理概述

传统数据处理

绝大多数企业所实现的传统架构都会将数据处理分为两类:

  • 事务型处理
  • 分析型处理

事务型处理

企业在日常业务运营过程中会用到各类应用,例如:客户管理管理软件、基于Web的应用等,这些应用系统通常都会设置独立的数据处理层(应用程序本身)和数据存储层(事务型数据库系统)。
这些应用通常会连接外部服务或实际用户,并持续处理诸如订单、邮件、网站点击等传入的数据。期间每处理一条事件,应用都会通过执行远程数据库系统的事务来读取或者更新状态,多个应用会共享同一个数据库系统,有时候还会访问相同的数据库或表。
在这里插入图片描述

分析型处理

存储于不同事务型数据库系统中的数据,可以为企业提供业务运营相关的分析见解。然而用于存储事务性数据的多个数据库系统通常都是相互隔离的,对于分析类查询,我们通常不会直接在事务型数据库上进行,而是将数据复制到一个撰文用来处理分析类查询的数据仓库为了填充数据仓库,需要将事务型数据库系统中数据拷贝过去。这个向数据仓库拷贝数据的过程被称为提取-转换-加载(Extract-Transform-Load,ETL)。
ETL的基本流程是:

  1. 从事务型数据库中提取数据
  2. 将其转换为通用表示形式(可能包含数据验证、数据归一化、编码、去重、表模式转换等工作)
  3. 加载到数据分析数据库中
    为了保持数据仓库中的数据同步,ETL过程需要周期性的执行
    在这里插入图片描述

状态化流处理

几乎所有的数据都是以连续事件流的形式产生的。事实上,现实世界中很难找到那种瞬间就生成完整数据集的例子。
任何一个处理事件流的应用,如果要支持跨多条记录的转换操作,都必须是有状态的,即能够存储和访问中间结果。应用收到事件后可以执行包括读写状态在内的任意计算。原则上,需要在应用中访问的状态有多种可选的存储位置,例如:程序变量、本地文件、嵌入式或外部数据库等。
在这里插入图片描述

有状态的流处理应用通常分为三类:

  1. 事件驱动型应用,通过接受事件流触发特定应用业务逻辑的有状态的流式应用,如实时推荐、异常检测等
  2. 数据管道型应用,以低延迟的方式从不同的外部系统获取、转换并插入数据,并在段时间内处理大批量数据的应用,提供多样化的数据源、数据汇连接器。Flink可以做到上述一切。
  3. 数据分析型应用,主要有周期性的批处理和持续性的流处理两类应用。

Flink快览

Apache Flink是一个集众多具有竞争力的特性于一身的第三代流处理引擎。它支持精确的流处理,能同事满足各种规模下对高吞吐和低延迟的要求,尤其是以下功能使其能在同类系统中脱颖而出:

  • 同时支持事件时间和处理时间语义
  • 提供精确一次的状态一致性保障
  • 在每秒处理数百万条事件的同时保持毫秒级延迟
  • 层次化的API
  • 常见的存储系统的连接器
  • 支持高可用配置
  • 允许在不丢失应用状态的前提下更新作业代码,或进行跨Flink集群的作业迁移
  • 提供详细、可定制的系统及应用指标(metrics)集合,用于提前定位和响应问题
  • Flink同时也是一个成熟的批处理引擎(批是流的特例,即有界流)

第2章 流处理基础

Dataflow编程概览

Dataflow图

Dataflow程序描述了数据如何在不同的操作之间流动。Dataflow程序通常表示为有向图。图中顶点称为算子(逻辑Dataflow图称为算子,物理Dataflow图称为任务),表示计算;而边表示数据依赖关系。算子是Dataflow程序的基本功能单元,他们从输入获取数据,对其进行计算,然后产生数据并发往输出供后续处理。没有输入端的算子成为数据源,没有输出端的算子成为数据汇。一个Dataflow图至少有一个数据源和一个数据汇。

数据并行和任务并行

数据并行:将输入数据分组,让同一操作的多个任务并行执行在不同数据子集上。将计算负载分配到多个节点上从而允许处理大规模的数据
任务并行:让不同算子的任务(基于相同或不通的数据)并行计算,可以更好的利用集群的计算资源

数据交换

数据交换策略定义了如何将数据项分配给物理Dataflow图中的不同任务。常见有如下四种数据交换策略:

  • 转发策略:在发送端任务和接收端任务之间一对一的进行数据传输。如果两端的任务运行在同一物理机器上,可以避免网络通信
  • 广播策略:把每个数据项发往下游算子的全部任务
  • 基于键值的策略:根据魔衣键值属性对数据分区,并保证键值相同的数据项会交由同一任务处理
  • 随机策略:将数据均匀分配至算子的所有任务,以实现计算任务的负载均衡

并行流处理

数据流定义:一个可能无限的事件序列

延迟和吞吐

延迟:处理一个事件所需的时间。本质上,它是从接收事件到在输出中观察到事件处理效果的时间间隔。
吞吐:用来衡量系统处理能力(处理速率)的指标,它告诉我们系统每单位时间可以处理多少事件。如果系统持续以力不能及的高速率接收数据,那么缓冲区可能会用尽,继而导致数据丢失,这种情形同城称为被压。
延迟和吞吐并非相互独立的指标。如果事件在数据处理管道中传输时间太久,我们将难以保证高吞吐;同样,如果系统性能不足,事件很容易堆积缓冲,必须等待一段时间才能处理。

数据流上的操作

流处理引擎通常会提供一系列内置操作来实现数据流的获取、转换,以及输出。这些算子可以组合生成Dataflow处理图,从而时间流式应用所需的逻辑。常见有如下流式操作:

数据接入和数据输出

数据接入和数据输出操作允许流处理引擎和外部系统通信。
数据接入操作是从外部数据源获取原始数据并将其转换成合适后续处理的格式,该类算子称为数据源。
数据输出操作是将数据以合适外部系统使用的格式输出,该类算子称为数据汇。

转换操作

转换操作是一类”只过一次“的操作,它们会分别处理每个事件,对其应用某些转换并产生一条心的输出流。

滚动聚合

滚动聚合(如求和、求最值)会根据每个到来的事件持续更新结果。聚合操作都是有状态的,它们通过将新到来的事件合并到已有状态来生成更新后的聚合值。

窗口操作

有些操作必须收集并缓冲记录才能计算结果,例如流式join或像是求中位数的整体聚合。为了在无限数据流上高效的执行这些操作,必须对操作的数据加以限制。窗口操作会持续创建一些称为“桶”的有限事件合集,并允许我们基于这些有限集进行计算。
常见有如下几种窗口

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值