乐趣区

关于canal:移山数据迁移平台实时数据同步服务的架构设计

  1. 移山是禧云自研的数据迁徙平台,蕴含异构数据源的迁徙、实时数据同步等服务。有趣味的能够看这里理解在移山中怎么实现异构数据源的迁徙;
  2. 本文次要介绍移山实时数据同步服务产生的背景以及整体架构设计。

一. 移山实时数据同步服务产生背景

  • 禧云各个子公司业务零碎根本都是以 MySQL 为主;
  • 做为数据反对部门,须要订阅这些业务数据做为数据仓库的数据源,来进行上游的数据分析。比方:

    • 各种离线数据 T+1 报表展现;
    • 实时数据大屏展现等。

微信小程序实时数据指标展现

像这种常见的实时数据指标大屏展现,背地可能就用到实时数据同步服务技术栈。

二. 移山实时数据同步服务应用 canal 中间件

1. 应用场景合乎

它能够对 MySQL 数据库增量日志解析,提供增量数据订阅和生产,完全符合咱们的应用场景。

2. 反对将订阅到的数据投递到 kafka

canal 1.1.1 版本之后,server 端能够通过简略的配置就能将订阅到的数据投递到 MQ 中,目前反对的 MQ 有 kafka、RocketMQ,代替老版本中必须通过手动编码投递的形式。

移山的实时数据同步服务应用的 MQ 为 kafka,以下为次要配置:

批改 canal.properties 中配置
# 这里写上以后 canal server 所在机器的 ip
canal.ip = 10.200.*.109
# register ip to zookeeper(这里写上以后 canal server 所在机器的 ip)canal.register.ip = 10.200.*.109
# 指定注册的 zk 集群地址
canal.zkServers =10.200.*.109:2181,10.200.*.110:2181

# tcp, kafka, RocketMQ(设置 serverMode 模式,这个配置十分要害,咱们设置为 kafka)canal.serverMode = kafka

# 这个 demo 就是 conf 目录里的实例
canal.destinations = demo
# HA 模式必须应用该 xml,须要将相干数据写入 zookeeper, 保证数据集群共享
canal.instance.global.spring.xml = classpath:spring/default-instance.xml

# 这里设置 kafka 集群地址 (其它对于 mq 的配置参数能够依据理论状况设置)
canal.mq.servers = 10.200.*.108:9092,10.200.*.111:9092
批改 demo.properties 中配置
# canal 假装的 MySQL slave 的编号,不能与 MySQL 数据库和其余的 slave 反复
# canal.instance.MySQL.slaveId=1003
# 按需批改成本人的数据库信息
# position info(须要订阅的 MySQL 数据库地址)canal.instance.master.address=10.200.*.109:3306

# 这里配置要订阅的数据库,数据库的用户名和明码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.defaultDatabaseName =

# 设置要订阅的 topic 名称
canal.mq.topic=demo

# 设置订阅散列模式的分区数
canal.mq.partitionsNum=3

备注

  • 更多对于 mq 的配置参数解释,能够拜访这里:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart
  • 多个 canal server 除了 ip 和 MySQL.slaveId 设置不同外,其它都应该放弃雷同的配置。

3. 反对带 cluster 模式的客户端链接,保障服务高可用

  • 客户端能够间接指定 zookeeper 地址、instance name,canal client 会主动从 zookeeper 中的 running 节点,获取以后 canal server 服务的工作节点,而后与其建设链接;
  • 其它 canal server 节点则做为 Standby 状态,如果以后 active 节点产生故障,能够主动实现 failover 切换。

对 canal 的高可用(HA 机制)想理解更多,能够查看这篇文章。

三. 移山实时数据同步流程图

实时数据同步服务流程图(摘自《禧云数芯大数据平台技术白皮书》)如下:

总结

  • canal server 订阅业务零碎的 MySQL 数据库产生的 bin log;
  • canal server 将订阅到的 bin log 投递至 kafka 指定的 topic 里;
  • kafka 生产端拿到音讯,依据理论的数据应用场景,将数据再写入 Hbase 或 MySQL,或间接做实时剖析。

四. 创立一个实时数据同步工作的次要步骤

以创立一个数据订阅类型为 HBase 的数据同步工作为例,次要步骤如下:

  1. 创立 kafka 的 topic;
  2. 进入到 canal server 的 bin 目录,拷贝 example 整个目录,生成一个新的实例目录;
  3. 手动批改新实例的配置文件,配置以下主要参数:

    • 3.1 设置 slaveId,不能与曾经胜利运行的实例设置的 slaveId 值反复;
    • 3.2 要订阅的数据库所在的机器地址和端口号;
    • 3.3 要订阅的数据库名称;
    • 3.4 要订阅的表;
    • 3.5 要订阅的数据库用户名、明码;
    • 3.6 配置向 kafka 发送音讯的 topic;
    • 3.7 配置 kafka 的 partition 等;
  4. 重启 canal server;
  5. 查看实例的启动日志,判断实例是否启动胜利。

存在的问题

因为不足 WebUI 的撑持,因而会存在以下问题:

  • 流程简单:如上这些一系列的操作都是依附脚本的形式配置实现,配置过程繁琐,数据开发者很容易在某个环节上产生脱漏、出错;
  • 不利于工作的对立治理:比方谁开发的工作可能只有写代码的这个人比拟相熟;
  • 不不便查看工作的运行状况:比方已生产音讯数、提早音讯数;
  • 不利于排查问题:查看工作的执行状况只能登陆 canal server 所在服务器去查看工作所属实例的启动日志,如果遇到谬误时,不可能疾速及时的排查问题。

怎么解决问题

为了解决下面提到的这些问题,咱们开发了移山的实时数据同步服务。

后话

  • 在最新的稳定版:canal 1.1.4 版本,迎来最重要的 WebUI 能力;
  • instance 能够通过 WebUI 来创立,然而有局部使用者反馈,instance 的启动会有不稳固的状况呈现,咱们期待稳固版本能够疾速公布。

五. 移山实时数据同步服务整体架构

1. 所需集群环境

zookeeper 集群

为什么要用 zookeeper 集群,能够看这篇文章:阿里 canal 是怎么通过 zookeeper 实现 HA 机制的?

kafka 集群
  • kafka 具备高吞吐量、内置的分区、备份冗余分布式等特点,为大规模音讯解决提供了一种很好的解决方案;
  • 后面曾经提到过 canal 中间件通过简略的配置即可反对将订阅到的数据间接投递到 kafka 中。
canal server 集群

为保障数据订阅服务的稳定性,咱们须要借助 canal 的 HA 机制,实现故障主动转移,保障服务高可用,因而咱们须要部署多个 canal server。

hbase 集群
  • 数据湖在禧云的实际是存储团体各子公司、ISV 各种各样原始数据的大型仓库,其中的数据可供存取、解决、剖析和传输;
  • 数据湖的技术解决方案,咱们抉择的是 Apache HBase。

2. 移山实时数据同步架构设计

架构图

canal server 端
  • 在 canal server 的多个节点上手工创立、运行 instance;

备注:

  • 咱们在配置 instance 相干参数时,不指定具体的数据库,这样该 instance 能够订阅到该 MySQL 节点上的所有数据库,而后在移山创立同步工作时再指定具体要订阅的表。
移山

前端采纳 Vue.js + Element UI,后端应用 SpringBoot 开发:

  • 前端工程

    • 负责提供创立实时同步工作所需的 WebUI;
    • 提供丰盛的工作运行监控性能。
  • 后端工程

    • 负责前端工程的数据接口,会记录指标表(实时同步工作订阅到的数据最终存储的目的地)的各种元数据信息。

备注:

  • 如果要创立的同步工作将数据存储至 MySQL,则须要提前人工干预创立 MySQL 表(MySQL 数据库由 DBA 对立治理);
  • 如果要创立的同步工作将数据存储至 Hbase,则在移山创立工作时,由后盾主动创立 Hbase 表。
变形金刚

解决订阅数据存储的 java 工程,分为三个可独自部署的模块:

  • canal client 服务

    • canal 客户端,从 canal server 拿到数据,并将数据投递至 kafka。
  • kafkaToHbase 服务

    • kafka 生产端,负责将接管的音讯进行转化解决,解决后的数据存储至 Hbase。
  • kafkaToMySQL 服务

    • kafka 生产端,负责将接管的音讯进行转化解决,解决后的数据存储至 MySQL。

备注:

  • 以上三个服务均反对命令行启动、进行。

关注微信公众号

欢送大家关注我的微信公众号浏览更多文章:

退出移动版