简介

Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。

无边界数据——就是流处理

有边界数据——就是批处理

Flink作为大数据处理重要的技术栈之一,是不得不学习的技术,本系统将持续更新Flink相关知识点,希望对大家有所帮助。

特点

基于事件驱动

从事件流中提取数据,当数据到来触发计算、状态更新或其它操作

基于流处理

数据流是数据处理的基本要素

分层API

分成三种不同的API,越上层的api越易使用

#yyds干货盘点# Flink 快速入门(一)_插槽


高性能高可用

有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的处理延迟。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。


Flink运行架构

运行时组件

Flink运行时架构包括四个组件,在运行流处理应用程序时协同工作

  • 作业管理器(JobManager)
  • 资源管理器(ResourceManager)
  • 任务管理器(TaskManager)
  • 分发器(Dispatcher)

所有组件都会运行在java虚拟机上(JVM优化问题)


作业管理器(JobManager)

控制应用程序执行的主进程

JobManager会先接收到要执行的应用程序,这个程序包括:

  • 作业图(JobGraph)
  • 逻辑数据流图(logical dataflow graph)
  • 打包了所有类、库其它资源的JAR包

JobManager会把JobGraph转换成数据流图(执行图),包含所有可以并发执行的任务

JobManager向资源管理器请求执行任务必需的资源,也就是taskManager上的插槽(slot),会把执行图分发到真正运行它们的TaskManager上


资源管理器(ResourceManager)

主要负责管理TaskManager的slot。插槽的数量限制了TaskManager能够执行的任务数量

​ 启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用。JobManager就可以向插槽分配任务(tasks)来执行了。

 在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据


#### 分发器

​ 可以跨作业运行,它为应用提交提供了REST接口。

​ 当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager。由于是REST接口,所以Dispatcher可以作为集群的一个HTTP接入点,这样就能够不受防火墙阻挡。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。

 Dispatcher在架构中可能并不是必需的,这取决于应用提交运行的方式。