一种基于canal和kafka实现实时数仓的系统的制作方法

文档序号:16855707发布日期:2019-02-12 23:16阅读:1832来源:国知局
一种基于canal和kafka实现实时数仓的系统的制作方法

本发明涉及互联网技术领域,具体涉及一种基于canal和kafka实现实时数仓的系统。



背景技术:

随着互联网技术的飞速发展,大数据时代已经到来,实时数据采集、同步、计算并及时响应和反馈结果成为根据业务的实时变化及时调整策略并快速响应执行解决方案中至关重要的环节。本发明主要解决其中的数据同步环节。其主要内容是:在不影响业务方正常业务的情况下从业务数据库同步实时数据和历史数据到大数据仓库以供后续的变量计算等操作提供有效实时的数据。

canal,是阿里巴巴集团使用纯java开发的一套基于数据库增量日志解析、提供增量数据订阅&消费、目前主要支持了mysql数据库的同步系统。

kafka,是最初由linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/spark流式处理引擎,web/nginx日志、访问日志,消息服务等,用scala语言编写,linkedin于2010年贡献给了apache基金会并成为顶级开源项目。

目前宜信也有过类似系统,借鉴了linkedin的思想通过canal和kafka来实现数据同步操作。

但是,其维度单一,添加、减少所对接的业务线不方便,无法根据对接业务线控制并发量,不同集群之间的kafka、hbase、elasticsearch无法写入。



技术实现要素:

为实现上述目的,本发明提供如下技术方案:

一种基于canal和kafka实现实时数仓的系统,包括canal-server、canal-client、consumer-plugin-man和admin-ods,canal-server和canal-client相连接,canal-client通过kafka与consumer-plugin-man相连接,admin-ods也与consumer-plugin-man相连接,所述consumer-plugin-man与hbase相连接;所述hbase连接有elasticsearch,elasticsearch连接有databus-query,databus-query连接有atabus-api。

作为本发的再进一步技术方案是:所述admin-ods通过meta-data与hbase相连接。

作为本发明的再进一步技术方案是:所述consumer-plugin-man通过somerules与elasticsearch。

作为本发明的再进一步技术方案是:所述canal-server通过binlogchanges与mysql相连接。

本发明的有益效果是将数据源、数据处理、数据写入解耦并统一管理,灵活配置,大大简化研发成本,易维护,支持不同生产环境下部署同一或不同数据仓库中的数据接入,实现一次研发,多处并灵活使用。

附图说明

图1为本发明的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,本发明实施例中,一种基于canal和kafka实现实时数仓的系统,包括canal-server、canal-client、consumer-plugin-man和admin-ods,canal-server和canal-client相连接,canal-client通过kafka与consumer-plugin-man相连接,admin-ods也与consumer-plugin-man相连接,所述consumer-plugin-man与hbase相连接;所述hbase连接有elasticsearch,elasticsearch连接有databus-query,databus-query连接有atabus-api。

所述admin-ods通过meta-data与hbase相连接。

所述consumer-plugin-man通过somerules与elasticsearch。

所述canal-server通过binlogchanges与mysql相连接。

1、canal-server:主要负责从业务方mysql同步binlog数据并解析发送至canal-client;

其主要功能有:

1)canal模拟mysqlslave的交互协议,伪装自己为mysqlslave,向mysqlmaster发送dump协议;

2)mysqlmaster收到dump请求,开始推送binarylog给slave(也就是canal);

3)canalserver解析binarylog对象(原始为byte流);

2、canal-client:主要负责从canal-server处获取解析后的mysql数据并发送至kafka;

通过nio链接从canalserver处获取消息并判断消息类型:

1)若消息为dml型,则发送该消息至kafka消息系统;

2)若消息为ddl型,则解析ddl-sql语句后将相关表结构修改信息发送至ods-admin系统进一步处理元数据信息;

3、consumer-plugin-man:主要负责从kafka系统中消费实时数据并写入hbase和elasticsearch;

1)启动从ods-admin系统读取相关配置;

2)循环消费kafka数据并按规则写入hbase和es中;

4、ods-admin:主要负责各模块的配置信息统一管理,和元数据的存储、数据一致性校验和修复等补救措施等。

整个系统运作流程如下:

1、canal-server启动后将各个业务线注册到zookeeper中,并监听mysqlbinlog是否改变,后进行解析binlog数据并分发到各个业务线对应的nio流通道中(该模块接收到二进制的数据,转换为utf-8的数据);

2、canal-client模块从zookeeper中获取各业务线对应的canal-server实例地址,链接该地址并获取解析后的binlog数据写入kafka消息队列或者发送至ods-admin系统做进一步处理(该模块接收到utf-8的数据,转换为所需json对象格式数据发送);

3、consumer-plugin-man模块消费kafka数据,并结合ods-admin系统中mysql/redis中的meta-data(元数据)信息,将binlog改变的数据内容同步至hbase中(若该业务线需要写入es中,也会存入elasticsearch中),随后在通过elasticsearch从hbase中检索到特需数据通过api响应给下游使用方;

4、ods-admin模块:作为整个系统的后台配置管理模块,统一管理着canal-client和consumer-plugin-man和querypf系统中各业务线的配置信息和元数据信息,并兼任一部分系统维护工具(例如:数据随机比对、全量数据比对、历史数据导入、异常数据修复、指定kafka导入等)。

准备步骤:

1、需要事先确定好所需对接业务线的mysql主库的地址和所需同步的数据表名,并开通binlog同步权限;

2、2、在ods-admin系统中需要事先配置canal-client、consumer-plugin-man、querypf各自所需的业务线配置信息;

3、事先搭建好zookeeper、kafka服务;

辅助步骤:

1、对于canal-client发送数据量的elk监控和告警;

2、对于consumer-plugin-man消费kafka数据量的监控和告警;

3、对于各个系统运行情况、运行指标的监控和告警;

善后步骤:

1、定时数据检验业务方mysql数据与hbase中数据是否一致,若不一致则走数据修复功能;

2、定时数据校验hbase数据和elasticsearch中数据是否一致,若不一致则走数据从hbase导入elasticsearch中功能;

3、当数据发送大量不一致的情况时,则需要走全量数据导入功能,将mysql中的全量数据导入到hbase和elasticsearch中。

在本方案的最优流程中,增加了consumer-plugin-man的横向可扩展性,当一台机器出现性能瓶颈时可以随时通过增加机器数量来解决,且增加了更多维度、更全面的属性,对数据类型ddl\dml处理更加充分。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1