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中,一方面做数据备份,另一方面为数据的统计与分析提供数据