当前位置: 首页 > news >正文

实时湖仓架构演变

  1. queue + flink + mysql/redis :
    最初形态,flink做计算,结果插入数据库中,数据库的查询速度很快。缺点是不够灵活,只能查询计算好的聚合数据,想查其他维度或条件的数据,要从头开发一套完整的流程

  2. queue + flink + clickhouse(OLAP) :
    flink 只做 etl 和 join 形成宽表,结果导入支持向量化(?)的 clickhouse,查询在 ck 上做。缺点是 clickhouse 要用 ssd 和 好 cpu,价格昂贵

  3. queue + flink hive sink + hive (ad-hoc)
    用 flink 的 hive sink 代替 clickhouse, flink 还是只做 etl + join 宽表,只是查询从 OLAP 换成了存储便宜的 ad-hoc (即席查询)。由于 flink 的 hie sink 延迟是 checkpoint 级别的,一般几分种,所以这种结构做了离线数仓的近实时

  4. queue + flink CDC + iceberg
    该方案用 iceberg 替换掉 hive 做离线数仓存储。好处是 iceberg 只负责存储,可以对外被实时流读取,也可以做离线查询。比 hive 的可用性强,而且数据更安全了,这意味着你可以做一些小数据的操作:比如 INSERT INTO 一些数据,DELTE \ UPDATE \ MERGE_INTO 有着更好的支持,而不是像 Hive 一样,要安全的动数据只能 INSERT OVERWRITE 整个分区。。缺点是 CDC 入离线数仓产生的文件不好控制,而且由于那个时候 iceberg 还不能支持 upsert (有就update,没有就insert),所以使用 flink CDC(Change Data Capture) 入仓所采用的“前天的一个全量表,合并今天的增量表,产生今天的全量表“的存储方式。使得每天一个全量表存储成本巨大。
    实际业务为什么要用 CDC 同步 mysql呢?在 OLTP 系统中,为了解决单表数据量大的问题,通常采用分库分表的方式将单个大表进行拆分以提高系统的吞吐量。 但是为了方便数据分析,通常需要将分库分表拆分出的表在同步到数据仓库、数据湖时,再合并成一个大表。 目前 iceberg 支持 upsert 的特性, 但 Iceberg 主打离线数据湖和扩展性

  5. flink cdc / kafka cdc + paimon :
    paimon原生支持flink cdc,因为他的前身叫 flink table store. 而却设计成支持 upsert, 使用 lsm 树的格式
    相比于 Flink SQL 入湖,Paimon 的 CDC 入湖不但可以将数据和 Schema 的变更一起同步到 Paimon 的表中。每天的离线视图可以通过 CREATE TAG 创建,Tag 是一个 snapshot 的引用。而且基于LSM数据结构的特点,只要增量数据不大,两个 TAG 之间是可以复用大量文件的,某些场景有上百倍的节省!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命
  • OpenCV
  • Focalboard开源项目管理系统本地Windows部署与远程访问协同办公
  • 住宅ip有什么特殊点
  • 工作安排 - 华为OD统一考试(E卷)
  • wx小程序中,商城订单详情显示还有多少分钟关闭
  • 深度学习500问——Chapter15:异构计算,GPU和框架选型(1)
  • React Native、Uni-app、Flutter优缺点对比
  • Mac 电脑配置yolov8运行环境实现目标追踪、计数、画出轨迹、多线程
  • 借用连接2-得到主库或从库池子连接
  • 跟李沐学AI:自注意力和位置编码
  • 典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
  • 如何实现全行业证照一站式结构化识别?Textln企业资质证照识别上线!
  • kafka 消费者线程安全问题详细探讨
  • 中台架构下的数据仓库与非结构化数据整合
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS 三角实现
  • Docker 笔记(2):Dockerfile
  • ES6之路之模块详解
  • js面向对象
  • laravel 用artisan创建自己的模板
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • scala基础语法(二)
  • Spark RDD学习: aggregate函数
  • 从输入URL到页面加载发生了什么
  • 工作手记之html2canvas使用概述
  • 巧用 TypeScript (一)
  • 人脸识别最新开发经验demo
  • 如何实现 font-size 的响应式
  • nb
  • ‌移动管家手机智能控制汽车系统
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (02)Hive SQL编译成MapReduce任务的过程
  • (20050108)又读《平凡的世界》
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (离散数学)逻辑连接词
  • (四) 虚拟摄像头vivi体验
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)平衡树
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • ./和../以及/和~之间的区别
  • .NET C# 使用 iText 生成PDF
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net wcf memory gates checking failed
  • .netcore 获取appsettings
  • .NET成年了,然后呢?