Flink 1.10 新特性研究

Flink 1.10 release 文档描述了一些比较重要的点,比如配置、操作、依赖、1.9 版本和 1.10 版本之间的区别,如果你准备将 Flink 升级到 1.10 版本,建议仔细看完下面的内容。

集群和部署

  • 文件系统需要通过插件的方式加载

  • Flink 客户端根据配置的类加载策略加载,parent-first 和 child-first 两种方式

  • 允许在所有的 TaskManager 上均匀地分布任务,需要在 flink-conf.yaml 配置文件中配置 cluster.evenly-spread-out-slots: true 参数

  • 高可用存储目录做了修改,在 HA_STORAGE_DIR/HA_CLUSTER_ID 下,HA_STORAGE_DIR 路径通过 high-availability.storageDir 参数配置,HA_CLUSTER_ID 路径通过 high-availability.cluster-id 参数配置

  • 当使用 -yarnship 命令参数时,资源目录和 jar 文件会被添加到 classpath 中

  • 移除了 --yn/--yarncontainer 命令参数

  • 移除了 --yst/--yarnstreaming 命令参数

  • Flink Mesos 会拒绝掉所有的过期请求

  • 重构了 Flink 的调度程序,其目标是使调度策略在未来可以定制

  • 支持 Java 11,当使用 Java 11 启动 Flink 时,会有些 WARNING 的日志提醒,注意:Cassandra、Hive、HBase 等 connector 没有使用 Java 11 测试过

内存管理

  • 全新的 Task Executor 内存模型,会影响 standalone、YARN、Mesos、K8S 的部署,JobManager 的内存模型没有修改。如果你在没有调整的情况下,重用以前的 Flink 配置,则新的内存模型可能会导致 JVM 的计算内存参数不同,从而导致性能的变化。

以下选项已经删除,不再起作用:

以下选项已经替换成其他的选项:

  • RocksDB State Backend 内存可以控制,用户可以调整 RocksDB 的写/读内存比率 state.backend.rocksdb.memory.write-buffer-ratio(默认情况下 0.5)和为索引/过滤器保留的内存部分 state.backend.rocksdb.memory.high-prio-pool-ratio(默认情况下0.1)

  • 细粒度的算子(Operator)资源管理,配置选项 table.exec.resource.external-buffer-memorytable.exec.resource.hash-agg.memorytable.exec.resource.hash-join.memory,和 table.exec.resource.sort.memory 已被弃用

Table API 和 SQL

  • 将 ANY 类型重命名为 RAW 类型,该标识符 raw 现在是保留关键字,在用作 SQL 字段或函数名称时必须转义

  • 重命名 Table Connector 属性,以便编写 DDL 语句时提供更好的用户体验,比如 Kafka Connector 属性 connector.propertiesconnector.specific-offsets、Elasticsearch Connector 属性 connector.hosts

  • 之前与临时表和视图进行交互的方法已经被弃用,目前使用 createTemporaryView()

  • 移除了 ExternalCatalog API(ExternalCatalog、SchematicDescriptor、MetadataDescriptor、StatisticsDescriptor),建议使用新的 Catalog API

配置

  • ConfigOptions 如果无法将配置的值解析成所需要的类型,则会抛出 IllegalArgumentException 异常,之前是会返回默认值

  • 增加默认的重启策略延迟时间(fixed-delay 和 failure-rate 已经默认是 1s,之前是 0)

  • 简化集群级别的重启策略配置,现在集群级别的重启策略仅由 restart-strategy 配置和是否开启 Checkpoint 确定

  • 默认情况下禁用内存映射的 BoundedBlockingSubpartition

  • 移除基于未认证的网络流量控制

  • 移除 HighAvailabilityOptions 中的 HA_JOB_DELAY 配置

状态(State)

  • 默认开启 TTL 的状态后台清理

  • 弃用 StateTtlConfig#Builder#cleanupInBackground()

  • 使用 RocksDBStateBackend 时,默认将计时器存储在 RocksDB 中,之前是存储在堆内存(Heap)中

  • StateTtlConfig#TimeCharacteristic 已经被移除,目前使用 StateTtlConfig#TtlTimeCharacteristic

  • 新增 MapState#isEmpty() 方法来检查 MapState 是否为空,该方法比使用 mapState.keys().iterator().hasNext() 的速度快 40%

  • RocksDB 升级,发布了自己的 FRocksDB(基于 RocksDB 5.17.2 版本),主要是因为高版本的 RocksDB 在某些情况下性能会下降

  • 默认禁用 RocksDB 日志记录,需要启用的话需要利用 RocksDBOptionsFactory 创建 DBOptions 实例,并通过 setInfoLogLevel 方法设置 INFO_LEVEL

  • 优化从 RocksDB Savepoint 恢复的机制,以前如果从包含大型 KV 对的 RocksDB Savepoint 恢复时,用户可能会遇到 OOM。现在引入了可配置的内存限制,RocksDBWriteBatchWrapper 默认值为 2MB。RocksDB的WriteBatch 将在达到内存限制之前刷新。可以在 flink-conf.yml 中修改 state.backend.rocksdb.write-batch-size 配置

  • 不再支持 Python2

监控

  • InfluxdbReporter 会跳过 Inf 和 NaN(InfluxDB 不支持的类型,比如 Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN

连接器(Connectors)

  • 改变 Kinesis 连接器的 License

接口更改

  • ExecutionConfig#getGlobalJobParameters() 不再返回 null

  • MasterTriggerRestoreHook 中的 triggerCheckpoint 方法必须时非阻塞的

  • HA 服务的客户端/服务器端分离,HighAvailabilityServices 已分离成客户端 ClientHighAvailabilityServices 和集群端 HighAvailabilityServices

  • HighAvailabilityServices#getWebMonitorLeaderElectionService() 标记过期

  • LeaderElectionService 接口做了更改

  • 弃用 Checkpoint 锁

  • 弃用 OptionsFactory 和 ConfigurableOptionsFactory 接口

参考:https://github.com/apache/flink/blob/master/docs/release-notes/flink-1.10.zh.md


看了下官方的这份新版本的介绍,感觉还缺少很多新功能的介绍,比如:

  • 在 1.10 版本中把 Blink 版本的哪些功能整合过来了
  • 竟然没有写 Flink 对原生 Kubernetes 的集成
  • PyFlink 的介绍是认真的吗?
  • 对 Hive 的生产级别集成,完全没有提及呀
  • Table API/SQL 优化点讲得不太多

可能因为篇幅的问题,还有很多特性都没有讲解出来,得我们自己去找源码学习!

最后

GitHub Flink 学习代码地址:https://github.com/zhisheng17/flink-learning

微信公众号:zhisheng

另外我自己整理了些 Flink 的学习资料,目前已经全部放到微信公众号(zhisheng)了,你可以回复关键字:Flink 即可无条件获取到。另外也可以加我微信 你可以加我的微信:yuanblog_tzs,探讨技术!

更多私密资料请加入知识星球!

专栏介绍

扫码下面专栏二维码可以订阅该专栏

首发地址:http://www.54tianzhisheng.cn/2019/11/15/flink-in-action/

专栏地址:https://gitbook.cn/gitchat/column/5dad4a20669f843a1a37cb4f

博客

1、Flink 从0到1学习 —— Apache Flink 介绍

2、Flink 从0到1学习 —— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

3、Flink 从0到1学习 —— Flink 配置文件详解

4、Flink 从0到1学习 —— Data Source 介绍

5、Flink 从0到1学习 —— 如何自定义 Data Source ?

6、Flink 从0到1学习 —— Data Sink 介绍

7、Flink 从0到1学习 —— 如何自定义 Data Sink ?

8、Flink 从0到1学习 —— Flink Data transformation(转换)

9、Flink 从0到1学习 —— 介绍 Flink 中的 Stream Windows

10、Flink 从0到1学习 —— Flink 中的几种 Time 详解

11、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 ElasticSearch

12、Flink 从0到1学习 —— Flink 项目如何运行?

13、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Kafka

14、Flink 从0到1学习 —— Flink JobManager 高可用性配置

15、Flink 从0到1学习 —— Flink parallelism 和 Slot 介绍

16、Flink 从0到1学习 —— Flink 读取 Kafka 数据批量写入到 MySQL

17、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 RabbitMQ

18、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 HBase

19、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 HDFS

20、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Redis

21、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Cassandra

22、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Flume

23、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 InfluxDB

24、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 RocketMQ

25、Flink 从0到1学习 —— 你上传的 jar 包藏到哪里去了

26、Flink 从0到1学习 —— 你的 Flink job 日志跑到哪里去了

27、阿里巴巴开源的 Blink 实时计算框架真香

28、Flink 从0到1学习 —— Flink 中如何管理配置?

29、Flink 从0到1学习—— Flink 不可以连续 Split(分流)?

30、Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文

31、Flink 架构、原理与部署测试

32、为什么说流处理即未来?

33、OPPO 数据中台之基石:基于 Flink SQL 构建实时数据仓库

34、流计算框架 Flink 与 Storm 的性能对比

35、Flink状态管理和容错机制介绍

36、Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理

37、360深度实践:Flink与Storm协议级对比

38、如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了

39、Apache Flink 1.9 重大特性提前解读

40、Flink 全网最全资源(视频、博客、PPT、入门、原理、实战、性能调优、源码解析、问答等持续更新)

41、Flink 灵魂两百问,这谁顶得住?

42、Flink 从0到1学习 —— 如何使用 Side Output 来分流?

43、你公司到底需不需要引入实时计算引擎?

44、一文让你彻底了解大数据实时计算引擎 Flink

源码解析

1、Flink 源码解析 —— 源码编译运行

2、Flink 源码解析 —— 项目结构一览

3、Flink 源码解析—— local 模式启动流程

4、Flink 源码解析 —— standalone session 模式启动流程

5、Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Job Manager 启动

6、Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Task Manager 启动

7、Flink 源码解析 —— 分析 Batch WordCount 程序的执行过程

8、Flink 源码解析 —— 分析 Streaming WordCount 程序的执行过程

9、Flink 源码解析 —— 如何获取 JobGraph?

10、Flink 源码解析 —— 如何获取 StreamGraph?

11、Flink 源码解析 —— Flink JobManager 有什么作用?

12、Flink 源码解析 —— Flink TaskManager 有什么作用?

13、Flink 源码解析 —— JobManager 处理 SubmitJob 的过程

14、Flink 源码解析 —— TaskManager 处理 SubmitJob 的过程

15、Flink 源码解析 —— 深度解析 Flink Checkpoint 机制

16、Flink 源码解析 —— 深度解析 Flink 序列化机制

17、Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

18、Flink Metrics 源码解析 —— Flink-metrics-core

19、Flink Metrics 源码解析 —— Flink-metrics-datadog

20、Flink Metrics 源码解析 —— Flink-metrics-dropwizard

21、Flink Metrics 源码解析 —— Flink-metrics-graphite

22、Flink Metrics 源码解析 —— Flink-metrics-influxdb

23、Flink Metrics 源码解析 —— Flink-metrics-jmx

24、Flink Metrics 源码解析 —— Flink-metrics-slf4j

25、Flink Metrics 源码解析 —— Flink-metrics-statsd

26、Flink Metrics 源码解析 —— Flink-metrics-prometheus

26、Flink Annotations 源码解析

27、Flink 源码解析 —— 如何获取 ExecutionGraph ?

28、大数据重磅炸弹——实时计算框架 Flink

29、Flink Checkpoint-轻量级分布式快照

30、Flink Clients 源码解析

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 集群和部署
  2. 2. 内存管理
  3. 3. Table API 和 SQL
  4. 4. 配置
  5. 5. 状态(State)
  6. 6. PyFlink
  7. 7. 监控
  8. 8. 连接器(Connectors)
  9. 9. 接口更改
  10. 10. 最后
  11. 11. 专栏介绍
  12. 12. 博客
  13. 13. 源码解析