Databus概述
Databus是一个低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统, 使用Java语言实现, 由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑.
Databus特点
来源独立:Databus支持多种数据来源的变更抓取,包括Oracle和MySQL。
可扩展、高度可用:Databus能扩展到支持数千消费者和事务数据来源,同时保持高度可用性。
事务按序提交:Databus能保持来源数据库中的事务完整性,并按照事务分组和来源的提交顺寻交付变更事件。
低延迟、支持多种订阅机制:数据源变更完成后,Databus能在微秒级内将事务提交给消费者。同时,消费者使用Databus中的服务器端过滤功能,可以只获取自己需要的特定数据。
无限回溯:这是Databus最具创新性的组件之一,对消费者支持无限回溯能力。当消费者需要产生数据的完整拷贝时(比如新的搜索索引)它不会对数据库产生任何额外负担,就可以达成目的, 当消费者的数据大大落后于来源数据库时,也可以使用该功能.
Databus结构
上图中介绍了Databus系统的构成,包括中继Relay、bootstrap服务和客户端库。Bootstrap服务中包括Bootstrap Producer和Bootstrap Server。快速变化的消费者直接从Relay中取事件。如果一个消费者的数据更新大幅落后,它要的数据就不在Relay的日志中,而是需要请求 Bootstrap服务,提交给它的,将会是自消费者上次处理变更之后的所有数据变更快照.
模块介绍
Source Databases: MySQL以及Oracle数据源
Relays: 负责抓取和存储数据库变更,全内存存储,也可配置使用mmap内存映射文件方式
Schema Registry: 数据库数据类型到Databus数据类型的一个转换表
Bootstrap Service: 一个特殊的客户端,功能和Relays类似,负责存储数据库变更,主要是磁盘存储
Application: 数据库变更消费逻辑,从Relay中拉取变更,并消费变更
Client Lib: 提供挑选关注变更的API给消费逻辑
Consumer Code: 变更消费逻辑,可以是自身消费或者再将变更发送至下游服务
主要组件
Databus的主要由以下四个组件构成.
Databus Relay 数据抓取端
从Databus来源读取变更的数据行,并将读取到的数据序列化为Databus变更事件保存到内存缓冲区中.
监听来自Databus客户端(包括Bootstrap Producer)的请求,并传输新的Databus数据变更事件.
Databus 数据客户端
检查Relay上新的数据变更事件,并执行特定业务逻辑的回调
如果落后Relay太多,向Bootstrap Server发起查询
新客户端会向Bootstrap Server发起bootstrap启动查询,然后切换到向中继发起查询,以完成最新的数据变更事件
单个客户端可以处理整个Databus数据流,它们还可以作为集群的一部分,处理一小部分流。
Databus Bootstrap Producer 辅助引导程序生产端
它只是一个特殊的客户端
检查Relay上的新数据变更事件
将数据变更事件保存到Mysql数据库
Mysql数据库用于Bootstrap和Clients追溯数据
Databus Bootstrap Server 引导程序服务
- 监听来自Databus客户端的请求,并为bootstrap和追溯返回一个超长的回溯数据变更事件