点一下关注吧!!!非常感谢!!持续更新!!!

Java篇开始了!

  • MyBatis 更新完毕
  • 目前开始更新 Spring,一起深入浅出!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(已更完)
  • Prometheus(已更完)
  • Grafana(已更完)
  • 离线数仓(已更完)
  • 实时数仓(正在更新…)

章节内容

  • 业务数据库表结构
  • 交易订单、订单产品、产品分类、商家店铺、地域组织表

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_flink

Canal 同步业务数据

环境准备

  • Hadoop
  • HBase
  • Flink
  • ClickHouse
  • MySQL
  • Canal
  • Kafka

Canal 介绍

阿里巴巴 B2B 公司,由于业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅、消费的业务。
Canal是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅、消费的中间件。目前,Canal主要支持了 MySQL 的 Binlog 解析,解析完成后才利用 Canal Client 用来处理获得相关数据。(数据库同步需要案例的 otter 中间件,基于 Canal)。

Canal 的背景与初衷

在大规模互联网应用中,尤其是在像阿里巴巴这样的电商平台中,数据库的规模和复杂度通常非常高。为了提高数据的实时性和可用性,许多业务场景需要实时地同步数据库中的变化(如订单、用户数据等),并确保数据在多个系统之间一致。

Canal 的诞生,正是为了解决这一问题。通过 变更数据捕获(CDC) 技术,Canal 能够高效地监控并捕获数据库中的数据变动(如插入、更新、删除等操作),然后将这些变动实时同步到下游系统,如搜索引擎、数据仓库、缓存等。

Canal 的核心功能

变更数据捕获(CDC)

Canal 的核心功能是实现变更数据捕获,它通过 解析数据库日志(binlog) 的方式来获取数据库中的变化数据。Canal 支持 MySQL、PostgreSQL、Oracle 等数据库,并能够实时地捕获数据库的变化。

  • 增量数据同步: 通过解析 binlog,Canal 能够识别出数据库的增量变化(插入、更新、删除等),并将这些变动同步到下游系统。
  • 高效处理: Canal 对数据变更进行高效的捕获和同步,支持大规模的分布式部署,能够处理高并发、高吞吐量的场景。

数据同步

Canal 不仅可以捕获数据变动,还能将这些数据变动同步到其他系统。常见的应用场景包括:

  • 同步到搜索引擎: 比如将 MySQL 中的数据变更实时同步到 Elasticsearch,以便提高检索的实时性。
  • 同步到数据仓库: 实现 OLAP(联机分析处理)系统中的数据实时同步,比如将数据库变更同步到 Hadoop、ClickHouse 等大数据平台。
  • 缓存同步: 数据库变动后,Canal 可以实时更新缓存(如 Redis),以确保缓存中的数据是最新的。

异构数据库支持

Canal 不仅支持 MySQL、PostgreSQL、Oracle 等传统关系型数据库,还支持通过扩展和插件的方式支持更多数据库的接入,适应不同数据库之间的同步需求。

数据解析与转换

Canal 允许对捕获到的数据进行解析和转换。用户可以基于 Canal 提供的 API,定制化处理从数据库中捕获的数据,比如数据格式的转换、过滤等。

Canal 的工作原理

Canal 的工作原理大致分为以下几个步骤:

  • 连接数据库:Canal 会连接到源数据库,并获取该数据库的 binlog(对于 MySQL 来说是 binary log,其他数据库有类似机制)。binlog 记录了数据库的所有数据变动操作。
  • 解析 binlog:Canal 会持续监听和解析数据库的 binlog 文件。每当有新的数据变动时,Canal 就会读取新的 binlog 并解析出具体的变更内容(插入、更新、删除等)。
  • 数据处理:Canal 会将捕获到的变更数据通过数据解析处理,然后根据配置和需求将数据同步到下游系统(例如消息队列、缓存、搜索引擎、数据仓库等)。
  • 持久化与监控:Canal 还提供了持久化机制,能够保存已经同步的数据状态,同时具备监控功能,能够及时检测到系统异常并进行告警处理。

Canal 的优势

  • 实时性: Canal 可以非常快速地捕获到数据库中的变更,适用于需要实时数据同步的场景。
  • 高吞吐量: 它可以处理大量的数据变更,适用于高并发、高吞吐量的场景。
  • 灵活性: Canal 提供了丰富的扩展接口和插件支持,用户可以根据自己的需求进行定制化处理。
  • 高可用性: Canal 支持分布式部署和高可用架构,可以在多节点之间实现负载均衡和故障切换,保证系统的稳定性。

Canal 的部署与使用

Canal 的部署和使用并不复杂,用户只需配置 Canal 与数据库的连接信息,并定义目标系统,Canal 就能开始实时捕获并同步数据。它支持 单机模式 和 集群模式,用户可以根据实际的吞吐量和可用性需求来选择不同的部署方式。

配置

用户需要配置以下内容:

  • 数据库连接信息:包括数据库的 IP、端口、用户名、密码等。
  • binlog 配置:指定要监听的 binlog 文件。
  • 目标系统配置:配置将变更数据同步到哪个系统,例如 Kafka、Elasticsearch、Redis 等。

启动与监控

Canal 提供了简单的命令行工具来启动服务,并且可以通过 Web 界面或监控系统(如 Prometheus)对 Canal 的运行状态进行实时监控。

使用场景

原始场景

阿里 otter 中间件的一部分

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_大数据_02

  • 数据同步: 实现不同数据库之间的数据同步,确保数据一致性。
  • 实时数据仓库: 将源数据库的变更实时同步到数据仓库中,进行数据分析和报表展示。
  • 实时搜索引擎更新: 将数据库的变更实时同步到搜索引擎中,提升搜索的实时性和准确性。
  • 缓存更新: 在数据库发生变更时,及时更新缓存中的数据,避免缓存穿透和缓存不一致的问题。

更新缓存

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_大数据_03

拉链表

订单表,6 月 20 日有 3 条记录:

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_数据仓库_04


到 6 月 21 日,表中有 5 条记录:

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_大数据_05


到 6 月 22 日,表中有 6 条记录:

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_数据仓库_06


在数据仓库中设计历史拉链表保存该表

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_java_07

  • dw_begin_date 表示该条记录的生命周期开始时间,dw_end_date 表示该条记录的生命周期结束时间
  • dw_end_date = '9999-12-31’表示该条记录属于有效
  • 如果查询有效记录则可以直接 where 9999-12-31
  • 如果查询 2012-06-21 的历史快照,dw_begin_date <= ‘2012-06- 21’ and end_date >= ‘2012-06-21’

大数据-262 实时数仓 - Canal 同步数据 介绍背景原理与优势 拉链表 实时统计_mysql_08


和原表在 6 月 21 日的记录完全一致,可以看出,这样的历史拉链表,技能满足历史数据的需求,又能很大程度的节省存储空间。

实时统计

抓去业务表的新增变化数据,用于实时统计。