初识Flink架构 | 青训营笔记

93 阅读2分钟

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

  1. 编程接口

image.png Flink中提供了4种不同层次的API,每种API在简洁和易表达之间有自己的权衡,适用于不同的场景。目前上面3个会用得比较多。

  • 低级API(Stateful Stream Processing):提供了对时间和状态的细粒度控制,简洁性和易用性较差,主要应用在一些复杂事件处理逻辑上。
  • 核心API(DataStream/DataSet API):主要提供了针对流数据和批数据的处理,是对低级API进行了一些封装,提供了filter、sum、max、min等高级函数,简单易用,所以这些API在工作中应用还是比较广泛的。
  • Table API:一般与DataSet或者DataStream紧密关联,可以通过一个DataSet或DataStream创建出一个Table,然后再使用类似于filter, join,或者 select这种操作。最后还可以将一个Table对象转成DataSet或DataStream。
  • SQL:Flink的SQL底层是基于Apache Calcite,Apache Calcite实现了标准的SQL,使用起来比其他API更加灵活,因为可以直接使用SQL语句。Table API和SQL可以很容易地结合在一块使用,因为它们都返回Table对象。
  1. 运行时执行引擎

流程介绍:

用户使用组件栈和接口编写的Flink作业最终都会在客户端转换成JobGraph对象,然后提交到集群中运行。除了任务的提交和运行之外,运行时还包含资源管理器Resource-Manager以及负责接收和执行Task的TaskManager,这些服务各司其职,相互合作。 组件介绍:

  • Flink 集群主要包含3部分: JobManager、TaskManager 和客户端,三者均为独立的JVM进程。Flink 集群启动后,会至少启动一个JobManager和多个Task-Manager。客户端将任务提交到JobManager, JobManager再将任务拆分成Task并调度到各个TaskManager中执行,最后TaskManager将Task执行的情况汇报给JobManager。
  1. 通讯协议

组件间的通讯协议使用的是 Akka 框架,组件自身内部通信协议是 Netty 框架