官方对于flink的解释是:Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
无边界指的是源源不断地有数据传输过来,有界指得是数据量已知。比如说游戏服务器,他会7*24小时接收来自玩家产生地数据,这算无界流;有界流就比如说我们的读取本地文件,读取mysql中这样已经保存好的数据,读取完成后就停止任务
同样都是流处理,我们不免要比较spark streaming和flink的区别
flink的api
Flink 为流式/批式处理应用程序的开发提供了不同级别的抽象。
1、Process Function是 最底层的API用户可以在此层抽象中注册事件时间(event time)和处理时间(processing time)回调方法,从而允许程序可以实现复杂计算。
2、Flink API 第二层是 Core API。实际上,许多应用程序不需要使用到上述最底层抽象的 API,而是可以使用 Core APIs 进行编程:其中包含 DataStream API(应用于有界/无界数据流场景)和 DataSet API(应用于有界数据集场景)两部分。
3、Flink API 第三层是 Table API。Table API 是以表(Table)为中心的声明式编程(DSL)API,例如在流式数据场景下,它可以表示一张正在动态改变的表。与spark sql 类似拥有schema,提供了非常方便的DSL语句。并且,Table API 程序在执行之前还会使用优化器中的优化规则对用户编写的表达式进行优化。Table API与 DataStream/DataSet 可以进行无缝切换
4、Flink API 最顶层抽象是 SQL。这层抽象在语义和程序表达式上都类似于 Table API,但是其程序实现都是 SQL 查询表达式,我们可以通过flink sql构建动态的一张表,也可以通过catalog与hive进行整合
你可以把flink的代码分为3个部分,一部分是读取数据的source,一个是最终结果写某个位置的sink,以及中间的transformation操作(通过算子,对数据内容,数据时间进行操作)
官网提供了相当多的模板使用,你也可以使用自定义的连接方法