Flink维表方案选型

Iceberg

Iceberg 采用全量预加载数据的方式将维度表数据全部加载到内存中进行关联,虽然可以避免频繁访问外部数据库,但对计算节点的内存消耗很高,不能适用于数量很大的维度表。除此之外,当 Iceberg 维表数据更新后,可能会存在一定的延迟,导致 Lookup Join 获取的数据不是最新的。这是因为 Iceberg 的数据更新操作(如插入、删除、修改)涉及到数据的重写和元数据的更新等复杂过程。最后,Iceberg 不适用于数据频繁写入的场景,频繁的写入 Iceberg 会产生大量的小文件。这会增加 Lookup Join 时文件系统的开销,因为需要打开和读取更多的文件。可以通过定期进行文件合并操作(Iceberg 支持文件合并策略)来减少小文件的数量,提高文件系统的读取效率,进而提升 Lookup Join 性能。

Paimon

Apache Paimon 是一个湖格式,结合 Flink 及 Spark 构建流批处理的实时湖仓一体架构。Paimon 创新的结合湖格式与 LSM 技术,给数据湖带来了实时流更新以及完整的流处理能力。Paimon 表支持作为维表做 Lookup Join,相较于 Iceberg 表,Paimon 表的优势在于实现了更好的缓存、以及支持更大的数据量。Lookup Join Iceberg 表时会将所有数据缓存在内存中,所以数据量大时容易造成 OOM,但是 Paimon 表支持内存、本地磁盘以及远端存储三级存储策略,所以对维表的数据量没有太大的限制。

Paimon 针对维表点查做 repartition 等优化,平衡了内存使用与性能。在维表数据 100w 行,单并发的场景下可以支持的查询 QPS 达到 50000 QPS。使用 Paimon 作为维表,其支持三种方式产生 CDC 数据,因此能很好的支持双流 join 查询维表。Paimon 作为 Flink 维表的缺点在于数据更新的速度没有 kv 快,但也可以覆盖大部分业务场景。

HBase 与 Redis

HBase 与 Redis 作为 KV 存储在 Flink 维表应用时具有相似性。两者都适用于需要维表写入立即可见的极端情况。同时使用 KV 作为 Flink 维表的成本比湖存储要高。

Doris

Doris 是一个基于 MPP 架构的分布式列式存储数据库,具有高性能、高可用性和高扩展性,适用于大规模数据分析和实时查询场景,特别是对实时性要求较高的场景。但它对实时性要求极高的场景可能不如 HBase,且数据更新和删除操作相对较慢。目前 Flink 对 Doris 的点查时间延迟在几百毫秒,相较于使用 Paimon 作为维表没有优势。

Hologres

针对 Hologres 的点查仅仅在使用主键作为 Join Key 的场景下才能够达到毫秒级延迟。

总结

点查时间延迟 内存资源开销 支持双流 Join 稳定性 建议维表大小 维表实时性 存储状态
MySQL 100毫秒级 开销低 支持 稳定性低 GB级别 读入即可见
Iceberg 毫秒级 开销较大 不支持 文件格式,稳定性高 100MB级别 存在ck延迟
Paimon 10毫秒-100毫秒 开销适中 支持 文件格式,稳定性高 GB级别 存在ck延迟
Doris 100毫秒级 开销低 不支持 服务,稳定性低 GB级别 读入即可见
Hologres 毫秒级(主键查询)/ 100毫秒级(非主键查询) 开销低 支持 服务,稳定性低 GB级别 读入即可见
HBase 毫秒级 开销低 不支持 服务,稳定性低 TB级别 读入即可见
Redis 毫秒级 开销低 不支持 服务,稳定性低 GB级别 读入即可见

相关推荐
Loving_enjoy39 分钟前
ChatGPT 数据分析与处理使用详解
大数据·人工智能
xchenhao1 小时前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
正在走向自律1 小时前
解锁Agent的数据分析潜能,开启智能决策新时代(19/30)
大数据·数据挖掘·数据分析
samLi06203 小时前
中国省级产业结构高级化及合理化数据测算(2000-2023年)
大数据
小盼江4 小时前
智能服装推荐系统 协同过滤余弦函数推荐服装 Springboot Vue Element-UI前后端分离
大数据·数据库·vue.js·spring boot·ui·毕业设计
年薪丰厚5 小时前
ElasticSearch内存占用率过高怎么办?
大数据·elasticsearch·jenkins
运维&陈同学10 小时前
【Logstash03】企业级日志分析系统ELK之Logstash 过滤 Filter 插件
大数据·运维·elk·elasticsearch·微服务·云原生·logstash
潜洋10 小时前
Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别
java·大数据·数据库·spring boot