基于CDC实现源数据库和派生数据库之间的强数据一致性


在源数据库和派生数据库之间保持强数据一致性对于基于CDC的流数据管道至关重要。目标数据库必须反映对源数据库所做的最新更改,因为数据更改速度很快。
像Apache Pinot这样的实时OLAP数据库利用其upsert功能来提供可靠的端到端数据一致性。Upsert确保摄取的数据集始终准确并保持最新,以反映上游更改。
基于CDC的Upsert,包含Debezium、Apache Kafka和Apache Pinot 通过将Debezium和Pinot相结合,可以实现许多很酷的用例,允许您在运营数据上运行OLAP查询,并具有非常高的新鲜度。
这是一篇如何建立一个流式数据管道来捕获MySQL数据库的变化,并通过Debezium和Kafka将其流式传输给Apache Pinot

使用 Apache Pinot 进行更新
Apache Pinot是一个实时 OLAP 数据库,它可以从 Kafka 等流数据源获取数据,并对获取的数据运行高吞吐量、低延迟的 OLAP 查询。由于其速度、吞吐量和保持数据新鲜度的能力,Apache Pinot 是服务层的理想选择。
尽管 Pinot 中的数据是不可变的,但它从0.6.0 版本开始支持更新插入,允许您仅查询流入其中的事件的最新版本。但请记住,即使您在 Pinot 表上启用更新插入,数据仍保持不变。
需要用一整篇博文来解释 upsert 在 Pinot 中是如何工作的。所以我现在将省略它,只关注实际使用。但是,您可以通过访问以下内容了解更多关于 Pinot upserts 的信息。

Debezium等更改数据捕获 (CDC) 工具捕获事务数据库中的更改,将它们转换为事件并将它们流式传输到KafkaPulsar等事件流平台。这些事件可选择通过流式 ETL 管道进行进一步处理,并最终进入服务层,这是一个为大规模分析提供服务的读取优化数据存储。

当服务层收到这些更改事件时,它会决定如何处理它们。假设事件被写入服务数据库中的表,则可以有两种选择:

  1. 追加——具有相同键的更改事件作​​为新行追加到表中,捕获对源表所做的每个更改。
  2. Upsert - 合并具有相同键的更改事件以反映事件的最新版本。目标表中只能有一个具有相同键的事件。

Upserts 有助于在源数据库和派生数据系统之间保持强大的数据一致性。因为,从分析的角度来看,您可能只对最新版本的事件感兴趣。

源码

详细点击标题