文章目录
1、Flink介绍
1.1 Flink是什么
Apache官网:
https://flink.apache.org/
Apache Flink® - Stateful Computations over Data Streams 数据流上的有状态计算
Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink被设计用于在所有常见的集群环境中运行,以内存中的速度和任何规模执行计算。
无界:数据流源源不断的,有开头,没有结束
有界:其实就相当于一个批处理,有开头,有结束
和Spark一样也支持批处理和流处理
Spark的实时处理:其实是一个小的迷你Batch,Stream是他的特例
Flink的实时处理:刚好和Spark想法,Flink是实时Stream的,Batch是Stream的特例
所有流式用例:
事件驱动的应用程序
流和批分析
数据管道和ETL
保证正确性:
只有一次状态的一致性
事件时间处理
复杂的后期数据处理
APIs:
SQL on Stream & Batch Data
DataStream API & DataSet API
ProcessFunction (Time & State)
1.2 Flink部署在什么地方
Flink集成了所有常见的集群资源管理器,如Hadoop纱线、Apache Mesos和Kubernetes,但也可以设置为作为独立集群运行。Flink集成了所有常见的集群资源管理器,如Hadoop YARN、Apache Mesos和Kubernetes,也可以设置为stand-alone运行。
1.3 Flink编程模型
- 最低级别抽象只提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由处理来自一个或多个流的事件,并使用一致的容错状态。此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算。
- 实际上,大多数应用程序不需要上面描述的低层抽象,而是根据核心API (DataStream API(有界/无界流)和DataSet API(有界数据集)进行编程。这些连贯api为数据处理提供了常见的构建块,比如用户指定的各种形式的transformations, joins, aggregations, windows, state等。在这些api中处理的数据类型用各自的编程语言表示为类。
- 表API是一个以表为中心的声明性DSL,表可以(在表示流时)动态地更改表。表API遵循(扩展的)关系模型:表有一个附加的模式(类似于关系数据库中的表),而API提供了类似的操作,如select、project、join、group-by、aggregate等。表API程序声明性地定义应该执行什么逻辑操作,而不是确切地指定操作代码的外观。虽然表API可以通过各种类型的用户定义函数进行扩展,但是它比核心API更缺乏表现力,但是使用起来更简洁(编写的代码更少)。此外,表API程序还需要经过一个在执行之前应用优化规则的优化器。
可以在表和DataStream/DataSet之间无缝转换,允许程序混合表API和DataStream和DataSet API。 - Flink提供的最高级抽象是SQL。这种抽象在语义和表达性上都类似于表API,但将程序表示为SQL查询表达式。SQL抽象与表API紧密交互,SQL查询可以在表API中定义的表上执行。
1.4 程序和数据流
Flink程序的基本构建块是流和转换
Spark:input–>transformation–>action–>output
Flink:source–>transformation–>transformation–>sink
Parallel Dataflows并行数据流
Windows窗口