Flink笔记

本文详细介绍了Flink流处理的各个方面,包括Flink的概述、特点、与Spark的区别、运行模式、运行架构、并行度与Slot的关系、状态管理、容错机制、以及CEP复杂事件处理。重点讨论了Flink的事件驱动、流批处理能力、JobManager和TaskManager的角色、以及检查点和SavePoint机制,展示了Flink如何在保证精确一次语义的同时实现低延迟、高吞吐的流处理。
摘要由CSDN通过智能技术生成

Flink 概述:
     Flink 是为分布式、高性能、随时可用以及准确的流处理应用框架,用于对无界和有界数据流进行有状态计算,并且以内存执行速度
     和任意规模来执行计算,在保证'exactly-once'的同时具有低延迟、高吞吐的处理能力。

Flink 特点:
    <1>基于事件驱动:是有状态的事件驱动,从一个或多个事件流提取数据,并根据事件的到来触发计算、状态更新或其他外部操作等。
        如Kafka的消息队列几乎都是事件驱动。
    <2>流批处理:
         ·批数据是有界、持久、大量的适合需要访问全部数据才能完成计算的工作,通常用于离线处理。
             有界流数据:有明确定义的开始和结束,在执行操作之前可以获取所有数据来处理有界流,并且处理有界流不需要有序获取,
             可以随时对有界数据集进行排序。
         ·流数据无界、实时的,无需针对整个数据集进行操作,而是对通过系统的每个数据项进行操作,通常用于处理实时数据。
             无界流数据:有开始但没有结束,不会在生成时终止并提供数据,需要实时的对无界流的数据进行处理,在任何时间点都不会完成,
             通常要求数据以特地的顺序获取,以便能够推断结果的完整性。
    说明:
        事件驱动:事件驱动不需要外部的数据库,用状态来保存中间的计算过程和结果。
        关系驱动:传统的关系驱动需要借助于外部存储进行读写,通常为关系型数据库。

*Flink与Spark的区别:
    计算模型不同:
        >SparkStreaming 微批次处理模型,基于时间触发,高延迟。
        >Flink 标准的流式处理,基于事件触发的,低延迟、高吞吐。
    架构模型不同:
        >SparkStreaming 任务处理依赖于Driver、Executor(Yarn模式) 或Master、Worker(Standalone模式)。
        >Flink 任务的处理依赖于JobManager、TaskManager、Slot。
    任务调度不同:
        >SparkStreaming 会构建DAG,并且维护了一个 'DStream Graph',经过ReceiverTracker、JobGenerate、JobScheduler。
        >Flink StreamGraph->JobGraph->ExecutionGraph->PhysicalGraph
    时间机制不同:
        >SparkStreaming 支持支处理时间。
        >Flink 支持处理时间、事件时间、注入时间,更好的实现精准一次性消费,支持watermark处理滞后数据。
    容错机制不同:    
        >SparkStreaming 支持persist对RDD进行缓存,还可以设置checkpoint用于故障恢,但只能解决数据不丢失不能解决数据重复问题。
        >Flink 支持两阶段提交Checkpoint,保证精准一次。
    窗口机制不同:
        >SparkStreaming 的窗口先将多个批次的数据准备好,然后将多个RDD进行union汇总,并且窗口大小必须是批次大小的整数倍,否则窗口会将
                        某个批次的数据且分开,会破坏数据的完整性。
        >Flink:Flink的窗口是先将每个窗口准备好,等到数据流的到来,每来一条数据处理一次,对窗口大小没有特定需求。    
    CEP的支持:Flink内置CEP,而Spark没有内置CEP。


Flink 分层API:
    Stateful Stream Processing、DataStream/DataSet API、TableAPI、SQL。
        最底层级的抽象仅仅提供了有状态流,它将通过过程函数被嵌入到DataStream API中。

    Flik流批一体:
        Flink内部有两套不同数据处理方式的API,DataStream和DataSet。
        DataSource底层是一个operator算子,该算子底层是DataSet。
        DataStreamSource底层是DataStream。
    说明:Flink1.12 版本的流批一体存在一些BUG,批处理API处理数据输出结果时经过reduce
        后的结果如果只有一个数据不会进入reduce,并且批处理不会保存状态。

Flink 运行模式:
    LocalCluster模式> 本地集群模式,通常用于测试和学习,是默认模式。

    Standalone模式> 独立集群模式,支持Web UI界面提交Flink应用。
            Standalone模式高可用:解决单点故障问题,主备 JobManager 实例之间没有明显的区别,同时启动多个Jobmanager, 
            其中一个为leader其他为standby,当leader挂了,其他的才会有一个成为leader。
        说明: default、Standlone模式下通过 'flink run -m hostname:8081 -c '提交任务。
        Standalone高可用模式下,需要启动zk、Hdfs并且flink中没有hadoop的jar包,需要在环境变量中添加flink所需的hadoop环境变量。
    
    Yarn模式> 独立部署模式,会动态的分配TaskManager资源,不需要启动flink集群,Yarn会根据任务自动的启动master和workers,
                有任务时分配资源,没有任务时不占用资源,且Flink Yarn模式是Flink的一个客户端不需要分发。
        说明:Yarn模式由Flink自身提供计算资源,无需其他框架提供资源,但是Flink主要用来计算,自身提供的资源调度并不如外部集成好,
            所以采用集成外部Yarn。
        <Session-Cluster>会先在Yarn启动一个Flink集群,向Yarn申请资源,多个任务共享这个集群的资源,存在资源争抢,并且任务会相互影响。
                缺点: 如果提交的作业中有长时间执行的大作业,占用了该Flink集群的所有资源,则后续无法提交新的job,所以该模式适合
                      需要频繁提交的多个小Job,且执行时间都不长。
                说明: Session-Cluster模式下先通过 'bin/yarn-session.sh -d ' 后台启动一个Flink集群,然后再通过 'bin/flink run -c'
                    提交任务, 在session-Cluster模式和standalone模式都存在时,由于会先去寻找session-Cluster环境,
                    如果想跳过session-Cluster模式,使用standalone模式的话可以通过 -m 指定Jobmanager(地址:web端口),
                    会直接使用standalone模式的flink。
        <Per-Job-Cluster>每个任务都会在yarn上单独启动一个集群,任务的执行互不干扰。推荐使用perjob和application模式。
                说明: Per-Job-Cluster 模式下,通过 ' bin/flink run -t yarn-per-job -c ' 提交任务,如果有多个session集群时,
                手动指定yarn-Session集群 ' bin/flink run -t yarn-session -Dyarn.application.id=application_XXXX_YY '
        <Application Mode>与Perjob模式类似,区别在于代码的主方法在集群执行,而Perjob的mian方法在用户提交代码的客户端执行。
                说明: Application Mode模式下,通过 ' bin/flink run-application -t yarn-application -c ' 提交任务。
        Yarn高可用:只有一个Master,但是提供了重试机制。在flinkyarn的配置文件中不用配集群id,Yarn模式默认将Applicationid作为集群id,
                如果配置了会导致所有的集群id都是同一个会导致冲突。

Flink 运行架构:
    Client:用于将DataStream发送的JobManager,可以与Jobmanager保持连接也可以断开连接。

    JobManager:作为Master,控制程序执行的主进程,类似大哥,用于接收JobGraph、LogicalDataflowGraph、其他资源JAR包,然后将JobGraph转换
                成一个物理层面的数据流图ExecutionGraph,它包含了所有可以并发执行的任务。JobManager需要向内置的RM申请资源。
        JobManager内置的三组件:
            ResourceManager> 是Flink内置的资源调度器,整个集群只有一个。主要负责管理任务管理器的Slot资源。
                说明:当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager,如果资源不够,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值