1EPX 简介
EPX 主要对 MySQL 数据库进行实时监听,是一个从 Mysql 实时同步变更到 Kafka 的高可用、高性能、可追溯的数据管道。EPX 通过 Binlog Dump 实时获取数据库的增量日志,并通过解析后获取具体的数据变更,最后将变更记录推送到 Kafka 中以供业务方消费。
EPX 具有广泛的应用场景,可以应用于实时 Mysql 数据到 NoSQL、实时搜索、实时推荐、业务 Cache 刷新、重要字段变更监控等业务场景。目前接入 EPX 的数据库有房源、客源、租赁、商业平台等,EPX 为下游业务方提供了高可靠、低延迟的数据库监听服务。
2EPX 工作原理
EPX 实时监听功能是基于 Mysql 的主从复制原理实现的。
2.1、Mysql 主从复制实现
1)从库生成两个线程,一个 I/O 线程,一个 SQL 线程;
2)I/O 线程去请求主库的 Binlog,并将得到的 Binlog 日志写到 Relay Log(中继日志)文件中;
3)主库会生成一个 Log Dump 线程,用来给从库 I/O 线程传 Binlog;
4)SQL 线程,会读取 Relay Log 文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
2.2、EPX 实时同步实现
1)EPX 模拟 Mysql Slave 的交互协议,伪装自己为 Mysql Slave,向 Mysql Master 发送 Dump 协议;
2)Mysql Master 收到 Dump 请求,开始推送 Binary Log 给 EPX;
3)EPX 解析 Binary Log 字节流;
4)EPX 根据配置过滤并转换成用户需要的规范格式;
5)EPX 把转换后的数据输出到 kafka 中。
3EPX 架构设计
1)ConfigManager:管理获取 Mysql 存储配置信息(监听的库、表、连接信息、Kafka 信息、zookeeper 信息等);
2)TaskManager:通过从 ConfigManager 获取需要监听的表和 Zookeeper 中记录的 Worker 节点数做负载均衡和任务分配;
3)EventParse(Canal):接受 TaskManager 分配的任务,通过 Dump 的方式监听业务方 Mysql 表,解析 Binary Log 字节流。这个组件使用了 Alibaba 的开源组件 Canal 的 EventParse 解析组件实现的;
4)EventHandler:获取 EventParse 解析后的日志,过滤无用的数据并组装成用户需要的规范格式;
5)KafkaWriter:把规范后的变更日志输出到 Kafka 中;
6)PositionManager:从接收日志到发送 Kafka 成功之后把当前位点记录到 Zookeeper 中。另外当服务重启时,负责从 Zookeeper 中获取最近一次 Binlog 读取的位点。
4EPX 主要功能
4.1、实时监控数据变更
EPX 项目的最核心的功能就是对 MySQL 数据库的变更进行实时监听,将监听到的变更事件解析成格式统一的 JSON 字符串存储到 Kafka 中,消费者可以对 Kafka 中的数据进行实时消费,并进行相关的业务逻辑处理。目前 EPX 支持的变更事件为 INSERT, UPDATE, DELETE,其他变更事件将会被 EPX 自动忽略。
4.2、离线统计与备份
基于 EPX 写入 Kafka 中的数据,我们设置了定时任务,以小时为单位,将 kafka 中的数据同步到 Hive 中,一方面做数据备份,另一方面为数据的统计与分析提供数据来源。此外,会以天为周期,每天对前一天 Hive 中的的原始数据进行离线统计,将相关的结果存在 Hive 表中,可以直接提供给用户使用,做进一步的的数据分析。
4.3、支持数据库迁移
线上数据库由于某些原因,例如服务器故障,可能会存在数据库迁移的情况。如果需要迁移的数据库已经接入 EPX,为了保障监听服务的可持续使用性,需要在 EPX 中进行相应的迁移操作。为此 EPX 提供了便捷的数据库迁移接口,可以在极短的时间内,将监听切换到迁移后的数据库上,保障下游业务不受影响。
4.4、实时监控功能
实时监控功能主要对所监听的数据库的延迟、库级别的流量、表级别的流量做统计,并以可视化的形式呈现给 EPX 负责人和用户,EPX 负责人和用户可以根据统计结果对监听的数据库状态有一个全面的认知。此外,针对线上问题排查、开发调试等相关人员,实时监控功能都提供了极大的便捷。
4.5、异常报警功能
异常报警功能的主要目的是当线上监听服务出现异常情况时,EPX 负责人和业务方能够及时感知并响应,尽量避免重大线上事故或将事故影响降低到最小。EPX 监听的数据库之间由于所承载的业务、服务器性能、网络延迟等因素,可能存在巨大的差异。对此,EPX 实现了可定制化的异常报警功能。
目前支持的可定制化异常配置包含:
1) 延迟配置,数据落地 Kafka 的时间大于设置的延迟阈值,则判定为异常情况。
2) 流量配置,数据库在设置的时间内无任何流量,则判定为异常情况。
3) 报警时间配置,只有异常发生在规定的时间内才进行报警。
5EPX 高可用设计
为了保证 EPX 项目稳定性达到 5 个 9 及异常情况快速降级处理,我们增加了多 Worker 集群模式,并且实现了 EPX 项目多机房部署。
1)EPX 每个集群会有多个 Worker,每个 Worker 启动后都会在 Zookeeper 中进行注册。当动态新增 Worker 或者有 Worker 离线后,会自动触发负载均衡,保证当前集群服务可用性。
2)EPX 根据机房部署多个集群,一方面保证 Binlog 日志的低延迟传输,另一方面保证当其中一个集群出现问题时,迅速切换到另一个集群,保证整个 EPX 项目服务的可用性。
6EPX 目前在贝壳的使用情况
1)支持贝壳搜索服务和推荐服务;
2)支持贝壳数仓分析和实时指标;
3)支持各业务方重要字段变更订阅服务。
目前 EPX 项目已经支持了公司内 32 个部门的业务需求,接入的数据库表 1131 张。
7EPX 规划
为了提升 EPX 高可用、高性能、低延迟,这一年里,我们完成了平台化搭建、延迟及异常状态监控报警、负载均衡策略、分队列多机房部署、启动加载配置优化和 kafka 调优、失败重试及阻塞机制调整等一系列优化工作。后续我们会继续进行架构优化,进一步提高系统可靠性和降低数据延迟,增加同时支持多个 kafka 输出、Mysql 异常主备切换等新功能,给用户提供更好的使用体验和更加可靠的服务。
作者介绍:
奕 X(企业代号名),目前负责贝壳大数据部 Mysql 实时接入和多种 OLAP 引擎查询相关工作。
本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。
原文链接:
https://mp.weixin.qq.com/s/Dg5gmI3WPlwWQH2eVHxrLg
评论