(1). Debezium是什么?
Debezium是由RedHat(这是一家典型靠文档盈利的公司)开源的一个项目,该项目是为了:捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台.
你可以安装并且配置Debezium去监控你的数据库,然后你的应用就可以消费对数据库的每一个行级别(row-level)的更改.只有已提交的更改才是可见的,所以你的应用不用担心事务(transaction)或者更改被回滚(roll back).
Debezium为所有的数据库更改事件提供了一个统一的模型,所以你的应用不用担心每一种数据库管理系统的错综复杂性.另外,由于Debezium用持久化的、有副本备份的日志来记录数据库数据变化的历史,因此,你的应用可以随时停止再重启,而不会错过它停止运行时发生的事件,保证了所有的事件都能被正确地、完全地处理掉.
(2). Debezium架构
(3). 适用场景
- 缓存失效
- 多应用,缓存同时失效.
- 简化单体应用
- 许多应用更新数据库,然后在数据库中的更改被提交后,做一些额外的工作:更新搜索索引,更新缓存,发送通知,运行业务逻辑等等.这种情况通常称为双写(dual-writes),因为应用没有在一个事务内写多个系统.这样不仅应用逻辑复杂难以维护,而且双写容易丢失数据或者在一些系统更新成功而另一些系统没有更新成功的时候造成不同系统之间的状态不一致.使用捕获更改数据技术(change data capture,CDC),在源数据库的数据更改提交后,这些额外的工作可以被放在独立的线程或者进程(服务)中完成.这种实现方式的容错性更好,不会丢失事件,容易扩展,并且更容易支持升级.
- 共享数据库
- 当多个应用共用同一个数据库的时候,一个应用提交的更改通常要被另一个应用感知到.一种实现方式是使用消息总线,尽管非事务性(non-transactional)的消息总线总会受上面提到的双写(dual-writes)影响.但是,另一种实现方式,即Debezium,变得很直接:每个应用可以直接监控数据库的更改,并且响应更改.
- 数据集成
- 数据通常被存储在多个地方,尤其是当数据被用于不同的目的的时候,会有不同的形式.保持多系统的同步是很有挑战性的,但是可以通过使用Debezium加上简单的事件处理逻辑来实现简单的ETL类型的解决方案.
- 命令查询职责分离(CQRS)
- 在命令查询职责分离(Command Query Responsibility Separation,CQRS)架构模式中,更新数据使用了一种数据模型,读数据使用了一种或者多种数据模型.由于数据更改被记录在更新侧(update-side),这些更改将被处理以更新各种读展示.所以CQRS应用通常更复杂,尤其是他们需要保证可靠性和全序(totally-ordered)处理.Debezium和CDC可以使这种方式更可行:写操作被正常记录,但是Debezium捕获数据更改,并且持久化到全序流里,然后供那些需要异步更新只读视图的服务消费.写侧(write-side)表可以表示面向领域的实体(domain-oriented entities),或者当CQRS和Event Sourcing结合的时候,写侧表仅仅用做追加操作命令事件的日志.