Flink 2021记录

  |   0 评论   |   0 浏览

背景

回顾Flink 2021的发展情况。

记录

Flink在2021年发了两个大版本,1.13和1.14。

云原生

  • 云原生部署模式,自动弹性扩缩容。
  • Hive SQL语句兼容,包括DDL/DML/DQL。

易用性

  • 完整的批流一体的API (SQL/Table/DataStream): Flink 1.14
  • 流批混合运行,数据源自动切换(Hive/Kafka)
  • PyFlink:功能和性能追平Java API

基于DataStream做了统一,可以放弃DataSet API了。

Log-Based checkpoint

做snapshot更快。

功能点

流批一体功能演进

Flink 1.14只保留了DataStream API。Connector兼容流式存储和批式存储。

支持流式shuffle框架和批式shuffle框架。

Flink-CDC:全增量一体化数据集成

全增量一体化数据集成(全实时)

MySQL --> Flink CDC --> Hudi

先并行全量,再binlog增量。

主流实时离线一体化数仓架构

历史架构

图片.png

流式数仓:实时离线一体化架构

一套API,一套存储体系,一套方法论。

图片.png

优点:

  • 全链路数据实时流动:非minibatch
  • 流动的数据皆可分析:
  • 实时离线分析一体化:一套API

Flink Dynamic Table:流批一体存储

图片.png

图片.png

通过Flink SQL进行数据订正。

Flink机器学习推荐

图片.png

ALink项目重新进行打磨,Flink ML 2.0。

图片.png

FAQ

全局一致性保证

Flink最大的亮点是有状态的全局一致性引擎,基于Chandy-Lamport算法。

Chandy-Lamport算法

Chandy-Lamport算法要求节点间通信可靠并且消息有序。

让某个节点做global snapshot时发送一个marker,每个节点在处理数据时遇到marker执行下面的判断来做local snapshot,最后所有节点接收到marker并正确处理后就可以组成一个global snapshot。

多输入

在强一致的场景(例如Flink的exactly-once语义),每个节点是需要等待所有input
channel的marker到达后才做local snaphot和处理marker后续数据,因此节点的性能取决于最慢的inputchannel,服务整体吞吐和性能也会降低。

而在非强一致的场景可以,允许节点一直处理input channel中到达的数据,等到所有marker到达才做local snapshot,这样部分marker后的数据也会加到local
snapshot里面,如果节点发生故障从global snapshot恢复后还会继续算这部分marker以后的数据,这也是Flink中在不强制同步marker处理只能保证at-least-once语义的原因,当然这样服务的吞吐和性能会更高。

其它

相关工具

  • zeppelin:基于Web的notebook,提供交互数据分析和可视化。
  • AIFlow:AI工作流平台。

参考