• 第一课 概念介绍


    对应的视频【Apache Flink 入门教程】2. Apache Flink 概念介绍:有状态流式处理引擎的基石_哔哩哔哩_bilibili

    先介绍了批式处理和流式处理的区别

    批式处理:把数据按照事件划分为一段一段的数据,每段数据进行处理,这种做法对于一些跨时间段的状态统计,就需要把上一个状态记录传到下面的时间段中进行计算,理想的情况就是所有的运行状态都能不断的累计,可以维护大量的状态信息,可以自动依据时间进行判断是否接收到了所有所需要的数据。直到接收完毕所有需要的数据以后输出运行结果,

    流式处理:程序一批一批的处理无穷无尽的数据,在无穷无尽的数据流上长时间的运行。

    分布式流式处理:通过数据中的某一个key进行分类,使得同样的key的数据能流到同样的计算实例上,

    有状态分布式流式处理:对于运行中的状态进行存储,如果数据量过大需要一个状态后端来维护状态

    有状态分布式流式处理需要解决的问题和Flink的处理方式

    1、状态容错

    即保证状态精确一次的容错

    简易场景下:每处理一批数据,就存储一次快照(状态和数据的位置),出错时按照快照信息进行重新的计算

    分布式场景:在简易场景基础下建立一个全局统一的状态快照(将每一个算子每一批次的快照全部存储到一起)在遇到检查点时同步一次,如果出错就寻找一个拥有全部正常快照的批进行恢复计算

    2、状态维护

    能够维护处理中产生的大量状态

    Flink 的状态后端只需要调用API就可以完成状态的维护,其中默认使用的是JVN Heap 当作状态后端,存储在内存中,状态的数据量过大的时候就可以使用RocksDB作为状态后端(存在硬盘中)

    需要注意的是使用JVM Heap的时候状态作为Java对象是直接存在内存中,但是遇到检查点同步状态到统一状态快照中时就需要进行过序列化,而使用RocksDB时就需要序列化,而同步时也只需要复制状态即可,因为已经完成了序列化。

    3、Event-time的处理

    对于很多场景中需要使用的时间是事件实际发生的事件,而在数据流中这些数据却不一定是有序的,所以如何能判断接收到了足够的数据就是重中之重。

    Flink中使用的就是watermarks,一个带有时间戳 t 的watermasks会让运算算子判定不在收到任何时间戳

    4、状态的保存和迁移

    当正在运行的计算由于各种原因需要重启的时候,如何恢复计算

    Flink使用的是Savepoint 保存点 保存点的信息和检查点中的信息一样是各个算子的状态和数据位置,关闭以前保存一个保存点,重启以后就可以恢复到保存点的运行状态并且,利用EventTime可以赶上最新的数据

  • 相关阅读:
    入门力扣自学笔记140 C++ (题目编号946)
    非零基础自学Java (老师:韩顺平) 第6章 数组、排序和查找 6.12 多维数组 - 二维数组 && 6.13 二维数组的使用
    大模型时代的科研人员的思考
    数字人直播系统源码交付,数字人直播软件下载迎来普及化
    记录使用docker-compose搭建中间件基础环境
    笔记本电脑 禁用/启用 自带键盘
    [qt]vs2022+qt5.13.2代码报错QChartView不明确
    Flink如何基于事件时间消费分区数比算子并行度大的kafka主题
    FreeRTOS 消息队列 详解
    AIGC扫盲和应用场景探究
  • 原文地址:https://blog.csdn.net/liu123342/article/details/126281871