版权声明:尊重原创,转载请标明,本文转自 https://blog.csdn.net/high2011/article/details/85199030
说明
本文基于 Flink -1.6.0 版本进行整理和分析,如有不妥之处,敬请指正。
内容
一、Flink 的技术栈
图片来源:https://ci.apache.org/projects/flink/flink-docs-release-1.6/internals/components.html
注意
Table API & SQL 统一了 DataStream API 和 DataSet API ,所以,如果没有特殊业务场景,建议多使用 Table API &SQL .
二、Flink 分层架构
图片来源:https://ci.apache.org/projects/flink/flink-docs-release-1.6/concepts/programming-model.html
说明
1、Table API & SQL: 描述性API ,基于优化。
2、DataStream API: 提供了比 ProcessFunction 更丰富的API。
3、ProcessFunction:最底层的 API
三 、对比Flink 分层架构中的技术 Stack
1、DataStream API
执行 的Graph
扫描二维码关注公众号,回复:
4723552 查看本文章
特性
(1)流处理API
- 在Process Function基础上增加了了⼀一些内置Operators
- Join, filter, project, coGroup, connect, window…
(2)所写即所得
- 直接定义物理操作
- 不经过优化器优化
2、DataSet API
执行 Graph
特性
(1)批处理API
- 在Process Function基础上增加了了⼀一些内置Operators
- Join, filter, project, coGroup, connect, …
- sort, distinct, max, min, etc.
(2)经过Flink自带的优化器
- 不一定有用
3、SQL
- 批流统一
- 基于关系代数的标准查询语⾔言
- Apache Calcite优化
4、Table API VS SQL
Table API | SQL | e.g | |
流批统一 | Y | Y | SELECT/AGG/WINDOW etc. |
功能扩展性 | Y | N | FlatAGG/Iteration/Column operation etc. |
表达方式扩展性 | Y | N | map/flatMap/ Row.flatten()/minus.intersect etc |
编译检查 |
Y | N | Java / Scala |