流批一体的Flink引擎 | 青训营笔记

110 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

流式计算

批式计算:

  • 离线计算,非实时
  • 静态数据集
  • 小时/天等周期性计算

流式计算:

  • 实时计算、快速、低延迟
  • 无限流、动态、无边界
  • 7*24小时持续运行
  • 流批一体

大数据实时性的要求使得计算架构模式从批式计算发展到了流式计算。和批式计算相比,流式计算省去了数据导入和查询过程,因此从事件中获取指标的延迟更低。而且流式计算不需要考虑处理由定期导入和输入有界性导致的人工数据边界。

Apache Flink是什么

Apache Flink是一个用于在数据流上进行有状态计算的框架和分布式处理引擎,擅长处理无界和有界数据集,可以部署到任意常见的集群环境中,运行任意规模的应用,同时Flink针对本地状态访问进行了优化,任务的状态始终保持在内存中,保证了非常低的处理延时。

Flink的SDK支持SQL、DataStream和Python。

核心组件

JobManager(JM)

负责整个任务的协调工作,包括调度task、触发协调task做checkpoint、协调容错恢复等。因此JM类似于集群中的master,接受client编写好的Flink应用,JM会根据集群的资源使用情况将应用分配给合适的TM并启动应用。

Task Manager(TM)

负责执行一个DataFlow Graph的各个task以及Data streams的buffer和数据交换。因此TM类似于集群中的slave,负责接收来自JM分配的任务并启动应用。

JM和TM之间通过Actor System进行通信,TM之间并发执行。

流批一体

流数据和批数据在业务中都是非常重要的数据来源,对于流数据和批数据的处理逻辑类似但又有很多的不同之处,导致类似的计算过程要设计两次,带来了成本的上升。

Flink的优势在于流批一体,Flink在无界的数据流处理上拥有诸多强大的特性,同时也针对有界的数据流开发了专用的高效算子,Flink处理两类数据的API是统一的,架构的每一层设计都完成了同时对流和批的支持,因此Flink可以同时解决流和批场景的问题。