二、Flink入门--名词概念解释

文章目录

      • 1.什么是Flink?
        • 1.1有界流和无界流怎么理解?
        • 1.2 有状态流式处理怎么理解?
      • 2.Flink对状态计算的处理
        • 2.1 状态容错(State Fault Tolerance)
        • 2.2 状态维护( state Management)
        • 2.3 Event-Time处理( event-time processing)
        • 2.4 状态保存与迁移(save point and Migration)
      • 3.Flink的架构
      • 4.Flink的API

1.什么是Flink?

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. 

Apache Flink是一个分布式处理引擎的框架,用对“有界数据“ 和“无界数据”流进行状态计算

1.1有界流和无界流怎么理解?

  • Unbounded streams :have a start but no defined end.
  • Bounded :streams have a defined start and end.
    二、Flink入门--名词概念解释_第1张图片
    简单的来说,无界流就是有开始,没有结束。有界流就是有开始,也有结束

1.2 有状态流式处理怎么理解?

传统流计算处理方式:
以时间划分,划分成一个一个批次,用批次运算引擎spark或mr去处理。但是举个例子:

  • a. 要实现每一个小时事件A->事件B conversion出现的次数
  • b. 而且假设A发生在3点59分,B发生在4点01分
  • c .先接受到B,在接收到A

那么上述的情况如何处理呢?
上述情况下就需要有一个中间状态保存中间计算结果,而且累积的状态会影响结果的产出。这就是我所理解的状态计算。

综上总结下状态流计算的特点:

  • a.有办法累积和维护大量的状态
  • b.有办法依据时间决定所有的数据都接收完毕才产生结果,可以产出精准的result

2.Flink对状态计算的处理

2.1 状态容错(State Fault Tolerance)

如何确保状态拥有exactly-once guarantee的容错保证?
在每次触发计算完成后,对结果进行一次snapshot保存
例如:
第x次计算,保存x的位置和x的状态
二、Flink入门--名词概念解释_第2张图片
第y次计算,保存y的位置和y的状态
二、Flink入门--名词概念解释_第3张图片
但是 flink 在计算时是分布式计算,那么就需要保证每个节点的operator的状态在进行保存时全部保存,那么flink设计了global consisent snapshot 即全局一致的快照,也被称为checkpoint。checkpoint功能实现状态的保存,在故障恢复时会重新读取保存在dfs上的checkpoint进行恢复。

那么分布式快照(distributed snapshots)是如何实现的呢?
二、Flink入门--名词概念解释_第4张图片
flink引入了checkpoint barrier的概念来实现全局一致快照,后续章节我们会详细讲解。

2.2 状态维护( state Management)

注册状态
在flink中调用以下方法进行状态注册

val state = getRuntimeContext().getState();

state 很小的时候可以在本地内存进行维护,假如state很大,则可以使用RocksDb进行状态维护,代价就是在状态写入和读取的时候需要进行序列化和反序列化。

2.3 Event-Time处理( event-time processing)

二、Flink入门--名词概念解释_第5张图片
首先需要理解三种time的含义:

  • Processing time: Processing time refers to the system time of the machine that is executing the respective operation. 处理事件时的时间
  • Event time: Event time is the time that each individual event occurred on its producing device. 事件产生的时间
  • Ingestion time: Ingestion time is the time that events enter Flink. 事件进入flink的时间

假设我们需要计算3点到4点直接数据的count数,我们应该在什么时间去触发计算呢?在flink中引入了一个watermarks机制来进行处理。

watermarks:
watermarks是flink中的特殊事件,一个带有时间戳t的watermark会让opeator不会在接受任何小于t的事件

2.4 状态保存与迁移(save point and Migration)

流式计算是一直在运行的,那么当你需要

  1. 更改逻辑
  2. 版本升级
  3. 并行度调整

不得不停掉服务的时候,而且希望在重启后接着上次的位置继续进行计算,在flink中采用savepoint进行实现。savepoint可以理解成一个手动的checkpoint.

3.Flink的架构

Flink可以部署在多种环境下

  • yarn
  • mesos
  • stand-alone
  • k8s

4.Flink的API

flink提供了三层api供开发者使用,如下图
二、Flink入门--名词概念解释_第6张图片

  • ProcessFunctions提供对时间和状态的细粒度控制,实现复杂的事件业务逻辑,控制力度细,抽象能力差。
  • DataStream API 一般面向开发者,介于两者之间
  • SQL & Table API 即我们使用的sql,操作简单上手容易,但是控制力度比较粗,抽象能力强

你可能感兴趣的:(Apache,Flink)