实时数据集成CDL

实时数据集成CDL是一种基于Kafka Connect框架的高效数据处理服务,以下是关于它的详细介绍:

基本原理

CDL能够从各种OLTP数据库中捕获数据库的Data Change事件,如数据的插入、更新、删除等操作,并将这些事件推送到Kafka消息队列中,再由sink connector将数据从Kafka推送到大数据生态系统中的目标端。

主要特点

  • 实时性强:可以实时捕获数据源的变化数据,入湖时效性在秒级或分钟级,一般小于15分钟,能快速将数据同步到目标端,满足实时数据分析和处理的需求。
  • 数据源丰富:目前支持的数据源包括MySQL、PostgreSQL、Oracle、Hudi、Kafka、ThirdParty-Kafka等,涵盖了常见的关系型数据库和消息队列系统。
  • 目标端多样:支持写入Kafka、Hudi、DWS以及ClickHouse等,可将数据灵活集成到不同的大数据存储和处理系统中。
  • 高可靠性和可扩展性:CDL服务中的CDLConnector是分布式模式,提供了高可靠和Rebalance的能力。如果某个CDLConnector实例异常或者节点宕机,任务会在其它节点重新平衡task的数量。

应用场景

  • 数据实时入湖:关系数据库有存量历史数据且实时产生新数据时,可使用CDL实现实时增量数据入湖。
  • 实时数据同步:在不同的数据库或数据存储系统之间进行实时数据同步,保证数据的一致性和及时性。
  • 实时数据分析:将实时捕获的数据直接推送至大数据分析平台,如Hadoop、Spark等,进行实时数据分析和挖掘,及时发现业务中的问题和机会。

核心组件

  • CDLConnector:具体执行数据抓取任务的实例,包含了Source Connector和Sink Connector 。Source Connector负责从数据源捕获Data Change事件,Sink Connector负责将数据从Kafka推送到目标端。
  • CDLService:负责管理和创建任务的实例,是多主模式,任意一个CDLService都可以进行业务操作。

工作机制

  1. 数据捕获(从数据源)
    • 监控数据库事务日志
      • 对于支持事务日志的数据源(如MySQL的binlog、Oracle的Redo Log等),CDL的Source Connector会实时监控这些日志。以MySQL为例,binlog记录了数据库中数据的所有更改操作,包括插入(INSERT)、更新(UPDATE)和删除(DELETE)。CDL的Source Connector会不断地读取binlog中的新条目,解析其中的数据变更事件。
      • 这些变更事件包含了足够的信息,如操作类型、表名、变更前后的数据行内容等。例如,当一个用户在电商系统中更新了订单状态,binlog中会记录订单表(假设为orders表)的更新事件,包括订单ID、新的状态值等信息。
    • 基于查询的捕获(对于部分数据源)
      • 对于一些不支持事务日志或者不方便通过事务日志获取变更的数据源,CDL可能会采用基于查询的方式。它会定期执行预定义的查询语句来检查数据的变化。这种方式相对效率较低,因为需要频繁地查询数据库,而且不能像事务日志监控那样实时地获取变更。不过在某些特定场景下,如简单的小型数据库且变更频率不高的情况下,这种方式也能满足需求。
  2. 数据传输到Kafka
    • 数据格式转换
      • 在将数据发送到Kafka之前,CDL会对从数据源捕获的数据进行格式转换。它会将数据转换为适合在Kafka消息队列中传输的格式,通常是JSON或者Avro格式。例如,如果从数据源捕获的数据是关系型数据库中的一行记录,CDL会将这行记录的各个字段提取出来,按照选定的格式进行封装。
      • 以JSON格式为例,一个简单的用户表(包含idnameage字段)更新事件可能会被转换为如下格式的JSON消息:{"operation": "UPDATE", "table": "users", "data": {"id": 1, "name": "new_name", "age": 30}},其中operation表示操作类型,table表示表名,data表示变更后的数据内容。
    • 消息发送到Kafka
      • 经过格式转换后的消息会被发送到Kafka消息队列的特定主题(Topic)中。Kafka会根据主题对消息进行分类存储。不同的数据源表或者不同类型的变更事件可以发送到不同的主题,方便后续的处理。
      • 例如,所有来自用户表(users表)的变更事件可以发送到名为users_changes的主题,而来自订单表(orders表)的变更事件发送到orders_changes的主题。这样,消费者(如数据处理应用程序或者其他数据集成组件)可以根据自己的需求订阅相应的主题来获取特定的数据变更消息。
  3. 从Kafka到目标端的数据推送(通过Sink Connector)
    • 目标端连接与认证
      • Sink Connector会建立与目标端系统(如Hudi、DWS、ClickHouse等)的连接。这可能涉及到各种认证机制,例如,如果目标端是一个安全的数据仓库,可能需要提供用户名和密码或者使用基于密钥的认证方式来建立连接。
    • 数据提取与转换(从Kafka到目标端格式)
      • Sink Connector从Kafka主题中读取消息,然后根据目标端的要求进行进一步的数据转换。例如,如果目标端是Hudi,它可能需要将Kafka消息中的数据按照Hudi的存储格式(如Parquet格式)进行重新组织。
      • 同时,还需要考虑数据的一致性和完整性。比如,在将数据写入目标端时,需要确保数据按照正确的顺序写入,避免出现数据不一致的情况。如果在Kafka中有一系列的更新操作消息,Sink Connector需要按照消息的顺序将这些更新正确地应用到目标端的数据存储中。
    • 数据写入目标端
      • 经过转换后的数据集最终被写入目标端系统。在写入过程中,还可能涉及到数据分区、索引创建等操作。以ClickHouse为例,Sink Connector可能会根据数据的某些特征(如时间戳)将数据写入到不同的分区中,以提高后续查询的性能。并且会在目标端创建适当的索引,方便快速检索数据。例如,为经常查询的字段创建二级索引,使得在进行数据分析时能够快速定位和提取所需的数据。
posted @ 2024-12-17 15:27  软件职业规划  阅读(110)  评论(0)    收藏  举报