正面超越Spark | 几大特性垫定Flink1.12流计算领域真正大规模生产可用(下)

本文主要是介绍正面超越Spark | 几大特性垫定Flink1.12流计算领域真正大规模生产可用(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方蓝色字体,选择“设为星标

回复”资源“获取更多资源

我们书接上文,我们在之前的文章《正面超越Spark | 几大特性垫定Flink1.12流计算领域真正大规模生产可用(上)》详细描述了Flink的生产级别Flink on K8s高可用方案和DataStream API 对批执行模式的支持。

接下来是另外的几个特性增强。

第三个,Flink对SQL操作的全面支持

再很早之前,我在浏览社区的wiki中,关于是否需要添加SQL支持的讨论之前就在Flink社区中发生过几次。Flink自从0.9版本发布之后,Table API、关系表达式的代码生成工具以及运行时的操作符等都预示着添加SQL支持的很多基础已经具备,可以考虑进行添加了。

然后Flink SQL从Blink分支正式合并到了主分支,直到Flink1.12版本持续在进行优化,包括:

  • 支持Upsert Kafka Connector

  • 支持SQL 中 支持 Temporal Table Join

  • Join优化

  • 支持UDF等

这些特性使得Flink SQL拥有了不弱于Spark SQL的能力,并且随着生态的进一步完善,类似Flink-CDC这种业务中的常见痛点功能一直在不符按完善。

小编在很早前就已经写过Flink SQL的入门文章,目前该文章在百度搜索中权重排名第一,浏览次数高达4万+。

详细阅读你可以参考这里:https://blog.csdn.net/u013411339/article/details/93267838

第四个,Flink对Hive的全面支持

为什么说与Hive的集成标志着Flink的在生态支持上可以和Spark正面PK了呢?

在传统的基于Hadoop体系的数据仓库建设中,有没有哪个业务不用Hive的呢?几乎没有。

Hive作为Hadoop体系中应用最广泛的数据分析工具在整个生态位置上占有核心位置,是数据仓库生态系统中的绝对核心。一个对Hive不友好的框架是没有资格去争取某一个领域的王者地位的。

目前截止 Flink 1.12,Flink 与 Hive 的集成包含两个层面。

  • 一是利用了 Hive 的 MetaStore 作为持久化的 Catalog,用户可通过HiveCatalog将不同会话中的 Flink 元数据存储到 Hive Metastore 中。例如,用户可以使用HiveCatalog将其 Kafka 表或 Elasticsearch 表存储在 Hive Metastore 中,并后续在 SQL 查询中重新使用它们。

  • 二是利用 Flink 来读写 Hive 的表。

HiveCatalog的设计提供了与 Hive 良好的兼容性,用户可以”开箱即用”的访问其已有的 Hive 数仓。您不需要修改现有的 Hive Metastore,也不需要更改表的数据位置或分区。

关于如何使用Hive+Flink打造批流一体数仓仓库,你可以参考这里:《Flink1.12集成Hive打造自己的批流一体数仓》 。

这其中,最值得注意的两个特性是:

Hive Streaming的支持

Flink SQL的FileSystem Connector为了与Flink-Hive集成的大环境适配,做了很多改进,Flink以Streaming的方式写入Hive也标志着批流一体时代的真正来临。我这里贴一个简单的案例:

public class StreamingWriteHive {private static final String KAFKA_SQL = "CREATE TABLE kafkaTable (\n" +" code STRING," +" total_emp INT ," +" ts bigint ," +" r_t AS TO_TIMESTAMP(FROM_UNIXTIME(ts,'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss'),\n" +" WATERMARK FOR r_t AS r_t - INTERVAL '5' SECOND "+") WITH (" +" 'connector' = 'kafka'," +" 'topic' = 'flink_dwd_test4'," +" 'properties.bootstrap.servers' = 'node1:9092'," +" 'properties.group.id' = 'test1'," +" 'format' = 'json'," +" 'scan.startup.mode' = 'latest-offset'" +")";public static void main(String[] args) throws Exception{StreamExecutionEnvironment bsEnv = StreamExecutionEnvironment.getExecutionEnvironment();EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build();StreamTableEnvironment tEnv = StreamTableEnvironment.create(bsEnv, bsSettings);bsEnv.enableCheckpointing(5000);bsEnv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);String name = "myhive";String defaultDatabase = "flink";String hiveConfDir = ""; // a local pathString version = "1.1.0";HiveCatalog hive = new HiveCatalog(name, defaultDatabase, hiveConfDir, version);tEnv.registerCatalog("myhive", hive);tEnv.useCatalog("myhive");tEnv.getConfig().setSqlDialect(SqlDialect.DEFAULT);tEnv.executeSql("drop table kafkaTable22");tEnv.executeSql(KAFKA_SQL);tEnv.getConfig().setSqlDialect(SqlDialect.HIVE);String hiveSql = "CREATE  TABLE  fs_table (\n" +"  f_random_str STRING,\n" +"  f_sequence INT" +") partitioned by (dt string,hr string) " +"stored as PARQUET " +"TBLPROPERTIES (\n" +"  'partition.time-extractor.timestamp-pattern'='$dt $hr:00:00',\n" +"  'sink.partition-commit.delay'='5 s',\n" +"  'sink.partition-commit.trigger'='partition-time',\n" +
//                                 "  'sink.partition-commit.delay'='1 m',\n" +"  'sink.partition-commit.policy.kind'='metastore,success-file'" +")";tEnv.executeSql(hiveSql);String insertSql = "insert into fs_table1111 SELECT code, total_emp, " +" DATE_FORMAT(r_t, 'yyyy-MM-dd'), DATE_FORMAT(r_t, 'HH') FROM kafkaTable22";tEnv.executeSql(insertSql).print();}

对Hive的支持上,有两个特性十分醒目:

  • 分区提交 支持不同的触发和策略。详细的介绍读者可以参考:https://blog.csdn.net/u013411339/article/details/113051393

  • 小文件合并

很多 bulk format,例如 Parquet,只有当写入的文件比较大时,才比较高效。当 checkpoint 的间隔比较小时,这会成为一个很大的问题,因为会创建大量的小文件。在 Flink 1.12 中,File Sink 增加了小文件合并功能,从而使得即使作业 checkpoint 间隔比较小时,也不会产生大量的文件。要开启小文件合并,可以在 FileSystem connector 中设置 auto-compaction = true 属性。

另外,Flink除了主赛道上的功能完善外,持续向外推展新的能力以解决业务上的痛点问题。值得我们期待。

正面超越 Spark | 几大特性垫定Flink1.12流计算领域真正大规模生产可用(上)

欢迎点赞+收藏+转发朋友圈素质三连

文章不错?点个【在看】吧

这篇关于正面超越Spark | 几大特性垫定Flink1.12流计算领域真正大规模生产可用(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1142911

相关文章

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc