ybhuang 发表于 2024-1-5 08:48:00

【尚硅谷】Flink1.13实战教程(涵盖所有flink-Java知识点)

【尚硅谷】Flink1.13实战教程(涵盖所有flink-Java知识点)

整理了一下Flink1.13关于故障转移、SQL以及监控和调试的新特性,个人能力有限,如果发现错误希望各位彦祖们能够及时指出,另外也欢迎大家积极补充(另外第一次接触Flink的小可爱们可以暂时忽略这条信息,等把武老师的视频学习完再瞅瞅也不迟):

参考:Flink官网 https://ci.apache.org/projects/flink/flink-docs-release-1.13/release-notes/flink-1.13/

1.故障转移(Failover):

        a. state.backend.async选项已弃用(Remove state.backend.async option)。 快照现在总是异步的(就像以前默认的那样),而且再也没有配置同步快照的选项了。FsStateBackend和MemoryStateBackend的构造函数为同步/异步快照取一个标志,为API兼容性保留,但该标志现在被忽略。

        b. 从checkpoint解绑状态后端(Disentangle StateBackends from Checkpointing)。Flink总是将本地状态存储与容错分离开来。 关键状态是在状态后端本地维护的,可以是在JVM堆上,也可以是在内嵌的RocksDB实例中。 容错来自检查点和保存点——任务内部状态到某些持久文件系统的周期性快照。历史上,Flink的StateBackend界面以一种让许多用户困惑的方式混合了这些概念。 在1.13中,检查点配置被提取到它们自己的接口CheckpointStorage中。此更改不会影响运行时行为,只是为用户提供更好的心智模型。 管道可以在不丢失状态、一致性或语义更改的情况下更新以使用新的抽象。

        c. 统一键控状态保存点的二进制格式(Unify binary format for Keyed State savepoints)。Flink的保存点二进制格式在所有状态后端都是统一的。 这意味着您可以使用一个状态后端获取一个保存点,然后使用另一个状态后端恢复它。如果你想切换状态后端,你应该首先升级你的Flink版本到1.13,然后用新版本取一个保存点,只有在那之后,你才能用不同的状态后端恢复它。

        d. FailureRateRestartBackoffTimeStrategy允许比配置少一次重启(FailureRateRestartBackoffTimeStrategy allows one less restart than configured)。失败率重启策略允许的每次间隔重启时间比配置的少1。 希望保持当前行为的用户应该将每次间隔允许的最大失败数减少1。

        e.支持缩放未对齐检查点(Support rescaling for Unaligned Checkpoints)。当从未对齐的检查点恢复时,用户现在可以更改作业的并行性。 这一变化允许用户在反压力下快速升级工作。

2.SQL

        a. 正式弃用legacy planner(Officially deprecate the legacy planner)。旧的表和SQL API计划器已经被弃用,并将在Flink 1.14中删除。 这意味着BatchTableEnvironment和DataSet API互操作都将结束。 使用统一的TableEnvironment进行批处理和流处理,或者使用批处理执行模式下的DataStream API。

        b.使用TIMESTAMP_LTZ作为函数PROCTIME()的返回类型(Use TIMESTAMP_LTZ as return type for function PROCTIME())。在Flink 1.13之前,PROCTIME()的函数返回类型是TIMESTAMP,返回值是UTC时区的TIMESTAMP,例如wall-clock显示的是201203-01 12:00:00 at Shanghai,而PROCTIME()显示的是201203-01 04:00:00,这是错误的。 Flink 1.13修复了这个问题,并使用TIMESTAMP_LTZ类型作为PROCTIME()的返回类型,用户不再需要处理时区问题。

        c. 支持在TIMESTAMP_LTZ列上定义事件时间属性(Support defining event time attribute on TIMESTAMP_LTZ column)。支持在TIMESTAMP_LTZ列上定义事件时间属性,基于此,Flink SQL优雅地支持夏令时。

        d. 正确的函数CURRENT_TIMESTAMP/CURRENT_TIME/CURRENT_DATE/LOCALTIME/LOCALTIMESTAMP/NOW() 。时间函数CURRENT_TIMESTAMP和NOW()的值从TIMESTAMP类型的UTC时间修正为TIMESTAMP_LTZ类型的epoch时间。 时间函数LOCALTIME, LOCALTIMESTAMP, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP和NOW()将在批处理作业的查询开始时对每条记录进行一次计算。

        e. 在数值类型和时间戳类型之间禁用有问题的转换(Disable problematic cast conversion between NUMERIC type and TIMESTAMP type)。在NUMERIC类型和TIMESTAMP类型之间的CAST操作是有问题的,现在被禁用了,例如CAST(NUMERIC AS TIMESTAMP(3))被禁用,应该使用TO_TIMESTAMP(FROM_UNIXTIME(NUMERIC))代替。

        f. 支持使用模块语法(Support USE MODULES syntax)。术语MODULES现在是一个保留的关键字。 使用反勾号来转义列名和此名称的其他标识符。

        g. 更新TableResult.collect()/TableResult.print()到新的类型system。对于列类型和行类型,Table.execute().collect()可能会返回略有不同的结果。 最重要的区别包括:结构化类型表示为原始类的pojo,而不再是Row。原始类型根据TableConfig中的配置进行序列化。

        h. 添加新的StreamTableEnvironment.fromDataStream。fromdatastream现在有稍微不同的语义,因为它已经集成到新的类型系统中。 特别是,与1.12相比,来自复合类型信息的行字段的顺序可能不同。 旧的行为仍然可以通过重载方法获取表达式,如fromDataStream(ds, $("field1"), $("field2"))。

        i. 更新的行 Row.toString 方法。Row.toSting()方法已被重制。 这是一个不相容的变化。 如果测试仍然需要旧的表示,那么可以通过标志RowUtils恢复旧的行为。 用于本地JVM的USE_LEGACY_TO_STRING。 但是,依赖行的字符串表示进行测试通常不是一个好主意,因为字段数据类型没有得到验证。

        j. 支持使用初始化SQL文件#启动SQL客户端。sql-client-defaults。 yaml yaml文件已弃用,在发布包中没有提供。 为了兼容,它仍然支持使用YAML文件初始化SQL Client(如果手动提供的话)。 但是建议使用新引入的-i startup选项来执行一个初始化SQL文件来设置SQL Client会话。 所谓的初始化SQL文件可以使用Flink ddl来定义可用的目录、表源和接收器、用户定义函数,以及执行和部署所需的其他属性。 对遗留SQL Client YAML文件的支持将在Flink 1.14中被完全删除。

        k. Hive方言不再支持DML和DQL的Flink语法。Hive方言支持HiveQL for DML和DQL。 为了使用Flink语法编写,请切换到默认方言。

3.监控和调试(Monitoring & debugging)

        a. 引入延迟跟踪状态(Introduce latency tracking state)。状态访问延迟指标被引入来跟踪所有类型的关键状态访问,以帮助调试状态性能。 这个特性在默认情况下是不启用的,可以通过设置state.backend.latency-track来开启。 keyed-state-enabled为true。

        b. 支持CPU火焰图在web UI。Flink现在为作业图中的每个节点提供火焰图。 请通过设置相应的配置标志rest.flamegraph.enabled来启用这个实验特性。

        c. 在Web UI中显示最近n个作业重启的异常/原因。Flink现在通过REST API和UI公开异常历史。 应该跟踪的最近处理的异常数量可以通过web.exception-history-size来定义。 作为这项工作的一部分,一些异常历史的REST API Json响应值已被弃用。

        d.创建backPressuredTimeMsPerSecond metric。以前,idleTimeMsPerSecond被定义为等待输入或返回压力的时间任务。 现在,idleTimeMsPerSecond排除了返回压力时间,所以如果任务返回压力,它就不是空闲的。 反压时间现在被单独测量为backpressurredtimemspersecond。

        e. 默认情况下启用log4j2监视间隔。默认情况下,启用了在运行时更新Log4j配置的Log4j支持。 每30秒检查一次配置文件的更改。

        f. ZooKeeper仲裁启动失败,缺少log4j库。由于Zookeeper 3.4和Log4j 2不兼容,Flink分发版中的Zookeeper脚本被修改为禁用Log4j JMX集成。 要重新启用此特性,请删除zookeeper.sh文件中设置zookeeper.jmx.log4j.disable的行。

        g. 暴露任务初始化阶段。任务的运行状态分为两个状态:初始化和运行。 当状态正在初始化时,任务正在初始化,如果检查点未对齐,则直到所有飞行中的数据被恢复。




https://www.alipan.com/s/TmfzYUoj8Lf点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

页: [1]
查看完整版本: 【尚硅谷】Flink1.13实战教程(涵盖所有flink-Java知识点)