当前位置: 首页 > Web前端 > vue.js

ApacheFlink1.10.0发布,年度最大版本升级!

时间:2023-04-01 01:10:38 vue.js

新特性及优化的内存管理和配置优化Flink目前的TaskExecutor内存模型存在一些缺陷,导致难以优化资源利用,例如:流和批内存使用的配置模型不同;RocksDBstateinstreamprocessing后端需要依赖用户进行复杂的配置。为了让内存配置对用户来说更清晰、更直观,Flink1.10对TaskExecutor的内存模型和配置逻辑做了重大改变(FLIP-49[7])。这些变化使得Flink能够更好地适应所有的部署环境(比如Kubernetes、Yarn、Mesos),让用户能够更严格地控??制自己的内存开销。■托管内存扩展托管内存的范围已经扩展到还包括RocksDB状态后端使用的内存。虽然批处理作业可以同时使用堆内和堆外内存,但使用RocksDB状态后端的流作业只能使用堆外内存。因此,为了让用户可以在不改变集群配置的情况下执行流式和批式作业,我们规定从现在开始托管内存只能是堆外的。■简化RocksDB配置之前配置RocksDB这样的堆外状态后端需要大量手动调试,比如减少JVM堆空间,设置Flink使用堆外内存等。现在,Flink开箱即用的配置支持这一切,只需更改托管内存的大小,即可调整RocksDB状态后端的内存预算。另一个重要的优化是Flink现在可以限制RocksDB的原生内存占用(FLINK-7289[8])以避免超出总内存预算——这对于Kubernetes等容器化部署环境尤为重要。关于如何启用和调试该功能,请参考RocksDBDebugging[9]。注意:FLIP-49更改了集群资源配置流程,因此从以前的Flink版本升级时可能需要调整集群配置。有关详细的更新日志和调试指南,请参阅文档[10]。统一的作业提交逻辑在此之前,提交作业是执行环境的职责,与不同的部署目标(如Yarn、Kubernetes、Mesos)密切相关。这导致用户需要为不同的环境保留多套配置,增加了管理成本。在Flink1.10中,作业提交逻辑被抽象为一个通用的Executor接口(FLIP-73[11])。新添加的ExecutorCLI(FLIP-81[12])引入了一种为任意执行目标指定配置参数的统一方式[13]。另外,引入负责获取JobExecutionResult的JobClient(FLINK-74[14]),也可以将获取作业执行结果的逻辑与作业提交解耦。上述变化为用户提供了一个统一的Flink入口,使得在ApacheBeam或Zeppelinnotebooks等下游框架中以编程方式使用Flink变得更加容易。对于需要在多种环境中使用Flink的用户,新的基于配置的执行流程也显着减少了冗余代码量和维护开销。NativeKubernetesintegration(Beta)对于想在容器化环境中尝试Flink的用户,如果想在Kubernetes上部署和管理Flink独立集群,首先需要熟悉容器、算子,以及kubectllearn等环境工具。在Flink1.10中,我们引入了初步的主动Kubernetes集成和会话模式支持(FLINK-9953[15])。其中,“active”是指FlinkResourceManager(K8sResMngr)与Kubernetes原生通信,像Flink在Yarn、Mesos上一样按需申请pod。用户可以利用命名空间在多租户环境中以更少的资源开销启动Flink。这就需要用户提前配置好RBAC角色和服务账号足够的权限。如统一作业提交逻辑一节所述,Flink1.10将命令行参数映射到统一配置。因此,用户可以参考Kubernetes的配置选项,在命令行使用如下命令将Flink作业提交到Kubernetes。./bin/flinkrun-d-ekubernetes-session-Dkubernetes.cluster-id=examples/streaming/WindowJoin.jar如果你想第一次尝试这个特性,请参考相关文档[16],尝试并与社区分享您的反馈:表API/SQL:生产就绪的Hive集成Flink1.9引入了Hive集成的预览版。该版本允许用户使用SQLDDL将Flink特定的元数据持久化到HiveMetastore,调用Hive中定义的UDF,以及读写Hive中的表。Flink1.10进一步开发和完善了此功能,带来了与Hive主要版本完全兼容的生产就绪Hive集成[17]。■批处理SQL原生分区支持以前,Flink只支持写入非分区的Hive表。在Flink1.10中,FlinkSQL扩展支持INSERTOVERWRITE和PARTITION(FLIP-63[18])的语法,允许用户写入Hive中的静态和动态分区。写入静态分区INSERT{INTO|OVERWRITE}TABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1FROMfrom_statement;写入动态分区INSERT{INTO|OVERWRITE}TABLEtablename1select_statement1FROMfrom_statement;对分区表的全面支持,使得用户在读取数据时受益于分区修剪,减少需要扫描的数据量,从而大大提高这些操作的性能。■其他优化除了分区剪枝,Flink1.10的Hive集成还引入了很多数据读取方面的优化[19],例如:projectionpushdown:Flink使用projectionpushdown技术,通过忽略不必要的domain,最小化之间的数据传输量Flink和Hive表。当表有大量列时,这种优化特别有效。LIMIT下推:对于包含LIMIT语句的查询,Flink会尽可能限制返回的数据记录数,以减少网络传输的数据量。读取数据时ORC向量化:为了提高读取ORC文件的性能,对于Hive2.0.0及以上版本以及非复合数据类型的列,Flink现在默认使用原生的ORC向量化读取器。■使用可插拔模块作为Flink内置对象(Beta)Flink1.10在Flinktablecore中引入了通用的可插拔模块机制,目前主要用于系统内置函数(FLIP-68[20])。通过模块,用户可以扩展Flink的系统对象,比如像Flink系统函数一样使用Hive内置函数。新版本包含一个预实现的HiveModule,可以支持多个Hive版本,当然用户也可以选择编写自己的可插拔模块[21]。其他表API/SQL优化■SQLDDL中的水印和计算列Flink1.10添加了语法扩展,用于定义时间属性并为SQLDDL中的流处理生成水印(FLIP-66[22])。这使用户能够在使用DDL语句创建的表上执行基于时间的操作(例如窗口)以及定义水印策略[23]。CREATETABLEtable_name(WATERMARKFORcolumnNameAS)WITH(...)其他SQLDDL扩展Flink现在严格区分临时/持久、系统/目录函数(FLIP-57[24])。这不仅消除了函数引用中的歧义,还带来了确定性的函数解析顺序(例如,当存在命名冲突时,Flink更倾向于系统函数、临时函数优于目录函数以及持久函数)。我们在FLIP-57的基础上扩展了SQLDDL的语法,支持创建目录函数、临时函数和临时系统函数(FLIP-79[25]):CREATE[TEMPORARY|TEMPORARYSYSTEM]FUNCTION[IFNOTEXISTS][catalog_name.][db_name.]function_nameASidentifier[LANGUAGEJAVA|SCALA]目前完整的FlinkSQLDDL支持请参考最新文档[26]。注意:为了未来能够正确处理和保证元对象(表、视图、函数)行为的一致性,Flink舍弃了TableAPI中的部分对象声明方法,让剩余的方法更接近于标准SQLDDL(FLIP-64[27])。■批处理的完整TPC-DS覆盖范围TPC-DS是一种广泛使用的行业标准决策支持基准,用于测量基于SQL的数据处理引擎的性能。Flink1.10支持所有端到端的TPC-DS查询(FLINK-11491[28]),标志着FlinkSQL引擎有能力满足现代数据仓库和其他类似的处理需求。PyFlink:支持原生的用户自定义函数(UDF)是Flink全面支持Python的第一步。在之前的版本中,我们发布了PyFlink的预览版。在新版本中,我们专注于让用户能够在TableAPI/SQL(FLIP-58[29])中注册和使用自定义函数(UDF,另一个UDTF/UDAF正在计划中)。如果您对该功能的底层实现感兴趣(ApacheBeam-basedportableframework[30]),请参阅FLIP-58和FLIP-78[31]的Architecture章节。这些数据结构为以后支持Pandas以及将PyFlink引入DataStreamAPI奠定了基础。从Flink1.10开始,用户可以通过pip轻松安装PyFlink,执行如下命令:pipinstallapache-flink更多PyFlink规划优化请参考FLINK-14500[32],欢迎加入用户需求讨论[33]。重要变化FLINK-10725[34]:Flink现在可以用Java11编译运行。FLINK-15495[35]:SQL客户端现在默认使用Blinkplanner,为用户提供最新的特性和优化。TableAPI也计划在下个版本中从旧的planner切换到Blinkplanner,建议用户现在就尝试熟悉Blinkplanner。FLINK-13025[36]:新的Elasticsearch接收器连接器[37]完全支持Elasticsearch7.x版本。FLINK-15115[38]:Kafka0.8和0.9连接器已标记为已弃用,不再积极支持。如果您仍在使用这些版本或有其他相关问题,请通过@dev邮件列表联系我们。FLINK-14516[39]:已删除非基于信用的网络流量控制,以及配置项“taskmanager.network.credit.model”。展望未来,Flink将始终使用基于信用的网络流量控制。FLINK-12122[40]:在Flink1.5.0中,FLIP-6[41]改变了槽在TaskManager之间的分配方式。要使用之前的调度策略,即尽可能将负载分配给所有当前可用的TaskManager,用户可以在flink-conf.yaml中设置“cluster.evenly-spread-out-slots:true”。FLINK-11956[42]:s3-hadoop和s3-presto文件系统不再使用类重定位加载方式,而是使用插件方式加载,无缝集成所有认证提供者。强烈建议其他文件系统只使用plugin加载方式,以后会逐步去掉relocation加载方式。Flink1.9引入了新的WebUI,同时保留了原有的WebUI以备不时之需。截至目前,我们还没有收到有关新UI问题的反馈,因此社区投票[43]删除了Flink1.10中的旧WebUI。发行说明计划升级到Flink1.10的用户,请参阅发行说明[44]以获取详细的更改列表和新功能。对于@Public标记的API,该版本兼容之前的1.x版本API。阅读更多:https://yq.aliyun.com/article..._content=g_1000104492上云看云栖账号:更多云资讯、云案例、最佳实践、产品介绍,访问:https://yqh.aliyun.com/