作者奕X(企业代号名),目前负责贝壳大数据部 Mysql 实时接入和多种OLAP引擎查询相关工作。
1 EPX简介
EPX主要对MySQL数据库进行实时监听,是一个从Mysql实时同步变更到Kafka的高可用、高性能、可追溯的数据管道。EPX通过Binlog Dump实时获取数据库的增量日志,并通过解析后获取具体的数据变更,最后将变更记录推送到Kafka中以供业务方消费。
EPX具有广泛的应用场景,可以应用于实时Mysql数据到NoSQL、实时搜索、实时推荐、业务Cache刷新、重要字段变更监控等业务场景。目前接入EPX的数据库有房源、客源、租赁、商业平台等,EPX为下游业务方提供了高可靠、低延迟的数据库监听服务。
2 EPX工作原理
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中。
3 EPX架构设计
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读取的位点。
4 EPX主要功能
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) 报警时间配置,只有异常发生在规定的时间内才进行报警。
5 EPX高可用设计
为了保证EPX项目稳定性达到5个9及异常情况快速降级处理,我们增加了多Worker集群模式,并且实现了EPX项目多机房部署。
1)EPX每个集群会有多个Worker,每个Worker启动后都会在Zookeeper中进行注册。当动态新增Worker或者有Worker离线后,会自动触发负载均衡,保证当前集群服务可用性。
2)EPX根据机房部署多个集群,一方面保证Binlog日志的低延迟传输,另一方面保证当其中一个集群出现问题时,迅速切换到另一个集群,保证整个EPX项目服务的可用性。
6 EPX目前在贝壳的使用情况
1)支持贝壳搜索服务和推荐服务;
2)支持贝壳数仓分析和实时指标;
3)支持各业务方重要字段变更订阅服务。
目前EPX项目已经支持了公司内32个部门的业务需求,接入的数据库表1131张。
7 EPX规划
为了提升EPX高可用、高性能、低延迟,这一年里,我们完成了平台化搭建、延迟及异常状态监控报警、负载均衡策略、分队列多机房部署、启动加载配置优化和kafka调优、失败重试及阻塞机制调整等一系列优化工作。后续我们会继续进行架构优化,进一步提高系统可靠性和降低数据延迟,增加同时支持多个kafka输出、Mysql异常主备切换等新功能,给用户提供更好的使用体验和更加可靠的服务。
作 者: 奕X(企业代号名)
出品人: 巨蟹、梅长苏 (企业代号名)
---------- END ----------
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
用户思维+:好产品让用户为自己尖叫
[美] Kathy Sierra / 石航 / 人民邮电出版社 / 2017-9 / 69.00元
畅销产品与普通产品的本质区别是什么?若没有巨额预算、不爱营销噱头、不开奢华的产品发布会,如何打造可持续成功的产品?本书针对上述问题提出了新颖的观点:用户并不关心产品本身有多棒,而是关心使用产品时自己有多棒。作者利用其多年的交互设计经验,生动阐释了这一观点背后的科学。可贵的是,本书并不止步于解释“为什么”,还清晰呈现了“怎么做”。 本书风格活泼、图文并茂,其对话式内容既引人入胜,又引人深思,适......一起来看看 《用户思维+:好产品让用户为自己尖叫》 这本书的介绍吧!