发布了文章2024-08-22
本文旨在详解 Flink TaskManager 的内存模型以及其各部分内存占比的计算逻辑。首先,结合官网展示了当前 Flink 的内存模型,并在之后结合 JVM 自身内存模型和管理机制结合讲解 Flink 内存模型的各个部分,最后结合源码解释了各部分内存占比的计算逻辑。
发布了文章2024-07-02
org.apache.hadoop.hbase.io.hfile.HFileReaderImpl.HFileScannerImpl#seekTo(org.apache.hadoop.hbase.Cell, boolean) :
发布了文章2023-09-22
在数据不断写入 Hudi 期间,Hudi 会不断生成 commit、deltacommit、clean 等 Instant 记录每一次操作类型、状态及详细的元数据,这些 Instant 最终都会存到 .hoodie 元数据目录下,为了避免元数据文件数量过多,ActiveTimeline 越来越长,需要对比较久远的操作进行归...
发布了文章2023-08-30
在 StreamGraph 翻译为 JobGraph 的过程中 Flink 会为每一个算子生成对应的 OperatorID,并传递到 Jobvertex 中。JobVertex 是 JobGraph 中的节点,每个 JobVertex 包含一个或多个算子 chain 在一起的算子链。如果 JobVertex 只包含一个算子,则 JobVertex 的 id 就...
发布了文章2023-08-04
背景默认情况下 Flink 每个 subtask 同步按序处理到来的数据,但可能有一些处理场景需要访问外部存储介质,比如 Sql 中使用 Lookup Join,每一次查询请求需要等待结果响应之后才能进行下一次请求,期间浪费了的大量时间在等待结果上,异步 I/O 的方式可以并发地处理...
发布了文章2023-05-08
语法[链接] {代码...} 注意点:ORDER BY 后的字段必须是时间属性(process time/row time)Minibatch 开关开启 MiniBatch 时使用 KeyedMapBundleOperator,否则使用 KeyedProcessOperator。状态使用 Event TimeProcess Time开启 minibatchRowTimeMiniBatchDeduplicat...
发布了文章2023-04-24
Flink 则为用户类和框架的类冲突提供了 child-first 的类加载模式,这样能够一定程度上减少由于框架升级导致使用的某部分依赖和用户的依赖版本不兼容的问题(当然不能彻底解决,将这部分类替换成用户的依赖版本也可能导致 Flink 框架在运行过程中出现 NoSuchMethod ...
发布了文章2023-04-05
数据文件:parquet(列存)和 arvo(行存)格式,COW(Copy On Write)表的话每次写的时候做合并,只存在 parquet,MOR(Merge On Read)则会有 base file(parquet)和增量 log file(arvo),本文里我们主要聊的是 MOR:
赞了文章2023-03-01
由字节跳动数据湖团队贡献的 RFC-29 Bucket Index 在近期合入 Hudi 主分支,本文详细介绍 Hudi Bucket Index 产生的背景与实践经验。字节跳动数据湖团队持续招人中,团队支撑字节所有业务线的数仓,打造业界领先的 EB 级数据湖。文末了解详情。
发布了文章2023-01-18
在流式处理数据的过程中,当本侧到来一条新的数据时,我们无法预测对侧是否在之后还会到来能够和该数据关联上的数据,且考虑到时效性,我们也无法一直等待右侧所有数据到齐后再关联下发,因此 Flink 的处理方式是先将当前数据和对侧已经到来过的所有数据(如果设置了...
发布了文章2021-12-14
SqlClient 是 Flink 提供的一个 SQL 命令行交互工具,在下载 flink 二进制包时,在其 bin 目录下有一个 sql-client.sh,通过启动该脚本就可以进入交互页面。SqlClient 的具体源码实现在 flink-table 模块的 flink-sql-client 子模块下可以找到,其启动函数在 org/apa...
发布了文章2021-11-09
Calcite 提供的 Validator 流程极为复杂,但概括下来主要做了这么一件事,对每个 SqlNode 结合元数据校验其语义是否正确,这些语义包括:
发布了文章2021-11-03
JobGraph 可以认为是 StreamGraph 的优化图,它将一些符合特定条件的 operators 合并成一个 operator chain,以减少数据在节点之间序列化/反序列化以及网络通信带来的资源消耗。
发布了文章2021-10-26
Maven 的生命周期本质是项目构建的生命周期,比如在迭代过程中我们需要清理项目环境、编译、测试、打包及部署。由于工作环境等原因,每个人的构建工作方式不同,有的以手工方式逐行命令执行,有的写了自动化脚本执行,这些方式不可重用,经常换个项目就需要从头再来。
发布了文章2021-10-25
A DataStream represents a stream of elements of the same type. A DataStream can be transformed into another DataStream by applying a transformation.
发布了文章2021-10-25
调用 StreamExecutionEnvironment.getStreamGraph() 即可以生成 StreamGraph。StreamExecutionEnvironment.getStreamGraph() 默认会清除 StreamExecutionEnvironment 中保存的 transformations,后续就无法调用 StreamExecutionEnvironment.execute() 了,因此需要重...
发布了文章2021-10-18
最近十几年来,出现了很多专门的数据处理引擎。例如列式存储 (HBase)、流处理引擎 (Flink)、文档搜索引擎 (Elasticsearch) 等等。这些引擎在各自针对的领域都有独特的优势,在现有复杂的业务场景下,我们很难只采用当中的某一个而舍弃其他的数据引擎。当引擎发展到一...
赞了文章2021-08-31
同一个ClassLoader实例加载的类不能重复(不同的class文件,同样的类名也是重复),如果强行用同一个ClassLoader实例加载同一个类,则会报错attempted duplicate class definition for {your class}
发布了文章2021-08-19
笔者近日在做一个基于 Calcite 的自定义 SQL 解析框架,需要了解 Calcite,但由于现在网上Calcite 资料极少,有价值的更是寥寥无几,因此只能自己 debug 源码。Calcite 是一个比较复杂的框架,因此本篇内容集中在当中的一个小但重要的阶段:SQL 优化。限于篇幅,本篇...
赞了文章2021-08-04
维表是数仓中的一个概念,维表中的维度属性是观察数据的角度,在建设离线数仓的时候,通常是将维表与事实表进行关联构建星型模型。在实时数仓中,同样也有维表与事实表的概念,其中事实表通常存储在kafka中,维表通常存储在外部设备中(比如MySQL,HBase)。对于每条流...