数据组件-Databus

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 数据抓取端

  1. 从Databus来源读取变更的数据行,并将读取到的数据序列化为Databus变更事件保存到内存缓冲区中.

  2. 监听来自Databus客户端(包括Bootstrap Producer)的请求,并传输新的Databus数据变更事件.

Databus 数据客户端

  1. 检查Relay上新的数据变更事件,并执行特定业务逻辑的回调

  2. 如果落后Relay太多,向Bootstrap Server发起查询

  3. 新客户端会向Bootstrap Server发起bootstrap启动查询,然后切换到向中继发起查询,以完成最新的数据变更事件

  4. 单个客户端可以处理整个Databus数据流,它们还可以作为集群的一部分,处理一小部分流。

Databus Bootstrap Producer 辅助引导程序生产端

  1. 它只是一个特殊的客户端

  2. 检查Relay上的新数据变更事件

  3. 将数据变更事件保存到Mysql数据库

  4. Mysql数据库用于Bootstrap和Clients追溯数据

Databus Bootstrap Server 引导程序服务

  1. 监听来自Databus客户端的请求,并为bootstrap和追溯返回一个超长的回溯数据变更事件

参考文档