可视化 MySQL binlog 监听方案

前言

为什么需要可视化的 MySQL binlog 监听方案?

当公司刚起步的时候,研发少、资源有限,但我们需要监听 binlog 日志做业务处理,最快速的方案是引入开源的 MySQL binlog 监听方案,比如(canal)。

随着公司的扩展,团队逐渐增多,每个团队都有监听 binlog 的需求。这个时候每个团队都使用 canal 去监听binlog 就显得太繁琐。不仅是难以维护,更重要的是增加团队成员的理解成本。

所以,集中化 MySQL binlog 监听平台,就几乎成了团队扩展后的必经之路了。

Binlog 二进制日志

MySQL的二进制日志(binlog)是一个重要的功能,用于记录对数据库执行的所有更改操作。它在数据恢复、复制和审计等方面发挥着关键作用。以下是关于MySQL二进制日志的详细介绍:

1. 二进制日志的用途

  • 数据恢复:在发生数据丢失或损坏时,可以使用二进制日志来恢复数据。通过重放日志中的事件,可以将数据库恢复到某个特定的时间点。
  • 复制(Replication) :MySQL复制依赖于二进制日志。主服务器将其更改记录到二进制日志中,从服务器读取这些日志并重放,以保持与主服务器的数据同步。
  • 审计和分析:二进制日志可以用于审计数据库操作,帮助分析数据更改的历史记录。

2. 二进制日志的组成

  • 事件(Event) :二进制日志由一系列事件组成,每个事件代表一个对数据库的更改操作,如INSERT、UPDATE、DELETE等。
  • 日志文件:二进制日志

可视化监听方案

一个平台化的解决方案,使业务方能够通过简单的配置来监听 MySQL 的 binlog ,并将其输出到 Kafka,同时提供一个可视化界面来展示和管理这些数据。

  1. 对业务方:通过界面化的方式,配置待监听的数据源 + 配置待输出的目标源(比如kafka)即可拥有监听 binlog 的能力。
  2. 对研发:学习成本低,扩展性强、效率高
  3. 对平台:统一管理,产品功能齐全、监控方案更容易展开实现

canal 监听方案

canal 官方流程图:

canal的工作原理是 把自己伪装成 MySQL slave ,模拟MySQL slave的交互协议向 MySQL Mater发送 dump协议

MySQL mater 收到 canal 发送过来的 dump 请求,开始推送 binary log 给 canal,然后 canal 解析 binary log,再发送到存储目标输出源,比如 MySQL,Kafka,ES 等。

这里本质上,canal 利用 MySQL 提供的 slave dump 通信协议,模拟成 slave 从节点,从而获取 binlog 日志。

可视化平台方案

平台化具有哪些能力:

  1. 监听 binlog(核心能力)
  2. 可视化配置界面
  3. 实时监控
  4. 异常告警
  5. 高并发/高扩展能力
  6. 离线统计与备份
  7. ...

有了平台化的管理能力,扩展性将得到大大提升。

除了 canal 之外是否可以自己实现 binlog 监听组件?

当然可以,在当下的较大体量的公司中,一般都有自己的 监听 binlog 组件,便于迭代维护。我们可以借鉴开源的 canal 实现自己的 binlog 监听组件,监听流程思路都是大差不差。

可视化配置界面关注哪些核心能力?

  1. 输入源 + 输出源配置
  2. 监听表上线、线下能力
  3. 基本页面搜索、列表展示能力

输出源配置,以输出到 kafka 为例:

  1. 为避免管理困难+输出topic泛滥,我们可以一个数据库使用同一个kafka topic 进行输出
  2. 不同的业务方都可以监听这个 topic,不过在使用时过滤出需要的监听表即可

这种方案能支持绝大部分场景,很多大厂都在采用这种方案。

当然,如果你存在量级非常的大表,也可以采用单独的输出 topic 进行输出。

高并发/高扩展层需要关注什么?

监听 binlog 通常意味着数据量大,如果只有一个节点可能出现单节点故障或者效率低下、大批量延迟等问题。

可以考虑使用多个 woker 节点同时处理并解析 binlog 数据,也即是分布式集群了。

有了分布式集群,就需要考虑分布式协调,这里常用的如 zk 来负责管理分布式节点,负载均衡各节点压力。

甚至可以继续优化:

  1. 负载均衡策略、分队列多机房部署、启动加载配置优化和kafka调优、失败重试及阻塞机制调整等
  2. 多个kafka输出、Mysql异常主备切换等

方案架构

这里输入源以 MySQL,输出源以 Kafka 进行考虑。

  1. 数据源配置模块:提供一个界面让用户配置MySQL数据源。
  2. Binlog 监听模块:负责从MySQL读取binlog并解析。
  3. Kafka 输出模块:将解析后的数据发送到Kafka。
  4. 可视化管理界面:用于展示和管理binlog数据流。

详细设计

1. 数据源配置模块
  • 用户界面:提供一个简单的 Web 界面,用户可以在此输入 MySQL 数据库的连接信息(如主机、端口、用户名、密码)以及需要监听的数据库和表。
  • 配置存储:将用户的配置存储在一个配置数据库中,确保配置的安全性和可用性。
2. Binlog 监听模块
  • 工具选择:使用 Canal 或自研的组件来监听 MySQL 的 binlog。这些工具可以无缝地将 binlog 事件转换为 JSON 格式的数据。
  • 动态配置:监听模块需要能够动态加载用户配置的 MySQL 数据源,并启动相应的 binlog 监听任务。
  • 故障处理:实现自动重连和故障恢复机制,确保监听的稳定性。

如果是自研 binlog 监听组件,需要考虑可靠性和并发性等基本要求。

3. Kafka 输出模块
  • 数据转换:将 binlog 事件转换为 Kafka 消息格式,确保消息的结构化和一致性。
  • 消息发送:将转换后的消息发送到用户指定的 Kafka topic 中,支持分区和副本配置以提高可靠性。
4. 可视化管理界面
  • 前端框架:使用 React 或 Vue.js 构建用户界面。

  • 功能设计

    • 数据源管理:展示所有配置的数据源,支持增删改查操作。
    • 实时监控:展示实时的 binlog 事件流,支持过滤和搜索。
    • Kafka 状态:展示 Kafka 的消息发送状态和统计信息。
    • 日志和告警:提供系统日志查看和异常告警功能。
相关推荐
且行志悠37 分钟前
Mysql的使用
mysql
xuxie1337 分钟前
SpringBoot文件下载(多文件以zip形式,单文件格式不变)
java·spring boot·后端
白鹭38 分钟前
MySQL源码部署(rhel7)
数据库·mysql
重生成为编程大王1 小时前
Java中的多态有什么用?
java·后端
666和7771 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗1 小时前
SpringMVC(一)
数据库
Funcy2 小时前
XxlJob 源码分析03:执行器启动流程
后端
星期天要睡觉2 小时前
MySQL 综合练习
数据库·mysql