Flink基础(一)基本概念

Flink基础概念

Flink是什么

  • 是一个分布式有状态流处理引擎(SPE),实现低延时,高吞吐。
    • 分布式(Distributed):有多个物理节点来处理数据,各个物理节点之间通过网络相连,用来传输数据或者控制信息。

    • 有状态(Stateful):这里引用在一篇论文中看到的来描述状态:

      “the intermediate value of a specific computation that will be used in subsequent operations during the processing of a data flow”

      也就是说State(状态)就是上下游处理的中间结果,一般是保存在算子(Operator)的内存中,两者关系如下所示。
      State与Operator的关系

    • 流处理(Stream):能够处理有界数据流(Bounded Data Stream)和无界数据流(Unbounded Data Stream)有界和无界数据流

    • 时间(Time):时间机制也是Flink中很重要的一个概念。Events从提交时刻的Event-Time顺序和最终被处理的时的Process-Time顺序是可能不一致的,也就是Flink中的乱序问题,这就和后续的一些内部机制有关系了,后续再说。(下图中Event可以从类似IoT的传感器或者是像Kafka这样的消息队列产生,经过各种传输之后,处理的先后顺序可能和最初的产生顺序不同了)提交时间和处理时间

  • 之前的大数据引擎例如Spark(可以进行流数据处理,但是还是基于batch的批处理,只不过是将batch缩小来近似的实现stream处理);还有Storm(是可以进行真正的流处理,但是吞吐很低)

Flink的数据流编程模型(Dataflow Programming Model)

  • Flink程序运行的过程Flink application运行图
    • 每一个 Flink application 映射成 dataflow,dataflow 在逻辑上一般对应一个DAG图(也有有环图的情况),最终在物理上形成一个分布式拓扑架构
    • Stream的数据不断的从数据源source中进入系统,经过各种操作(map(),keyby()等等)最后再写入到sink中
      • 其中某些聚合操作,join,count这种运算是积累性质的,就需要保存中间数据,这些中间数据就是前面说的状态,一般保存在执行操作的Operator的内存中
      • 常见的source和sink如下图source,transformation和sink

Flink的分布式运行环境(Distributed runtime environment)

  • Flink运行时是由多个顶点和边构成的分布式结构;其中顶点就是各种Operator(或者叫做Worker,算子,instance,运算实例),边就是Operator交换数据的通道(上面流着data stream)
    • 其中Operator就相当于函数映射,完成数据转换又分为TaskManagerJobManager
      • 一般情况下一个系统中只有一个 TaskManager ,但是在高可用的部署(HA模式)情况下,为了保证系统的稳定,可能会有多个。
      • TaskManager一般都是多个
        • TaskManager:协调整个分布式系统,协调任务的分发,还会存储整个系统的checkpoint
        • JobManager:保存State,执行Task
  • 每一个Taskmanager就是一个JVM进程;其中有多个slots用来作为资源的分配单位(一般就是分配内存)runtime
  • 在上图中,用户作为Client将编写好的程序提交,系统将job提交给Jobmanager,Jobmanager作为整个系统的协调者将用户提交的job映射成DAG图,然后转化为实际的物理分布式运行结构部署到各个TaskManager上运行。

参考资料

1.Apache Flink官网
2.Github上Flink中国社区
3.Flink技术源码解析(一):Flink概述与源码研读准备

发布了9 篇原创文章 · 获赞 1 · 访问量 187

猜你喜欢

转载自blog.csdn.net/PanicJaw/article/details/102712676