如何轻松和安全地构建的满足合规要求的智能产品,实现业务需求?4月26日,告诉你答案! 了解详情
写点什么

MySQL 实时监听——EPX

  • 2019 年 9 月 27 日
  • 本文字数:2387 字

    阅读完需:约 8 分钟

MySQL实时监听——EPX

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


2019 年 9 月 27 日 13:041678

评论

发布
暂无评论
发现更多内容

公司出了一款新产品,要不要招代理商?

石云升

用户增长 价值网依赖 产品定位 新产品

图解Java垃圾回收算法及详细过程!

攀鱼飞岩

Java JVM 虚拟机 垃圾回收机制

食堂就餐卡系统设计

刘志刚

LeetCode 769. Max Chunks To Make Sorted

liu_liu

LeetCode

软件建模与设计文档

大雄

UML

ARTS打卡Week 03

teoking

ios LeetCode

使用 Docker Desktop 中的 Kubernetes

FeiLong

Docker Kubernetes

ngrok穿越本地服务器,极客大学架构师训练营 第一课总结,John 易筋 ARTS打卡Week 03

John(易筋)

极客时间 极客大学 ngrok

[安利] WSL Linux 子系统,真香!附完整实操

猴哥一一 cium

Docker Linux 推荐 WSL2 Windows 10

SpringBoot基本特性以及自动化配置-SPI机制

攀鱼飞岩

Java 微服务 Spring Boot SpringCloud

HBase 常用 Shell 命令手册

Rayjun

Java HBase

第一周总结

andy

第一周总结

作业1-食堂就餐卡系统设计

A Matt

mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比,于是写了个插件。

why技术

Java 源码 mybatis

极客时间 - 架构师训练营 - week1 - 作业2

jjn0703

极客大学架构师训练营

食堂就餐卡系统设计

大雄

ARTS 打卡 WEEK3

编程之心

ARTS 打卡计划

食堂就餐卡系统设计

飞雪

第一周学习总结

A Matt

极客大学架构师训练营

架构师训练营-学习笔记-第一周

心在飞

极客大学架构师训练营

MySQL 笔记(二)日志系统

奈何花开

Java MySQL

架构方法学习总结

飞雪

SpringBoot整合Quartz实现任务定时

北漂码农有话说

SpringBoot 2

第一周UML作业

吴建中

面试了 6 轮 Google中国 之后,还是挂了

程序猿石头

面试 谷歌Google 经验分享 面经

带你学够浪:Go语言基础系列 - 8分钟学复合类型

程序员柠檬

后端 Go 语言

scala callback hell

HackMSF

编程 最佳实践

ARTS-week-2

youngitachi

ARTS 打卡计划

程序员的晚餐 | 6 月 7 日 豆腐年糕

清远

美食

第一周作业

andy

史上最诡异问题,iOS 单例初始化两次,你遇到过吗?

liu_liu

ios 初始化 单例 两次

MySQL实时监听——EPX_数据库_奕X_InfoQ精选文章