可视化 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 的消息发送状态和统计信息。
    • 日志和告警:提供系统日志查看和异常告警功能。
相关推荐
爱掘金的土拨鼠16 分钟前
国产化dm数据库锁表解锁
数据库
灵魂猎手26 分钟前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
花花无缺32 分钟前
MySQL 的存储引擎-InnoDB 和 MyISAM的对比
mysql
Undoom32 分钟前
虚拟机一站式部署Claude Code &可视化UI界面
后端
苏琢玉34 分钟前
如何让同事自己查数据?写一个零依赖 PHP SQL 查询工具就够了
mysql·php
Asthenia041236 分钟前
建好了表,还在手动写CRUD的xml?兄弟,真得学习MBG了!
后端
庖丁解java42 分钟前
N个Utils
数据库
Mr. zhihao1 小时前
SQL LEFT JOIN 与 WHERE 条件的隐藏坑
数据库·sql
楽码1 小时前
底层技术SwissTable的实现对比
数据结构·后端·算法
2301_793086871 小时前
Redis 04 Reactor
数据库·redis·缓存