实时数仓设计

目录

实时数仓

MySQL 的 binlog

Canal

FlinkCDC

内存模型

OLAP 数据库

实时需求

去重处理


实时数仓

MySQL 的 binlog

  1. 什么是 binlog
    MySQL 的二进制日志(binlog)是记录所有 DDL(数据定义语言)和 DML(数据操作语言)语句的日志文件,除了数据查询语句。它以事件形式记录变更,包括语句的执行时间。开启 binlog 通常会有约 1% 的性能损耗。二进制日志有两个主要用途:

    • 数据同步:MySQL Replication 使用 binlog 实现主从数据库的同步,主库(Master)将 binlog 传递给从库(Slave),确保数据一致。
    • 数据恢复:通过 mysqlbinlog 工具,可以利用 binlog 恢复数据。

    binlog 包括两类文件:

    • 二进制日志索引文件(后缀为 .index):记录所有的二进制文件。
    • 二进制日志文件(后缀为 .00000*):记录数据库的所有 DDL 和 DML 事件。

Canal

  1. 什么是 Canal
    Canal 是一个基于 Java 开发的中间件,主要用于解析数据库增量日志(如 MySQL 的 binlog),提供增量数据的订阅和消费。Canal 模拟从库的角色,从主库获取数据变化,主要用于数据库同步和数据分析。

    • Canal 的工作原理:Canal 伪装成 MySQL 的 Slave,向主库请求 binlog,将其解析并通过 Canal Client 提供数据。
    • MySQL 主从复制过程
      1. 主库将变更记录写入 binlog。
      2. 从库向主库发送 dump 协议,复制 binlog 到中继日志(relay log)。
      3. 从库读取中继日志,并将变更同步到自己的数据库。

FlinkCDC

  1. 什么是 CDC
    CDC(Change Data Capture)是捕获数据库变更的技术,记录数据库的插入、更新和删除操作,并将这些变更按顺序写入消息中间件,以供其他服务订阅和消费。CDC 主要有两种方式:

    • 基于查询:定期查询数据变化。
    • 基于 Binlog:实时捕获 binlog 中的数据变化。

    FlinkCDC 是使用 Flink 实现的 CDC,主要用于实时数据的 ETL 处理。它将所有数据写入一个 Topic,并需要对各表进行拆分处理。常用的做法是将维度数据存储在便于通过主键查询的数据库中(如 HBase、Redis、MySQL),而将事实数据写入流中进行处理,最终形成宽表。

内存模型

Flink 的内存使用由以下几部分组成:

  • 框架堆内存:Flink 框架使用的堆内存。
  • 框架堆外内存:Flink 框架使用的堆外内存。
  • Task 堆内存:每个任务的堆内存。
  • Task 堆外内存:每个任务的堆外内存。
  • 网络缓冲内存:用于网络通信的缓冲区。
  • 托管内存:由 Flink 托管的内存部分。

进程内存包括:

  • Flink 使用内存:框架堆内存 + 框架堆外内存 + Task 堆内存 + Task 堆外内存 + 网络缓冲内存 + 托管内存
  • JVM 元空间:JVM 的类和元数据存储空间。
  • JVM 执行开销:JVM 执行时的额外开销。

OLAP 数据库

  1. 选择 OLAP 数据库

    • ClickHouse:专门设计用于处理大量数据的统计分析,支持标准 SQL,灵活且易于使用。
    • StarRocks:提供高性能的分析能力,适合复杂查询和大数据量处理。
  2. 列式储存的好处

    • 聚合操作优化:列式存储对列的聚合、计数、求和等操作更高效。
    • 数据压缩:相同数据类型的列易于压缩,提高了数据的压缩比。
    • 磁盘空间节省:压缩后节省磁盘空间,同时提升了缓存性能。
  3. MergeTree
    MergeTree 是 ClickHouse 中强大的表引擎,支持索引和分区,适合处理海量数据的实时分析需求。

实时需求

  1. 日常统计报表或分析图:需要实时更新当天的数据。
  2. 实时数据大屏监控:展示实时数据的可视化大屏。
  3. 数据预警或提示:实时监测数据异常,并及时发出警报或提示。

去重处理

  1. 精确去重

    • 明细数据需要保存,可以通过数据倾斜的方式,对去重值进行分桶 Hash,将内存压力分散到多个节点上,再对每个桶进行加和。
    • Hash 介绍:参考相关文献,了解 Hash 算法的基本原理和应用。
  2. 模糊去重

    • 布隆过滤器:利用位数组算法,不保存明细数据,而是保存哈希值的标记位。适用于统计精度要求不高的场景,如全网商家的 UV 数据统计。
    • 基数估计:利用哈希原理估算数据集的边界,适用于统计精度要求不高、统计维度较粗的情况,如大盘 UV 数据的粗略统计。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值