Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有
状态计算。
Flink 能够提供毫秒级别的延迟,同时保证了数据处理的低延迟、高吞吐和结果的正确性,还提供 了丰富的时间类型和窗口计算、Exactly-once 语义支持,另外还可以进行状态管理,并提供 了 CEP(复杂事件处理)的支持。
这种以流为世界观的架构,获得的最大好处就是具有极低的延迟。
3. 分层API
最底层级的抽象仅仅提供了有状态流,它将通过过程函数(Process Function)
被嵌入到 DataStream API 中。底层过程函数(Process Function) 与 DataStream API
相集成,使其可以对某些特定的操作进行底层的抽象,它允许用户可以自由地处理
来自一个或多个数据流的事件,并使用一致的容错的状态。除此之外,用户可以注
册事件时间并处理时间回调,从而使程序可以处理复杂的计算。
实际上,大多数应用并不需要上述的底层抽象,而是针对核心 API(Core APIs)
进行编程,比如 DataStream API(有界或无界流数据)以及 DataSet API(有界数据
集)。这些 API 为数据处理提供了通用的构建模块,比如由用户定义的多种形式的转换(transformations),连接(joins),聚合(aggregations),窗口操作(windows)
等等。DataSet API 为有界数据集提供了额外的支持,例如循环与迭代。这些 API
处理的数据类型以类(classes)的形式由各自的编程语言所表示。
Table API 是以表为中心的声明式编程,其中表可能会动态变化(在表达流数据
时)。Table API 遵循(扩展的)关系模型:表有二维数据结构(schema)(类似于
关系数据库中的表),同时 API 提供可比较的操作,例如 select、project、join、group-by、
aggregate 等。Table API 程序声明式地定义了什么逻辑操作应该执行,而不是准确地
确定这些操作代码的看上去如何。
尽管 Table API 可以通过多种类型的用户自定义函数(UDF)进行扩展,其仍不
如核心 API 更具表达能力,但是使用起来却更加简洁(代码量更少)。除此之外,
Table API 程序在执行之前会经过内置优化器进行优化。
你可以在表与 DataStream/DataSet 之间无缝切换,以允许程序将 Table API 与
DataStream 以及 DataSet 混合使用。
Flink 提供的最高层级的抽象是 SQL 。这一层抽象在语法与表达能力上与
Table API 类似,但是是以 SQL 查询表达式的形式表现程序。SQL 抽象与 Table API
交互密切,同时 SQL 查询可以直接在 Table API 定义的表上执行。
目前 Flink 作为批处理还不是主流,不如 Spark 成熟,所以 DataSet 使用的并不
是很多。Flink Table API 和 Flink SQL 也并不完善,大多都由各大厂商自己定制。所
以我们主要学习 DataStream API 的使用。实际上 Flink 作为最接近 Google DataFlow
模型的实现,是流批统一的观点,所以基本上使用 DataStream 就可以了。
精确一次,低延迟,每秒处理数百万个事件毫秒级延迟,与众多常用存储系统的连接,高可用 动态扩展,实现24小时全天候运行,支持事件事件和处理时间语义
根据宽依赖进行划分stage
JobManager,TaskManeger,ResourceManager,Dispacher
jobManager的作用:类似spark中的master,负责申请资源,任务分发,任务调度执行,checkpoint的协调执行;可以搭建HA,双master。
类似spark中的worker,负责任务的执行,基于dataflow(spark中的DAG)划分出的task;与jobmanager保持心跳,汇报任务状态。
负责管理任务管理器(taskmanager)的插槽(slot)
可以跨作业运行,它为应用提交提供了rest接口
当一个应用被提交执行时,分发器就会启动并且将应用移交给一个jobmanager
通过配置文件中设置的核数来控制task的数量
允许,
默认情况下,flink允许子任务共享slot,即使他们是不同任务的子任务。这样的结果是,一个slot可以保存作业的整个通道
task slot是静态的概念,是指taskmanager具有的并发执行能力
== Source,Transformation,Sink ==
Source:负责读取数据源
Transformation:利用各种算子进行处理加工
Sink:负责输出
是根据用户通过Stream API编写的代码生成的最初的图。(用来表示表的拓扑结构)
StreamGraph经过优化后生成,主要的优化为将多个符合条件的节点Chain合在一起作为一个节点。
是jobManager根据JobGraph生成的,是JobGraph的并行化版本,是调度层最核心的数据结构。
是jobManager根据ExecutionGraph对job进行调度后,在各个TaskManager上部署Task后形成的图,并不是一个具体的数据结构。
一个特定算子的子任务(subtask)的个数被称之为其并行度。
一般情况下,一个stream的并行度,可以认为就是其所有算子中最大的并行度。
Flink采用了一种称为任务链的优化技术,可以再特定条件下减少本地通信的开销。为了满足任务链的要求,必须将两个或者多个算子设为相同的并行度,并且通过本地转发(local forward)的方式进行连接。
并行度相同,并且是one-to-one操作,两个条件缺一不可。
本文地址:https://blog.csdn.net/CH_Axiaobai/article/details/107356953
如对本文有疑问, 点击进行留言回复!!
step2:使用LitePal操作数据库,基于AndroidStudio。练习
shell练习:使用脚本同步系统时间 + hello world
荐 Kubernetes+docker 浅述-针对云平台测试
项目繁多的情况下,如何通过组织机构的调整管理好重点战略项目?
网友评论