MySQL实时监听——EPX(收集mysql服务器的监视信息)

402阅读模式

1EPX简介

EPX主要对MySQL数据库进行实时监听,是一个从Mysql实时同步变更到Kafka的高可用、高性能、可追溯的数据管道。EPX通过Binlog Dump实时获取数据库的增量日志,并通过解析后获取具体的数据变更,最后将变更记录推送到Kafka中以供业务方消费。文章源自懂站帝-http://www.sfdkj.com/14232.html

EPX具有广泛的应用场景,可以应用于实时Mysql数据到NoSQL、实时搜索、实时推荐、业务Cache刷新、重要字段变更监控等业务场景。目前接入EPX的数据库有房源、客源、租赁、商业平台等,EPX为下游业务方提供了高可靠、低延迟的数据库监听服务。文章源自懂站帝-http://www.sfdkj.com/14232.html

2EPX工作原理

EPX实时监听功能是基于Mysql的主从复制原理实现的。文章源自懂站帝-http://www.sfdkj.com/14232.html

2.1、Mysql主从复制实现文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

1)从库生成两个线程,一个I/O线程,一个SQL线程;文章源自懂站帝-http://www.sfdkj.com/14232.html

2)I/O线程去请求主库的Binlog,并将得到的Binlog日志写到Relay Log(中继日志)文件中;文章源自懂站帝-http://www.sfdkj.com/14232.html

3)主库会生成一个 Log Dump 线程,用来给从库I/O线程传Binlog;文章源自懂站帝-http://www.sfdkj.com/14232.html

4)SQL线程,会读取Relay Log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。文章源自懂站帝-http://www.sfdkj.com/14232.html

2.2、EPX实时同步实现文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

1)EPX模拟Mysql Slave的交互协议,伪装自己为Mysql Slave,向Mysql Master发送Dump协议;文章源自懂站帝-http://www.sfdkj.com/14232.html

2)Mysql Master收到Dump请求,开始推送Binary Log给EPX;文章源自懂站帝-http://www.sfdkj.com/14232.html

3)EPX解析Binary Log字节流;文章源自懂站帝-http://www.sfdkj.com/14232.html

4)EPX根据配置过滤并转换成用户需要的规范格式;文章源自懂站帝-http://www.sfdkj.com/14232.html

5)EPX把转换后的数据输出到kafka中。文章源自懂站帝-http://www.sfdkj.com/14232.html

3EPX架构设计文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

1)ConfigManager:管理获取Mysql存储配置信息(监听的库、表、连接信息、Kafka信息、zookeeper信息等);文章源自懂站帝-http://www.sfdkj.com/14232.html

2)TaskManager:通过从ConfigManager获取需要监听的表和Zookeeper中记录的Worker节点数做负载均衡和任务分配;文章源自懂站帝-http://www.sfdkj.com/14232.html

3)EventParse(Canal):接受TaskManager分配的任务,通过Dump的方式监听业务方Mysql表,解析Binary Log字节流。这个组件使用了Alibaba的开源组件Canal的EventParse解析组件实现的;文章源自懂站帝-http://www.sfdkj.com/14232.html

4)EventHandler:获取EventParse解析后的日志,过滤无用的数据并组装成用户需要的规范格式;文章源自懂站帝-http://www.sfdkj.com/14232.html

5)KafkaWriter:把规范后的变更日志输出到Kafka中;文章源自懂站帝-http://www.sfdkj.com/14232.html

6)PositionManager:从接收日志到发送Kafka成功之后把当前位点记录到Zookeeper中。另外当服务重启时,负责从Zookeeper中获取最近一次Binlog读取的位点。文章源自懂站帝-http://www.sfdkj.com/14232.html

4EPX主要功能

4.1、实时监控数据变更文章源自懂站帝-http://www.sfdkj.com/14232.html

EPX项目的最核心的功能就是对MySQL数据库的变更进行实时监听,将监听到的变更事件解析成格式统一的JSON字符串存储到Kafka中,消费者可以对Kafka中的数据进行实时消费,并进行相关的业务逻辑处理。目前EPX支持的变更事件为INSERT, UPDATE, DELETE,其他变更事件将会被EPX自动忽略。文章源自懂站帝-http://www.sfdkj.com/14232.html

4.2、离线统计与备份文章源自懂站帝-http://www.sfdkj.com/14232.html

基于EPX写入Kafka中的数据,我们设置了定时任务,以小时为单位,将kafka中的数据同步到Hive中,一方面做数据备份,另一方面为数据的统计与分析提供数据来源。此外,会以天为周期,每天对前一天Hive中的的原始数据进行离线统计,将相关的结果存在Hive表中,可以直接提供给用户使用,做进一步的的数据分析。文章源自懂站帝-http://www.sfdkj.com/14232.html

4.3、支持数据库迁移文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

线上数据库由于某些原因,例如服务器故障,可能会存在数据库迁移的情况。如果需要迁移的数据库已经接入EPX,为了保障监听服务的可持续使用性,需要在EPX中进行相应的迁移操作。为此EPX提供了便捷的数据库迁移接口,可以在极短的时间内,将监听切换到迁移后的数据库上,保障下游业务不受影响。文章源自懂站帝-http://www.sfdkj.com/14232.html

4.4、实时监控功能文章源自懂站帝-http://www.sfdkj.com/14232.html

实时监控功能主要对所监听的数据库的延迟、库级别的流量、表级别的流量做统计,并以可视化的形式呈现给EPX负责人和用户,EPX负责人和用户可以根据统计结果对监听的数据库状态有一个全面的认知。此外,针对线上问题排查、开发调试等相关人员,实时监控功能都提供了极大的便捷。文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

4.5、异常报警功能文章源自懂站帝-http://www.sfdkj.com/14232.html

异常报警功能的主要目的是当线上监听服务出现异常情况时,EPX负责人和业务方能够及时感知并响应,尽量避免重大线上事故或将事故影响降低到最小。EPX监听的数据库之间由于所承载的业务、服务器性能、网络延迟等因素,可能存在巨大的差异。对此,EPX实现了可定制化的异常报警功能。文章源自懂站帝-http://www.sfdkj.com/14232.html

目前支持的可定制化异常配置包含:文章源自懂站帝-http://www.sfdkj.com/14232.html

1) 延迟配置,数据落地Kafka的时间大于设置的延迟阈值,则判定为异常情况。文章源自懂站帝-http://www.sfdkj.com/14232.html

2) 流量配置,数据库在设置的时间内无任何流量,则判定为异常情况。文章源自懂站帝-http://www.sfdkj.com/14232.html

3) 报警时间配置,只有异常发生在规定的时间内才进行报警。文章源自懂站帝-http://www.sfdkj.com/14232.html

5EPX高可用设计文章源自懂站帝-http://www.sfdkj.com/14232.html

为了保证EPX项目稳定性达到5个9及异常情况快速降级处理,我们增加了多Worker集群模式,并且实现了EPX项目多机房部署。文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

1)EPX每个集群会有多个Worker,每个Worker启动后都会在Zookeeper中进行注册。当动态新增Worker或者有Worker离线后,会自动触发负载均衡,保证当前集群服务可用性。文章源自懂站帝-http://www.sfdkj.com/14232.html

2)EPX根据机房部署多个集群,一方面保证Binlog日志的低延迟传输,另一方面保证当其中一个集群出现问题时,迅速切换到另一个集群,保证整个EPX项目服务的可用性。文章源自懂站帝-http://www.sfdkj.com/14232.html

6EPX目前在贝壳的使用情况文章源自懂站帝-http://www.sfdkj.com/14232.html

1)支持贝壳搜索服务和推荐服务;文章源自懂站帝-http://www.sfdkj.com/14232.html

2)支持贝壳数仓分析和实时指标;文章源自懂站帝-http://www.sfdkj.com/14232.html

3)支持各业务方重要字段变更订阅服务。文章源自懂站帝-http://www.sfdkj.com/14232.html

目前EPX项目已经支持了公司内32个部门的业务需求,接入的数据库表1131张。文章源自懂站帝-http://www.sfdkj.com/14232.html

MySQL实时监听——EPX(收集mysql服务器的监视信息)

文章源自懂站帝-http://www.sfdkj.com/14232.html

7EPX规划文章源自懂站帝-http://www.sfdkj.com/14232.html

为了提升EPX高可用、高性能、低延迟,这一年里,我们完成了平台化搭建、延迟及异常状态监控报警、负载均衡策略、分队列多机房部署、启动加载配置优化和kafka调优、失败重试及阻塞机制调整等一系列优化工作。后续我们会继续进行架构优化,进一步提高系统可靠性和降低数据延迟,增加同时支持多个kafka输出、Mysql异常主备切换等新功能,给用户提供更好的使用体验和更加可靠的服务。文章源自懂站帝-http://www.sfdkj.com/14232.html

懂站帝
  • 本文由 发表于 2022年6月17日 00:19:15
  • 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至395045033@qq.com举报,一经查实,本站将立刻删除。