- 博客(308)
- 资源 (18)
- 收藏
- 关注
原创 NoUniqueKey问题和Regular join介绍
核心类if (!} else {} else {将数据存储于本侧的状态中根据join key去另一侧的状态中获取数据并且match在flinksql对changelog的处理中将数据分为了Accumulate(insert/update_after)和Retract(delete/update_before)两类。if input side is outer //本侧是outer join。
2025-05-06 19:08:03
900
原创 flink Unsupported operand types: IF(boolean, NULL, String)
结果遇到了 Unsupported operand types: IF(boolean, NULL, String),根据报错反馈,很明显应该是没有对 null 自动转换(Spark 是会自动转的)if 的源码我以前看过,就是calcyte自动生成的,在org.apache.flink.table.planner.codegen.calls 的 IfCallGen 类。问题:业务方存储了NULL 字符串,需要处理为 null。
2024-04-22 20:16:31
630
1
原创 Checkpoint 源码探查
一个Job的JobManager,每个job在同一时刻有且仅有一个JobMaster。在HighAvailability配置下,由JobMasterServiceLeadershipRunner参与选举,成为Leader后,启动相应job的JobMaster,并启动job。
2024-03-23 16:10:02
686
原创 Flink TopN源码
按顺序遍历treeMap,当遍历过程中发现遍历的key与当前数据的key相同时,和当前数据key相同的所有数据数据(dataState中的LIST),全部撤回并且更新他们的rowNumber+1。那接着去org.apache.flink.table.planner.plan.nodes.exec.stream包下找,里面有StreamExecRank,核心代码就在这了。整个处理流程差不多就结束了,可以看到rowNumber当N较大且排序变化频繁的时候,性能消耗还是非常大的,极端情况下游的数据会翻很多倍。
2024-03-17 17:47:26
739
原创 Flink window 源码
当数据来的时候,调用Trigger判断是否需要触发计算,如果调用结果只是Fire,则计算窗口并保留窗口原样,窗口中的数据不清理,数据保持不变,等待下次触发计算的时候再次执行计算。增量计算指的是窗口保留一份中间数据,每流入一个新的元素,新的元素都会与中间数据两两合一,生成新的中间数据,再保留到窗口中,如:ReduceFunction、AggregateFunction、FoldFunction(过期)。在窗口函数计算完成后,如果窗口已经结束,则调用窗口函数的close方法,表示窗口已经结束。
2024-03-17 16:51:37
63
原创 Flink SQL 执行框架源码
2. 然后使用优化器基于规则进行等价变换,例如我们比较熟悉的谓词下推、列裁剪等,经过优化器优化后得到最优的查询计划(RelNode–>RelNode),先基于calcite rules 去优化logical Plan, 再基于Flink定制的一些优化rules去优化logical Plan。经过优化器处理后,得到的逻辑树中的所有节点都是FlinkPhysicalRel ,以待生成物理执行计划了,也就是第三步 translateToExecNodeGraph()
2024-03-16 16:46:50
70
原创 Flink 源码编译
切换到alibaba的setting.xml(外网地址网速不好可能失败),顺便清理下idea的缓存(Invalidate and Restart,”File" -> "Invalidate Caches / Restart"),再试试,就OK了。可能你用的是公司的maven仓库,导致一些依赖下载失败,看看右边maven的依赖图也可以看出来,依赖缺失会有红线(下图我这个是正常的)方式2:从 git 上下载,然后手动导入项目,flink 官网介绍也是这种。方式1:直接 get from vcs。
2024-02-07 21:18:53
1438
原创 FlinkSql通用调优策略
使用DataGenerator 提前进行压测,了解数据的处理瓶颈、性能测试和消费能力开启minibatch:"table.exec.mini-batch.enabled", "true"开启Local+Global 两阶段聚合:"table.exec.mini-batch.enabled", "true"解决数据倾斜问题:流式倾斜,开启minibatch窗口类有界操作,传统的两阶段聚合的方式数据源分布就不均匀,做reblance针对大状态开启rocksdb。
2024-02-07 21:15:17
2517
3
原创 Flink 状态和容错
状态是什么:其实状态并不是flink独有的特性,状态在生活中普遍存在和使用,只是近些年在实时任务这些词汇会被频繁提及离线其实也有,比如Remote Shuffle Service,对于整个任务来说,每个 Stage 的结果就是状态,而Remote Shuffle Service 就起到了的作用场景示例:一个消费上游 Kafka,使用 Set去重计算 DAU 的实时任务。kafka。
2024-02-07 20:28:47
2565
原创 Flink流式数据倾斜
KeyBy 前数据已经不均匀了,可能是Topic 每个分区的数据不一致(较为少见),或者上游task处理以后导致的数据不均匀,导致下游operate chains的某个task压力很大。流式处理的数据倾斜和 Spark 的离线或者微批处理都是某一个 SubTask 数据过多这种数据不均匀导致的,但是因为流式处理的特性其中又有些许不同。窗口操作类似Spark的微批处理,直接两阶段聚合的方式来解决就可以。开启minibatch 和 global,牺牲时效性,减少输出数据量。2.3 keyby类。
2024-02-07 20:21:34
1657
原创 flink反压及解决思路和实操
我这个是并行度是 4 ,所以会有 0、1、2、3 代表是哪个 subTask(task 下每个并行task),其中看到的比较多的是这两个,outPutUsage 代表发送端 Buffer 的使用率,inPutusage 代表的接收端 Buffer 的使用率。也可能是 TaskManager 的内存引起的 GC 问题,也会导致反压,我们一般使用 G1 回收机制,有可能是 TaskManager JVM 各区内存分配不合理导致频繁的 Full GC。,比如大促时流量激增,或者使用了数据炸开的函数。
2024-02-07 20:16:47
4277
原创 详述FlinkSql Join操作
Full Join:流任务中,左流或者右流的数据到达之后,如果没有 Join 到另外一条流的数据,就会等待(左流放在左流对应的 State 中等,右流放在右流对应的 State 中等),如果之后另一条流数据到达之后,发现能和刚刚那条数据 Join 到,则会输出。Full Join:和Left原理一样,左流或者右流的数据到达之后,无论有没有 Join 到另外一条流的数据,都会输出,如果一条流的数据到达之后,发现之前另一条流之前输出过没有 Join 到的数据,则会发起回撤流。
2024-02-07 16:13:10
4031
原创 FlinkSql 窗口函数
以前用的是Grouped Window Functions(分组窗口函数),但是分组窗口函数只支持窗口聚合现在FlinkSql统一都是用的是Windowing TVFs(窗口表值函数),Windowing TVFs更符合 SQL 标准且更加强大,支持window join、Window aggregations、Window Top-N、Window Deduplication
2024-02-07 16:06:10
3245
原创 flink写入paimon流程代码
RowDataStoreWriteOperator继承TableWriteOperator,这个类又通过provider初始化了write,RowDataStoreWriteOperator类刚才用到了父类TableWriteOperator的write对象。以StoreSinkWrite.Provider是StoreSinkWriteImpl为例,那上面的write()实际调用就是这个类的write()最终走到了MergeTreeWriter的write(),判断内存是否满了,满了就溢出磁盘。
2024-01-30 14:19:44
1086
原创 数据质量和治理论
数据质量和数据治理,这个概念很大不是一两个人可以处理的问题,但是又不得不做,往往需要整个团队或者跨团队协作尽量去处理好这个事情以下是一些方法论。
2024-01-29 14:23:23
1031
原创 spark window源码探索
1. WindowExec 物理执行逻辑入口,主要doExecute()和父类WindowExecBase2. WindowFunctionFrame 窗框执行抽象,其子类对应sql语句的不同窗框其中又抽象出BoundOrdering类, 用于判断一行是否在界限内(Bound), 分为RowBoundOrdering和RangeBoundOrdering我们的UDAF在何时已什么顺序接受数据, 何时会被执行eval, 都取决于窗框内方法调用逻辑!
2024-01-29 13:57:15
1070
原创 flink if函数false时对字符串做阶段的bug
我们之前在使用flink1.12时候也没有发现问题,但是最近一个1.15的任务出现了一个bug。最终在flink issues找到了这个bug,在这个issues里对代码做了修复。我们找了一下这个函数,发现代码确实是这样理解的,但是和官网描述明显不一致。flink官网对if函数就是我们正常的理解。本来应该返回cdefg,但是返回了cde。合并这个issues,问题解决。
2024-01-21 17:33:11
738
原创 spark dateformat源码排错
有一个任务 yyyy写成了YYYY,导致年份不对触发告警第一时间用spark dateformat搜索下看看官网,发现spark 官网也没有描述YYYY的信息。
2024-01-18 19:47:02
573
原创 Vue学习记录
plugin插件:用于增强Vue,包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据,比如vuex就是插件,了解即可,后面很多插件都是封装好的。脚手架结构, render函数,vue.config.js,package.json,vue.js和vue.runtime.xxx.js的区别,有兴趣在了解下就可以。v-if,v-else,v-else-if ,就是if else,他指定了条件为true才渲染,否则不渲染,渲染多个元素,可以用的组合方式。
2023-05-10 16:35:42
720
原创 jar包获取resource下配置文件路径
我们在代码里可以这样写但是打成jar包后就不行了,我们有很多方法获取jar包路径或者resource下文件路径但是打印后你会发现路径里面带 !,此时就算你去掉!也不行就算把路径copy到linux,用cat命令也显示文件不合法,猜测打包之后的jar就是无法获取的但是我们可以读取文件,然后写入固定路径,再使用......
2022-07-12 17:08:59
5285
vcruntime140_1找不到解决方案的文件.rar
2020-07-08
kafka监控工具KafkaOffsetMonitor.rar
2020-06-13
8篇个性化搜索(personalization search)的论文
2019-04-26
反编译软件
2019-04-26
sm整合phoenix和连接池(xml和注解两种方式)
2018-10-15
springboot+mybaties+phoenix+HikariCP
2018-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人