Flink

Flink:是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算,支持流批一体化处理,从底层APIS->核心APIS(DataStream、DataSet)->声明式领域专用语言(Table API)->最高层语言(SQL)。

批处理:有界、持久、大量,批处理适合需要访问全套记录才能完成的计算工作,一般用于离线统计;

流处理:无界、实时,流处理无需针对整个数据集执行操作,而是对通过系统传输的每个数据项进行操作,一般用于实时统计;

一、基础

  1. 特点

    A. 高吞吐和低延迟,可每秒处理数百万各事件,毫秒级延迟;

    B. 结果的准确性,提供了事件时间和处理时间语义;

    C. 精准一次的状态一致性保证;

    D. 可以连接到最常用的存储系统,如Kafka、HDFS等;

    E. 高可用:可与K8s、YARN等集成,具有可从故障中快速恢复和动态扩展任务的能力。

  2. 角色

    A. 客户端(Client):代码由客户端获取并做转换,之后提交给JobManger;

    B. JobManger:对作业进行调度,将任务分发给TaskManger;

    C. TaskManger:干活的,进行数据的处理操作。

  3. 部署模式

    A. 会话模式:

    B. 单作业模式:

    C. 应用模式:

  4. 运行模式

    A. Standalone模式:Flink自带集群,开发测试环境使用;

    B. Yarn模式:计算资源统一由Hadoop YARN管理,生产环境使用;

    C. K8s模式:

    D. 历史服务器

  5. 架构核心概念

    A. 并行度(Parallelism):

    B. 算子链(Operator Chain):

    C. 任务槽(Task slots):

 

二、DataStream API

  DataSream由五个部分构成:获取执行环境(Environment)——>获取数据源(Source)——>转化操作(Transformation)——>输出(Sink)——>触发执行(Execute),实质就是进行各种转化操作。

  1. 执行环境

    A. 创建执行环境:本地和远程执行环境;

    B. 执行模式:流(Streaming)和批(Batch)执行模式,其中流适用于需要连续增量处理的无边界作业、批适用于已知输入但不会连续运行的有边界作业;

    C. 触发程序执行:Flink是由事件驱动的,只有等待数据到来,才会触发真正的计算。

  2. 源算子

    A. 从文件读取数据:属于有界数据,env.fromSource(),需要引入flink-connector-files依赖;

    B. 从Socket读取数据:吞吐量小的流处理,env.socketTextStream();

    C. 从Kafka读取数据:

    D. 从外部系统读取数据:其它Connectors连接器。

  3. 数据类型:Types常见类型类

    A. 基本类型:如String、Date;

    B. 数组类型:基本数组类型和对象数组类型;

    C. 符合数据类型:如元组类型(Tuple)、POJO;

    D. 辅助类型:如List、Map;

    E. 泛型类型

  4. 转换算子

    注意:参数为索引,表示第几个元素,returns是用来解决"泛型擦除"的问题,显示提供类型信息;

    A. 基本转换算子:map(映射)、filter(过滤)、flatMap(扁平映射)

    B. 聚合算子:keyBy(分组)、简单聚合(max、min、sum等)、reduce(归约聚合)

    C. 物理分区算子

    D. 分流

    E. 合流

   5. 输出算子

    A. 输出到文件:stream.sinkTo();

    B. 输出到Kafka:

    C. 输出到MySQL:

    D. 输出到外部系统:其它Connectors连接器。

 

三. 窗口(Window)

    A. 概念:是将无限数据流切割成有限的‘数据块’进行处理,窗口是在开始时间数据到达时才创建,当到达结束时间时就会对收集的数据进行处理并关闭,可按键分区(Keyed)处理;

    B. 窗口的分类

      按度量方式可分为:时间窗口和计数窗口;

      按分配数据方式可分为:

        滚动窗口(Tumbling Windows):窗口之间没有重叠,也没有间隔,是连续的;

        滑动窗口(Sliding Windows):大小是固定的,但窗口之间不是首尾相接的;

        会话窗口(Session Windows):有会话超时时间,对数据进行分组的;

        全局窗口:全局有效。

    C. 窗口函数:分增量聚合函数(Reduce和Aggregate)和全窗口函数(Process)。

    D. 窗口触发器和移除器:

 

可参考:Flink官方文档

 

posted @ 2024-12-13 20:25  如幻行云  阅读(11)  评论(0编辑  收藏  举报