自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (1)
  • 收藏
  • 关注

原创 Flink 2.0 状态管理存算分离架构演进与分离改造实践

最后是本次分享的一些总结。第一是状态访问在流计算中起到了非常关键的作用。在单条 record 的访问路径上,状态访问的处理速度会严重影响到 TPS ,这也是之前很多尝试 Flink 远端状态存储访问会非常慢的原因。第二,云原生时代对状态存储提出了更高的要求,比如受限的本地盘、快速扩缩容以及平滑的资源使用等等。基于这个,我们做了大量的优化工作,但是还不太足够,因此我们提出 State 的存储访问架构需要进一步的演化。

2024-02-21 09:37:06 1444

原创 Flink 深入理解任务执行计划,即Graph生成过程(源码解读)

可以看到上述所有算子都被按执行顺序添加进了transformations 这个 List 中,接下来就是根据算子是否有座shuffle操作来把算子分成两类,分别是StreamNode的非shuffle算子, 以及上下游做shuffle的streamEdge操作,并且将streamEdge操作 与 StreamNode 绑定,来形成一个有前后顺序的DAG图。Flink 会根据节点的并行度以及他们之间的连边方式,把一些计算节点进行链接合并,最终形成 JobGraph,从而降低计算节点间的数据传输开销。

2024-02-21 09:36:13 1614

原创 Flink checkpoint操作流程详解与报错调试方法汇总,增量checkpoint原理及版本更新变化,作业恢复和扩缩容原理与优化

第一步,Checkpoint Coordinator 向所有 source 节点 trigger Checkpoint;。第二步,source 节点向下游广播 barrier,这个 barrier 就是实现 Chandy-Lamport 分布式快照算法的核心,下游的 task 只有收到所有 input 的 barrier 才会执行相应的 Checkpoint。

2024-02-20 11:23:54 1864

原创 深入理解flinksql执行流程,calcite与catalog相关概念,扩展解析器实现语法的扩展

flink在执行sql语句时,是无法像java/scala代码一样直接去使用的,需要解析成电脑可以执行的语言,对sql语句进行解析转化。这里说的我感觉其实不是特别准确,应该是 flink使用的是一款开源SQL解析工具Apache Calcite ,Calcite使用Java CC对sql语句进行了解析。那么我们先来简单说下Calcite工具,梳理一下Calcite的基本概念:上述图片中具体的概念解释为:Sql 的执行过程一般可以分为下图中的四个阶段,Calcite 同样也是这样解析 校验 优化

2024-02-20 11:23:04 1424

原创 flink 任务提交流程源码解析

flink cliFronted类, 解析参数,封装commandLine, 执行用户代码生成streamGraph 并将streamGraph转化成JobGraphyarnjobClusterExcutor 初始化一个yarnclient对象,构造yarnClusterDescriptoryarnClusterDescriptor 将 依赖,jar,及其集群配置上传到Yarn Resource manager上yarn检查集群配置。

2024-02-20 11:21:53 1281

原创 flink如何利用checkpoint保证数据状态一致性

如果在这期间出现任何的数据问题,flink都会回滚数据,之前预提交的数据不会被正式写入到kafka中,但如果没有问题,也只需要提交一个事务,sink kafka的下游就可以正常消费,sink算子不能存数据,这样的话,数据即发到了下游,有没有被消费到,出问题又可以回滚,但如果是redis,下游数据已经写入到存储中, 就上flink回滚,写入的数据也无法撤回,这就是两阶段提交的重要性。然而,如上所述,计算状态的更新 / 更改,即处理在事件上执行任意用户定义逻辑的事件,如果发生故障,则可能不止一次地发生。

2024-02-20 11:20:52 1531

原创 flink内存管理,设置思路,oom问题,一文全

这里以flink1.12 的 flink webUI 来展示内存管理,后续版本的内存可能会有变更不一致的地方,详细的解释主要放在taskManager中。

2024-02-20 11:18:51 2706

原创 flink watermark 生成机制与总结

watermark 介绍watermark生成方式watermark 的生成值算法策略watermark策略设置代码watermark源码分析watermark源码调用流程debug(重要)测试思路迟到时间处理FlinkSql 中的watermark引出问题与源码分析。

2024-02-20 11:17:33 1491

原创 calcite在flink中的二次开发,介绍解析器与优化器

查询优化器是传统数据库的核心模块,也是大数据计算引擎的核心模块,开源大数据引擎如 Impala、Presto、Drill、HAWQ、 Spark、Hive 等都有自己的查询优化器。Calcite 就是从 Hive 的优化器演化而来的。优化器的作用:将解析器生成的关系代数表达式转换成执行计划,供执行引擎执行,在这个过程中,会应用一些规则优化,以帮助生成更高效的执行计划。

2024-02-20 11:16:58 1479

原创 flink二开,实现了batch lookup join(附源码)

本文转载自:大数据羊说的一篇公众号文章,这里只做学习用,没有任何盈利行为。

2024-02-20 11:15:27 1058

原创 flinksql 流表转换, 自定义udf/udtf,SQL 内置函数及自定义函数

1、在大多数情况下,用户定义的函数必须先注册,然后才能在查询中使用。不需要专门为 Scala 的 Table API 注册函数。2、函数通过调用 registerFunction()方法在 TableEnvironment 中注册。当用户定义的函数 被注册时,它被插入到 TableEnvironment 的函数目录中,这样 Table API 或 SQL 解析器就可 以识别并正确地解释它函数总结,函数总分为四大类。

2024-02-20 11:14:21 1452

原创 Flink/flinksql 语法 窗口与join 一文全 相关概念api汇总总结,底层process算子总结,与数据延迟处理,超时场景解决方案

常规 join,flink 底层是会对两个参与 join 的输入流中的数据进行状态存储的;所以,随着时间的推进,状态中的数据量会持续膨胀,可能会导致过于庞大,从而降低系统的整体效 率;可以如何去缓解:自己根据自己业务系统数据特性(估算能产生关联的左表数据和右表数据到达的最 大时间差),根据这个最大时间差,去设置 ttl 时长;

2024-02-20 11:13:30 1380

原创 flink state原理,TTL,状态后端,数据倾斜一文全

UnionListState 的快照存储数据,在系统重启后,list 数据的重分配模式为: 广播模式;在每个 subtask 上都拥有一份完整的数据;ListState 的快照存储数据,系统重启后,list 数据的重分配模式为: round-robin 轮询平均分配。

2024-02-20 11:12:25 1503

原创 flink多流操作(connect cogroup union broadcast)

2 connect连接操作2.1 connect 连接(DataStream,DataStream→ConnectedStreams)connect 翻译成中文意为连接,可以将两个数据类型一样也可以类型不一样 DataStream 连接成一个新 的 ConnectedStreams。需要注意的是,connect 方法与 union 方法不同,虽然调用 connect 方法将两个 流连接成一个新的 ConnectedStreams,但是里面的两个流依然是相互独立的,这个方法最大的好处是 可以让两个流共享

2024-02-20 11:10:45 1607

原创 flink/flinksql 手把手sql语法扩展实践

本文是实操,具体原理和知识,可以看前置的两个帖子 :深入理解flinksql执行流程,calcite与catalog相关概念,扩展解析器实现语法的扩展calcite在flink中的二次开发,介绍解析器与优化器我们本文做一个语法扩展的实践开发。在flink中添加一个showfunctions的方法。函数的核心是unparse。总的目录结构为flink-table-flink-sql-parser–codegen–java-target这里开发一个dql函数 ,flinklsql语法 需要继承

2024-02-20 11:06:57 1092

原创 hologres 建表/索引/查询优化

Bitmap不同于Distribution Key和Clustering Key,Bitmap是数据存储之外的独立索引,设置了Bitmap索引之后,系统会将列对应的数值生成一个二进制字符串,用于表示取值所在位置的Bitmap,当查询命中Bitmap时,会快速定位到数据所在的行号(Row Number),从而快速过滤出数据。大宽表的每一列都设置为Bitmap场景:如果为大宽表的每一列都设置为Bitmap,那么在写入时每个值都需要构建成Bitmap,会有一定的系统开销,从而影响写入性能。

2023-11-17 11:20:42 1678

原创 hologres基础知识一文全

1 功能特性2 hologres 架构3 执行引擎技术原理4 Hologres高可用架构设计5 Hologres存储引擎6 Hologres技术揭秘: JSON半结构化数据的极致分析性能7 hologres实时数仓,Hologres Binlog技术原理揭秘

2023-11-06 19:51:10 1810

原创 flinksql bug:doesn‘t support consuming update and delete changes which is produced by

处理办法:不输出rn就好了,很奇怪 有个相同的场景,输出rn 也不报错,但是那个中间做了一些处理逻辑,分析是 处理逻辑 导致下游的回撤场景发生了不同。从我个人的代码中 我分析出,回撤流场景,有rownumber()场景,并使用inner join ,下游输出了rn,导致报错。这句话有两个变量 一个是 StreamPhysicalOverAggregate 另一个是 node Join。表示 前一个算子 因为 后一个算子 而不支持更新和删除操作,简单点说就是 这个代码不支持回撤流场景,

2024-07-05 15:57:16 62

原创 flinksql BUG : flink hologres-cdc source FINISHED

这个flink的核心报错在:Caused by: org.apache.flink.util.FlinkRuntimeException: There is a FINISHED state of task, and the job is still running, please take a look!分析后发现是hologres-cdc的原表,设置的shard数量过小,我flink任务并发过大的情况下,shard数量不够,就会让任务中部分 task finished,而发生这种情况。

2024-06-15 14:28:44 230

原创 flink源码系列:RPC通信

2)FencedRpcEndpoint继承RpcEndpoint,内部增加了fencingToken字段,实现了FencedRpcEndpoint的节点都会有一个fencingToken,当远程RPC调用时,会比较访问者和被访问者的fencingToken是否一致,一致了才会进行后续操作。Flink 内部所有的RpcEndpoint 实现(TaskExecutor,ResourceManager、JobMaster)等第一次启动都会触发onstart方法的执行,这是pekko的内部机制。

2024-06-07 16:08:33 1255

原创 flinksql 回撤流中主键发生变更的影响(group by中的值发生改变)

这篇文章主要谈论一个场景,简单来说:首先我们来简单的说一下什么是回撤流,以及回撤流的底层原理,举个例子:这个说的不是很清晰 ,其实倒数第二个图当作输出 比较好看出来,再bank 这一条来之后,数据结果是hello 1world 1bank 1这个时候 又来了一条hello,刚刚已经下发的hello 1 这个结果就不对了,就需要降这条结果撤回,也就是撤回一条 hello 1 下发一条 hello 2。简单的说 这就是回撤流。

2024-06-02 01:54:41 298

原创 flink分区与算子链

RescalePartitioner这里有点难以理解,假设上游并行度为 2,编号为 A 和 B。下游并行度为 4,编号为 1,2,3,4。那么 A 则把数据循环发送给 1 和 2,B 则把数据循环发送给 3 和 4。假设上游并行度为 4,编号为 A,B,C,D。下游并 行度 ,编号为 1,2。那么 A 和 B 则把数据发送给 1,C 和 D 则把数据发送给 2。

2024-02-21 09:41:56 922

原创 Flink Sql 自定义实现 kudu connector

众所周知啊,flinksql 中与其他的存储做数据的传输连接的时候,是需要有独特的连接器的,mysql redis es hbase kudu ,不同的存储他们自己使用的协议与操作都不一样,所以需要相应的连接器来连接,这个帖子主要讲一下怎么实现自定义的flink sql connector ,不只局限于kudu ,其他的连接器都是这个原理。

2024-02-21 09:40:41 1635

原创 Flink Task退出流程与Failover机制

JobMaster收到TaskManager通过rpc发送的task执行状态变更信息,将通知当前Flink作业的调度器(SchedulerNG)处理,因为都是通过同个线程调用,后续对ExecutionGraph(运行时执行计划)、failover计数等有状态实例的read/write操作都不会出现线程安全问题。最后通过Task->TaskManager->JobMaster的传递链路将Task的终止状态通知给Leader JobMaster线程。Task 级别的故障重启,是系统自动进行的;

2024-02-21 09:39:42 1492

原创 flink sql 实战实例 及延伸问题:聚合/数据倾斜/DAU/Hive流批一体 等

核心问题在于成本过高。甚至可以使用 10 分钟级别的分区策略,使用 Flink 的 Hive streaming source 和 Hive streaming sink ,可以大大提高 Hive 数仓的实时性到准实时分钟级,在实时化的同时,也支持针对 Table 全量的 Ad-hoc 查询,提高灵活性。默认的算法是取当前算子并行度的 1.5 倍和 2 的 7 次方比较,取两者之间的最大值,然后用上面的结果和 2 的 15 次方比较,取其中的最小值为默认的最大并行度,非常不建议自动生成,建议用户自己设置。

2024-02-21 09:38:53 1339 1

原创 一种基于动态水位值的Flink调度优化算法(flink1.5以前),等同于实现flink的Credit-based反压原理

首先说下flink反压,其实就是flink流式处理中一种动态反馈机制,一般是在实时数据处理的过程中,上游节点的生产速度大于下游节点的消费速度,提出反馈来提醒上游,下游消费不过来了。如垃圾回收不及时或者停顿可能使得流入系统的数据快速堆积、大促或秒杀活动时出现的流量陡增等都会造成反压。如不对反压及时处理,将会使系统资源耗尽甚至导致系统崩溃。

2024-02-21 09:38:21 1387

原创 flink cdc原理与使用

CDC 是(Change Data Capture 变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入 INSERT、更新 UPDATE、删除 DELETE 等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅 及消费。像是常用来同步mysql binlog的canal 就是一个cdc工具。CDC 全称是 Change Data Capture ,它是一个比较广义的概念,只要能捕获变更的数据,我们都可以 称为 CDC。

2024-02-21 09:37:38 1603

原创 flink类加载器原理与隔离(flink jar包冲突)

Classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索Class。因为Java是编译型语言,源码文件是.java,而编译后的.class文件才是真正可以被JVM执行的字节码。因此,JVM需要知道,如果要加载一个com.dtstack.HelloWorld的类,应该去哪搜索对应的HelloWorld.class文件。所以,Classpath就是一组目录的集合,它设置的搜索路径与操作系统相关,例如:在Windows系统上,用;

2024-02-20 11:11:34 1824

原创 Hologres + Flink 流式湖仓建设

Hologres 主要分做行存引擎以及列存引擎,同时也支持行列共存场景。在聚合场景中主要是用到列存的引擎,适合 OLAP 场景,复杂查询,统计以及关联等场景。同时也提供了非常丰富的索引,包括有:聚簇索引,位图索引,字典,以及基于时间序列的范围索引。在 KV 场景中主要是用到行存的引擎,主要支持高并发组件查询。包括在 Flink 中做维表反查也是非常适合。在订阅场景中主要是用到行存的引擎,主要在表属性中进行声明,比如说 Binlog 是否开启,Binlog 的 TTL。

2024-02-20 11:08:50 1164

原创 空0001

1。

2024-02-18 18:22:54 124

原创 flinksqlbug : AggregateFunction udf Could not extract a data type from

java中的数据类型分两种 一个是基本类 一个是封装类。例如 数据类型int是Java中的基本数据类型,而Integer是int的封装类。这是因为 ArrayList是封装类型,在udf中 访问其中的私有方法访问不到,所以应该用 List ,在创建的时候。这里我用了封装类,导致无法解析数据类型,改用了 java.lang.long 直接声明引用就可以了。返回List接口 就可以了。

2024-02-04 10:21:07 631

原创 空0002

2。

2024-01-15 11:23:49 393

原创 空0021

21。

2024-01-12 15:26:33 219 1

原创 flinksql bug:In ‘hash‘ distribution mode with equality fields set, partition field ‘1000: ymd_bucket

flinksql+iceberg

2023-12-15 17:21:04 419

原创 FlinkSql bug :OVER windows‘ ordering in stream mode must be defined on a time attribute.

bug

2023-12-15 16:21:48 787

原创 FlinkSql bug : Column types of query result and sink for registered table ‘default_catalog.******

2023-12-07 16:08:58 849

原创 Flinksql bug :Illegal mixing of types in CASE or COALESCE statement

flinksql中的 COALESCE 函数 或 case 函数。case when 多条判断语句 输出数据类型不一致。

2023-12-06 16:51:45 853

原创 Flinksql bug : Temporal table join requires an equality condition on fields of table

不支持 已经是int的类型 再次cast(int类型字段 as int) 与 cast(string类型字段 as int) 做关联 必须 string类型字段 = cast(int类型字段 as string) 这么做。如果关联条件都是字符串,内容是数字,两测都强制类型转换,cast(feild as bigint) 会报错。很奇怪 做了强制类型转换反而报错了。关联条件必须等值关联 也就是必须是等号,并且 关联条件两边要确定数据类型相同。

2023-12-05 15:51:04 831

原创 iceberg建表与参数

【代码】iceberg建表与参数。

2023-11-17 11:20:17 246

原创 IcebergBug:The equality field day should be NOT NULL & # Caused by: org.apache.flink.table.api.Vali

Could not create a PRIMARY KEY ‘’. Column ‘’ is nullable.

2023-11-07 14:50:10 230

flink-dist_2.11-1.11.3.jar

flink环境集合包,1.11版本

2022-03-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除