Flink是什么

  • Flink是流处理框架,用于在无边界有边界数据流上进行有状态的计算
  • Flink其核心是用JavaScala编写的分布式流数据流引擎
  • Flink以数据并行流水线方式执行任意流数据程序

    无边界流&有边界流是什么

    什么是流

    • “流”是个抽象的概念,对于输入输出设备的抽象;Java中数据输入/输出操作都是以”流”的方式进行
    • 任何类型的数据都可以形成一种事件流,如机器日志,用户交互记录,信用卡流水等,所有这些数据都形成一种流
    • 届时数据可以被作为无边界流有边界流来处理

      流分类

    1. 字符流(16位),字节流(8位);数据单位不同
    2. 输入流,输出流;数据流向不同
    3. 节点流,处理流;功能不同

节点流

  1. - 指从一个特定的数据源读写数据,如操作文件,直接从文件中读取或往文件中写入字节流

处理流

  1. - "连接"在已经存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能(好比在已经接了一条管子(节点流)的基础上,又套上几个更粗,具有特殊功能的管子(处理流)对流出的水进一步的处理)
  • 四种基本流**InputStreamOutputStreamReaderWriter**更具体的子类,如,文件流,缓冲流,数据流,转化流,输出流,输入流等,都具备特定功能或用来操作特定数据

    无边界流

    1. 有定义流的开始,但是没有定义流的结束
    2. 由于无边界流数据是持续输入的,因此数据被摄取后需要立刻处理
    3. 无边界流数据通常要求以特定顺序摄取事件,如发生的事件时间顺序,以保证能够推断结果完整性

      有边界流

    4. 有定义流开始和流结束

    5. 可以在摄取完所有数据后在进行计算
    6. 有边界流所有数据可以被排序,因此并不需要有序摄取
    7. 有边界流通常被称为批处理

有状态计算结构是什么

微信截图_20210225173337.png

  • 有状态计算是指程序计算过程中,在Flink程序内部存储计算生产的中间状态结果,并提供给后续”函数”或算子计算结果使用;也就是每次计算新的数据进入到流式系统中都是基于中间状态结果的基础上进行计算,最终得出正确的统计结果
  • 状态数据可以维系在本地存储中,这里的存储可以是Flink的堆内存或者推外内存,也可以借助第三方存储介质
  • 有状态计算不需要将原始数据重新从外部存储中拿出来,从而进行全量计算;因此用户无须通过调度各种批量计算工具,从数据仓库中获取数据统计结果,再落地存储,这些操作都可以基于流式计算完成,可以极大地减轻系统对其他框架的依赖,减少数据计算过程中的时间损耗以及硬件存储。

    与无状态计算区别

  • 无状态计算不会存储计算过程中产生的结果,也不会用于下一步计算过程中,只会在当前计算流程中实行计算,计算完成之后输出结果,下条数据接入再次进行处理