Kafka 中的数据捕获2025 年 5 月 15 日 | 阅读 11 分钟 ![]() Kafka 中的变更数据捕获 (CDC) 是一种强大的数据集成用例,它允许在系统之间进行实时记录同步。CDC 捕获数据源(如数据库)中的更改,并使用 Kafka 作为中介将这些更改流式传输到不同的系统或应用程序。 变更数据捕获 (CDC) 简介变更数据捕获 (CDC) 是一种检测和跟踪对源数据库所做的更改(插入、更新、删除)并将其传播到目标机器的方法。CDC 捕获更改过的数据,而不是整个数据集,通过减少数据量和处理时间来优化数据传输。 使用 Kafka 进行 CDC 的常见原因包括:
Kafka 如何促进 CDC![]() Kafka 通过充当捕获、传输和分发实时数据更改的中间平台,实现了变更数据捕获 (CDC)。以下是 Kafka 完成此功能的详细说明: 1. Kafka 中的 CDC 连接器Kafka 的生态系统包括 Kafka Connect,这是一个用于将外部系统与 Kafka 集成的分布式、容错框架。Kafka Connect 使用 CDC 连接器(例如 Debezium)从各种数据库捕获更改。 Debezium:一个流行的开源 CDC 工具,与 Kafka Connect 集成。它读取数据库的更改日志(例如 MySQL 二进制日志,PostgreSQL 预写日志),并生成代表每次更改的 Kafka 事件。 2. 更改事件作为 Kafka 消息当数据库发生更改时,CDC 连接器会将这些更改作为事件发布到 Kafka 主题中。每个事件包含:
这些事件被组织在 Kafka 主题中,具有反映数据库和表名称的通用结构(例如,对于 stock 数据库中的 products 表,主题为 dbserver1.Stock,products)。 3. 主题分区和可伸缩性Kafka 主题可以进行分区,从而允许并行处理 CDC 数据。这种分区对于大量更改同时发生的、高吞吐量的应用程序特别有用。通过将事件分发到多个分区,Kafka 允许水平扩展,确保 CDC 管道能够处理大量数据而不会出现瓶颈。 4. 容错和数据持久性Kafka 在多个代理之间提供数据复制,确保即使代理发生故障,数据仍然可用。对于 CDC 管道,这意味着更改会可靠地存储在 Kafka 中,直到它们被处理。Kafka 的持久性确保 CDC 事件会根据可配置的保留策略进行保留,因此即使消费者暂时离线,它也可以从 Kafka 重放事件并赶上。 5. 使用 Kafka Streams 进行流处理和转换借助 Kafka Streams(一个内置的流处理库),Kafka 允许对 CDC 事件进行实时数据处理和转换。 Kafka 中的 CDC 架构![]() Kafka 中的 CDC(变更数据捕获)过程涉及从源数据库捕获数据更改,并通过 Kafka 将它们流式传输到目标系统进行消耗。以下是 Kafka 中 CDC 架构中所有涉及内容的详细分解: 1. 源数据库源数据库是更改的起点。更改可能包括插入、更新和删除,这些操作会修改数据库中的数据。CDC 的典型源数据库包括关系型数据库(如 MySQL、PostgreSQL 和 Oracle)、文档存储(如 MongoDB)甚至大型机数据库。 这些数据库中的每一个都有一个跟踪更改的机制:
CDC 的源数据库充当数据更改的初始入口点。然后,数据会被捕获并通过 Kafka 流式传输。 2. CDC 连接器CDC 连接器是 Kafka CDC 方法中的关键组件。它负责持续监视源数据库的更改,并将这些更改作为事件发布到 Kafka 主题中。该连接器使用 Kafka 的 Kafka Connect 框架以可伸缩、容错的方式管理集成外部系统(在此示例中为数据库)与 Kafka 的过程。 Kafka 最广泛使用的 CDC 连接器之一是 Debezium:
Debezium CDC 连接器配置示例 该配置指定了数据库连接信息和要监视的表。以下是 MySQL 连接器的基本配置示例:
3. Kafka 主题一旦 CDC 连接器捕获了更改,它们就会将这些更改作为事件发布到 Kafka 主题中。Kafka 主题充当临时存储更改事件的通道,直到它们被使用者读取和处理。
Kafka 的复制和保留功能确保一旦事件发布到主题,它们就会被持久地存储并可供使用者使用,直到需要为止,从而实现容错和重新处理。 4. Kafka 消费者Kafka 消费者订阅发布 CDC 事件的主题,读取并将这些更改应用于各种目标系统。目标系统可以是数据库、数据仓库、搜索引擎或需要与源数据库保持同步的微服务。
消费者处理示例 考虑一个电子商务应用程序,其中需要将客户表的更改同步到搜索引擎以进行实时客户搜索。
这种由消费者驱动的方法使得通过向现有 Kafka 主题添加更多消费者来轻松集成新的目标系统,而不会影响上游源数据库或 CDC 管道。 Kafka 中的 CDC 工作流以下是对 Kafka 中 CDC(变更数据捕获)工作流中每个步骤的更深入的检查,解释了每个阶段如何为系统之间的高效数据同步做出贡献: 1. 捕获在捕获阶段,像 Debezium 这样的 CDC 连接器会监视源数据库的事务日志以捕获数据更改。事务日志是记录数据库所做的每个事务和更改的专用日志,它提供了一种高效的方式来捕获行级更改,而无需直接查询数据库表。
在此阶段,CDC 连接器将每次更改捕获为一个事件,并将其转发到 Kafka Connect,准备发布到 Kafka 主题。 2. 发布在发布阶段,捕获的数据更改将作为事件发布到 Kafka 主题中。每次更改都基于一个 Kafka 消息,该消息包含:
Kafka 主题通常根据数据库和表命名和结构。例如,如果 stock 数据库的 inventory 表发生更改,它可能会发布到 dbserver1.Inventory.Merchandise 这样的主题。这种命名约定有助于有效组织和路由数据更改。通过这种结构,使用者可以订阅感兴趣的特定主题,减少不必要的处理。
3. 处理在处理阶段,Kafka Stream 应用程序或其他消费者应用程序会从 Kafka 主题中消费更改事件,并可以在将其传递到目标系统之前根据需要转换、丰富或聚合数据。这个处理层允许使用者实时地塑造和组织数据,从而实现更有效的用例。
Kafka Streams 是直接在 Kafka 中处理这些差异的流行工具。它是一个轻量级、分布式处理库,允许对数据进行实时处理和转换。此处理还可以包括连接来自多个主题的数据,这对于需要组合数据源的复杂工作流非常有用。 4. 交付在交付阶段,Kafka 消费者从 Kafka 主题读取处理过的数据,并将更改应用到目标系统。此阶段允许实时更新多个系统,确保它们与源数据库中的最新更改保持同步。
Kafka 的消费者组使这一阶段高度可伸缩。多个消费者可以从 Kafka 主题读取,每个消费者可以实现不同的转换、过滤器或目标。
每个消费者从当前偏移量读取,这是一个指向最后一个已处理消息的指针。这种方法使得新消费者可以轻松加入,或者失败的消费者可以重新启动并从最后一个成功偏移量赶上,从而确保无缝的数据同步。 使用 Kafka 进行 CDC 的优势![]()
Kafka 中 CDC 的用例
Kafka 中 CDC 的挑战和注意事项
结论Kafka 结合 CDC 实现了跨系统的实时、可靠和可伸缩的数据复制。通过将更改捕获并作为事件流式传输,它支持诸如数据仓库、搜索索引、微服务同步、审计日志记录等应用程序。 |
我们请求您订阅我们的新闻通讯以获取最新更新。