PowerData

以下文章来源于数据微光 ,作者肖文黎

[

数据微光 .

数据微光,专注于分享 Apache Doris 的使用指南、实战经验与技术解读。无论新手还是资深用户,这里都有助你深入掌握 Doris 的实用内容。探索数据的微光,共同点亮技术之路!

](#)

Apache Doris 提供多维度数据摄入能力,除内置 Routine Load 及 Flink 支持读取 Kafka 写入 Doris 方案外,Doris Kafka Connector[^1] 作为 Kafka connect 生态体系的扩展组件,它不仅支持 Kafka 数据导入 Doris,更依托 Kafka Connect 的庞大生态实现以下特性[^2]:

丰富格式支持

  • 原生解析 Avro/Protobuf 等复杂格式。
  • 自动 Schema 注册与转换。
  • 二进制数据流高效处理优化。

多数据源异构集成

  • 关系型数据库:MySQL、Oracle、SQL Server、DB2、Informix 等
  • NoSQL 数据库:MongoDB、Cassandra 等
  • 消息队列系统:ActiveMQ、IBM MQ、RabbitMQ 等
  • 云数据仓库:Snowflake、Google BigQuery、Amazon Redshift 等

kafka-connect

kafka-connect

CDC 增量扩展

  • 支持解析 Debezium 产生的数据格式,实现变更数据捕获
  • 可作为 Doris Flink Connector CDC 功能的补充 (Flink CDC 当前不支持捕获 Informix,Spanner 等数据库)

本文中将简要介绍 Doris Kafka connector 的主要概念和应用实践。

Kafka Connect 简介 —— 数据流转的幕后英雄

Kafka Connect 是 Apache Kafka 生态系统的核心开源组件,其设计定位为标准化数据集成平台,通过统一的抽象接口实现异构系统间的高效数据流转。

作为可扩展的分布式架构,Kafka connect 通过插件化连接器(Connector)架构实现技术解耦,用户无需编码开发数据管道底层逻辑,仅需通过声明式配置即可完成端到端的数据同步 (如下图所示用户只需简单配置即可完成数据导入 Kafka 和 导出到 Doris)。这种低代码集成模式显著降低了技术门槛,使数据分析师和业务架构师能够聚焦于数据价值挖掘,而非陷入传输机制的实现细节。其松耦合特性体现在三个方面:

  1. 上下游系统通过 Kafka 实现缓冲解耦。
  2. 标准化接口设计使数据源与目标端的扩展互不影响,有效保障了系统演进的可维护性。
  3. Kafka Connect 还可以在数据通过时对其进行轻量级的转换,从而避免侵入源端系统的业务逻辑。

rest api

rest api

Kafka Connect 核心概念 —— 这才是“连接”之王

Kafka Connect 通常由以下几个部分组成:

  • 连接器(Connectors) —— 数据的超级搬运工:有两种类型,源连接器(Source connector)和目标连接器(Sink connector)。源连接器将数据库摄入 Kafka 主题,目标连接器将 Kafka 主题中的数据导出到其他系统。Doris Kafka connect 当前实现了 SinkConnector,只支持导入 Kafka topic 数据到 Doris 中。此外,Kafka 目前在 Confluent Hub 上提供了上百种 Connector,用户可以使用这些 Connector 以 Kafka 为中心构建任意系统之间的数据管道。
  • 任务(Tasks):由连接器协调,负责实际的数据复制工作。允许将单个作业分解为多个任务,提供内置的并行支持和可扩展的数据复制能力。
  • 工作进程(Workers):执行连接器和任务的进程,分为独立模式(Standalone workers)和分布式模式(Distributed workers)
  • 独立模式:单个进程负责执行所有的连接和任务,适合测试和开发阶段。
  • 分布式模式: 在分布式模式下,Connect 能够提供可扩展性和自动容错能力。通过使用相同的 group.id,你可以启动多个工作进程(workers),它们会自动协调并安排连接器(connectors)和任务(tasks)的执行,确保这些操作能够在所有可用的工作进程中高效进行。当有新的工作进程加入、某个工作进程被关闭,或者某个工作进程意外失败时,其余的工作进程会自动检测到这一变化,并迅速协调,将连接器和任务重新分配到更新后的可用工作进程集合中,从而确保整个系统的稳定运行和数据处理的连续性。该图展示 Kafka Connect 分布式模式架构[^3]。多个 Worker 进程并行,各 Worker 含不同 Connector 实例(如 Conn 1、Conn 2)。每个 Connector 实例拆分为多个 Task,各 Task 负责处理特定数据 Partitions,借此实现水平扩展与任务并行,展现高可扩展性与负载均衡特性。

  • 转换器(Converters) —— 数据的“变形金刚”:用于在 Connect 发送或接收数据的系统之间转换数据格式。常用的 Kafka Connect 有 JsonConverter,StringConverter,ByteArrayConverter。此外要使用 Apache Avro,Google Protobuf,Json Schema 序列化和反序列化数据则必须部署 schema registry 来管理 Avro 的 Schema 信息和版本(如下图所示[^4],Schema Registry 用来管理 schema), 常用的如开源的 Apicurio Registry 和 Confluent Schema Registry。

    Kafka client SerDes architecture

  • 转换(Transforms) —— 数据的“魔术师”:可以对单个消息进行简单修改和转换,多个转换可以链式配置在连接器中,常见的 transforms 如:Filter,ReplaceField 等[^5]。
  • 死信队列(Dead Letter Queue) —— 错误数据的“休息区”:在数据流处理系统中,可能会遇到因为各种原因(如格式错误、内容不符合要求等)导致的消息无法被正确处理的情况。死信队列(Dead-letter Queue,DLQ)是一种特殊类型的消息队列,它临时存储由于错误而导致软件系统无法处理的消息,仅适用于目标连接器(Sink Connector),工作过程如下图所示。

    f2282da1ce1248d3f0978ed7d196ec30

    通常 Kafka Connect 死信队列能够处理的错误如下表所示[^6]。死信队列通过允许用户根据故障类型设置重试策略、超时时间和其他参数来提供灵活性,确保对消息流进行更精细的控制,相关内容可参考有关Errors and Dead Letter Queues和Sink Connector Config。

    连接器生命周期阶段

    描述

    是否处理

    start

    当连接器首次启动时,它将执行所需的初始化操作,例如连接到数据存储。

    poll (for source connector)

    从源数据存储读取记录。

    convert

    向 Kafka 主题读取/写入数据,并对 JSON/Avro 等进行 序列化或反序列化。

    transform

    应用任何已配置的单条消息转换。

    put (for sink connector)

    将记录写入目标数据存储。

Kafka Connect 的安装部署 —— 一起搭建你的数据连接桥

本文默认已经安装了 Apache Kafka,如果没有安装,相关操作可以参考 Kafka 官方文档。Kafka Connect 支持两种启动模式:Standalone 和 Distributed

Standalone 模式 —— 我一个人也能搞定

在 Standalone 模式下,所有的配置都存储在 config/connect-standalone.properties 文件里。说白了,这个文件就像是你的一本作战手册,配置完了直接就可以出击。我们常用的配置项包括:

# broker地址 bootstrap.servers=<ip:host> # 偏移量存储文件位置 offset.storage.file.filename=./offset_data/offset.connect # 建议将 Kafka 的 max.poll.interval.ms 时间调大到 30 分钟以上,默认 5 分钟 # 避免 Stream Load 导入数据消费超时,消费者被踢出消费群组 max.poll.interval.ms=1800000 consumer.max.poll.interval.ms=1800000 offset.flush.interval.ms=10000 # 启用key和value的schema支持 # 用于JSON数据的结构验证 key.converter.schemas.enable=true value.converter.schemas.enable=true # 插件路径 plugin.path=./plugins # key和value的序列化配置 key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter

配置完成后,启动 Kafka Connect,只需一条命令,简简单单:

$KAFKA_HOME/bin/connecto-standalone.sh $KAFKA_HOME/bin/connecto-standalone.properties

Distributed 模式 —— 这是团队协作的力量

在 Distributed 模式下,Kafka Connect 的 Worker 节点“无所畏惧”。它将所有的状态信息(包括 offset、config 和 status 等)保存到 Kafka 里面,而不是本地。也就是说,即使某个节点挂了,其他节点也能从 Kafka 中的主题恢复,继续稳定工作!是不是很酷?

所以,如果你要在大规模、高可用性环境中部署,Distributed 模式绝对是你最佳选择。接下来,看看如何实现部署。

在实际应用中,Distributed 模式更适合大规模、高可用性的生产环境。因此,在本文中,关于 Doris Kafka Connect 的 实践主要以部署 Distributed 模式为准。

部署环境 —— 我们的超能力清单

组件

版本

部署节点

描述

kafka\_2.12-3.7

3.7.2

10.16.10.6

Kafka Broker,用于消息传递和存储。

OpenJdk

11

10.16.10.6, 172.21.16.12

Java 运行环境,用于运行 Kafka 和 Kafka Connect。

Kafka Connect Worker

3.7.2

10.16.10.6, 172.21.16.12

Kafka Connect 的分布式工作节点,用于数据集成。

Doris Kafka Connect

24.0.0

10.16.10.6, 172.21.16.12

用于将数据从 Kafka 同步到 Doris 的连接器。

Confluent Kafka Connect Avro Converter

7.8.0

10.16.10.6, 172.21.16.12

用于处理 Avro 格式数据的转换器。

Kafka Connect File

3.7.2

10.16.10.6, 172.21.16.12

用于从文件读取数据或将数据写入文件的连接器。

Confluent Kafka Connect Datagen

0.6.6

10.16.10.6, 172.21.16.12

用于生成测试数据的连接器。

Apache Doris

2.1.8

172.21.16.12

部署步骤 —— 构建你的 Kafka Connect 帝国

配置 connect-distributed.properties —— 打造个性化配置

在每台部署节点(比如 10.16.10.6 和 172.21.16.12)上配置 connect-distributed.properties 文件。这里以 10.16.10.6 为例,其他节点类似,只需修改 listeners 配置项。

# 基础配置 bootstrap.servers=<ip:port>        # Kafka broker地址 group.id=connect-cluster               # worker组ID key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter # 存储主题配置 config.storage.topic=connect-configs    # 配置存储主题 offset.storage.topic=connect-offsets    # offset存储主题 status.storage.topic=connect-status     # 状态存储主题 config.storage.replication.factor=1     # 配置主题副本数 offset.storage.replication.factor=1     # offset主题副本数 status.storage.replication.factor=1     # 状态主题副本数 # 工作线程配置 offset.flush.interval.ms=10000         # offset刷新间隔 plugin.path=./plugins  # 插件路径 # REST API配置 listeners=http://10.16.10.6:8083        # REST API监听地址

插件部署 —— 插件管理大师

将你需要的 Kafka Connect 插件下载并放到配置中指定的 plugin.path 目录下。这就像是把超级英雄的装备放进你的战衣口袋,随时可以取用。

  • 下载并解压 confluentinc-kafka-connect-datagen 和其他插件。
  • 将 doris-kafka-connector-24.0.0.jar 放在 plugins 目录。
  • 此外,如果 Kafka 的 lib 目录下已经包含了 connect-file 相关的 JAR 文件,您可以直接从 lib 目录中复制这些文件到 plugins 目录下,以确保 Kafka Connect 能够正确加载这些插件。

__dev_software_kafka_2.12-3.7.2

由于 Kafka Connect 可以使用多种的 Convert,transform,connector, 为避免各个 Connectors 之间的依赖冲突,Kafka Connect 提供了以下类隔离机制[^7]:

[!IMPORTANT]

  1. 子目录包含 JAR 及其依赖:将插件及其依赖的 JAR 文件放置在 plugin.path 配置路径下的子目录中。例如,confluentinc-kafka-connect 的两个目录。
  2. 包含插件及其依赖的 Uber-JAR:将插件及其所有依赖打包到一个单独的 JAR 文件中。例如,doris-kafka-connector-24.0.0.jar
  3. 包含插件及其依赖项类文件的目录:将插件及其依赖项的类文件直接放置在目录结构中,该目录结构与 Java 包结构相匹配。
启动 Kafka Connect Distributed —— 全员待命

完成以上操作后,在 172.21.16.12 以及 10.16.10.6 都执行以下指令即可启动 Kafka Connect:

[dev@VM-16-12-centos kafka_2.12-3.7.2]$ bin/connect-distributed.sh -daemon config/connect-distributed.properties [dev@VM-10-6-centos kafka_2.12-3.7.2]$ bin/connect-distributed.sh -daemon config/connect-distributed.properties

验证 Kafka Connect —— 看看你的超级英雄状态
  • 查看 Kafka Connect 版本,确保版本更新不掉队!

kafka_connect

  • 查看 Kafka Connect Cluster 加载的插件,保持战力全开!

connect_plugins

Doris Kafka Connect 导数奇妙冒险 🚀

JSON 新手村攻略:简单粗暴的导入法 👍(普通 Json 数据)

想要通过 Kafka 和 Doris 玩转数据流?让我们来一场轻松愉快的“导入之旅”!今天,我们通过 Doris Kafka Connector 从 Kafka 的 orders Topic 导入一些普通的 JSON 数据。既然你是新手,那就准备好,马上开搞!

1. Kafka 中的 JSON 数据长啥样?

假设你已经有了一个 Kafka topic(比如 orders),里面的消息格式如下:

{"order_id": "ORDER_0001", "product_id": "PROD_627", "amount": 576.99, "timestamp": "2025-02-07T09:00:36", "order_source": "Online Order"} {"order_id": "ORDER_0002", "product_id": "PROD_445", "amount": 579.99, "timestamp": "2025-02-07T09:00:36", "order_source": "Offline Order"} {"order_id": "ORDER_0003", "product_id": "PROD_718", "amount": 264.99, "timestamp": "2025-02-07T09:00:36", "order_source": "Offline Order"} {"order_id": "ORDER_0004", "product_id": "PROD_276", "amount": 552.99, "timestamp": "2025-02-07T09:00:36", "order_source": "Offline Order"}

看着像个普通的 JSON 数据?没错,就是这样!现在我们要把它们带到 Doris 中。

2. Doris 表结构——是时候建表啦

我们先来一发建表语句,准备好接收数据:

CREATE TABLE `orders` (   `order_id` varchar(20) NULL,   `product_id` varchar(20) NULL,   `amount` decimal(19,2) NULL,   `timestamp` datetime NULL ) ENGINE=OLAP UNIQUE KEY(`order_id`) DISTRIBUTED BY HASH(`order_id`) BUCKETS 3 PROPERTIES ( "replication_allocation" = "tag.location.default: 1" );

表建好啦!现在我们的 Doris 已经准备好接收 Kafka 中的 JSON 数据了。

3.开始导入——Kafka Connect 操作起来

现在,我们进入了导入的关键步骤。通过 Kafka Connect,我们可以轻松将 Kafka 中的消息导入到 Doris 中。以下是实现导入操作的具体命令:

rest_api_sink_dorisrest_api_sink_doris

参数解析--解锁配置项

以下是你需要知道的参数及其解释,确保你对每一项都了然于心:

参数名

默认值

必填

说明

name

-

Kafka Connect 应用名称,必须唯一。

connector.class

-

连接器类型,使用 Doris Kafka Sink Connector:org.apache.doris.kafka.connector.DorisSinkConnector

topics

-

要订阅的 Kafka Topic 列表,多个 Topic 用逗号分隔:topic1,topic2

doris.urls

-

Doris FE(Front End)连接地址,多个地址用逗号分隔:10.20.30.1,10.20.30.2

doris.http.port

-

Doris HTTP 协议端口,默认值是 8030

doris.query.port

-

Doris MySQL 协议端口,默认值是 9030

doris.user

-

用于连接 Doris 的用户名。

doris.password

-

用于连接 Doris 的密码。

doris.database

-

要写入的 Doris 数据库。如果有多个数据库,topic2table.map 需要配置具体库名称。

doris.topic2table.map

-

Kafka Topic 和 Doris 表之间的映射关系。多个 Topic 和表的映射格式:topic1:db1.tbl1

buffer.count.records

10000

每个 Kafka 分区在内存中缓冲的记录数,达到此数量后会刷新到 Doris。默认是 10000

buffer.flush.time

120

buffer 刷新时间间隔,单位为秒。默认值是 120 秒。

buffer.size.bytes

5000000 (5MB)

每个 Kafka 分区缓冲区的最大大小,单位是字节,默认值是 5MB

4. 验证导入状态——一切顺利进行

通过以下命令,你可以验证 Kafka Connect 的任务状态,看看是否一切顺利:

通过这条命令,你可以确认任务 在 10.16 以及 172 两个节点上运行的状态,确保数据正在顺利流入 Doris 中。

5. 查看 Doris 中的结果——数据入库成功

最后,查询 Doris 中的数据,看看是否如期而至:

image-20250207212814960

看,数据已经顺利导入 Doris 中啦!是不是感觉自己一秒从 Kafka 新手变成了数据流专家?

数据变形记:ETL 魔法师的转换咒语 ✨(transform 使用)

小栋是一家大型电商平台的数据开发工程师,最近收到了一项棘手的任务:根据用户对产品的评价进行情感分析和用户行为模式挖掘。问题是,这些评价数据形态千奇百怪——有文字、图片,甚至视频!新功能层出不穷,而传统的预定义存储表格式早已力不从心。

幸运的是,小栋最近接触到了 Doris 的 variant 数据类型,它能存储各种数据类型(比如整数、字符串、布尔值等)的复杂数据结构,而不需要提前在表中定义所有列。简直就是解决这类问题的神器!

1. Doris 表结构:大显身手的 Variant 类型

CREATE TABLE`orders_variant` ( `order_id`BIGINTNOTNULL AUTO_INCREMENT, `order_info` variant ) ENGINE=OLAP UNIQUEKEY(`order_id`) DISTRIBUTEDBYHASH(`order_id`) BUCKETS 3 PROPERTIES ( "replication_allocation" = "tag.location.default: 1" );

然而,当他看到如下格式的数据时,小栋的眉头又皱了起来:

{"order_id": "ORDER_0001", "product_id": "PROD_491", "amount": 119.99, "timestamp": "2025-02-07T14:00:16", "address": "Address_5168"} {"order_id": "ORDER_0002", "product_id": "PROD_109", "amount": 365.99, "timestamp": "2025-02-07T14:00:16", "address": "Address_8310", "userid": "User_8677", "email": "Email_3579@example.com"} {"order_id": "ORDER_0003", "product_id": "PROD_417", "amount": 275.99, "timestamp": "2025-02-07T14:00:16", "userid": "User_1350"} {"order_id": "ORDER_0004", "product_id": "PROD_612", "amount": 220.99, "timestamp": "2025-02-07T14:00:16", "address": "Address_1056", "email": "Email_8720@example.com"} {"order_id": "ORDER_0005", "product_id": "PROD_300", "amount": 709.99, "timestamp": "2025-02-07T14:00:16", "address": "Address_6146"}

问题是: 小栋希望能够在导入 Doris 时不改变这些原始数据格式,但又想将这些 JSON 字符串重新组合成一个单独的属性(例如 order_info)。这样,他就能充分利用 Doris 的 Variant 数据类型,确保数据处理既高效又灵活。

正当小栋愁眉苦脸时,他的好朋友小梁笑着走过来说:“别担心,这事儿交给我,Kafka Connect 的 HoistField tranforms 算子就能搞定!”

小栋眼前一亮,原来小梁指的是 Kafka Connect 中的一个非常实用的转换器,它能将原本平铺的数据封装成一个单独的字段,从而便于后续的数据处理。

2. 使用 HoistField 转换器,轻松搞定数据重组

小栋按照小梁的建议,使用了 Kafka Connect 的 HoistField transform。在数据导入 Doris 之前,它会将每条记录的各个字段包装成一个 order_info 属性。以下是前后数据的变化:

处理前的数据:

{   "order_id": "ORDER_0001",   "product_id": "PROD_491",   "amount": 119.99,   "timestamp": "2025-02-07T14:00:16",   "address": "Address_5168" }

处理后的数据:

{   "order_info": {     "order_id": "ORDER_0001",     "product_id": "PROD_491",     "amount": 119.99,     "timestamp": "2025-02-07T14:00:16",     "address": "Address_5168"   } }

3. 配置 Kafka Connect Rest API

小栋配置了 Kafka Connect 以将处理后的数据导入 Doris,配置如下:

curl -i http://10.16.10.6:8083/connectors -H "Content-Type: application/json" -X POST -d '{ "name":"kf_orders_variant_sink_doris", "config":{ "connector.class":"org.apache.doris.kafka.connector.DorisSinkConnector", "tasks.max":"2", "topics":"orders_variant", "doris.topic2table.map": "orders_variant:orders_variant", "buffer.count.records":"10000", "buffer.flush.time":"11", "buffer.size.bytes":"5000000", "doris.urls":"172.21.16.12", "doris.user":"root", "doris.password":"", "doris.http.port":"38230", "doris.query.port":"39230", "doris.database":"testdb", "transforms": "HoistField", "transforms.HoistField.type": "org.apache.kafka.connect.transforms.HoistField$Value", "transforms.HoistField.field": "order_info", "key.converter":"org.apache.kafka.connect.storage.StringConverter", "value.converter":"org.apache.kafka.connect.json.JsonConverter", "value.converter.schemas.enable": "false" } }'

导入 Doris 后的结果:一切顺利,小栋微笑着看着数据。

最终,经过 Doris Kafka Connector 的神奇处理,数据成功导入 Doris,数据根据 orders_variant JSON 键及其对应的值存储为列和动态子列,并且格式完美符合要求。以下是导入后的结果:

Doris 导入结果

Doris 导入结果

错误回收站:给迷路数据建爱心小屋 💌(死信队列)

Doris Kafka Connector 支持多种数据序列化格式。然而,当上游的序列化数据格式与下游格式不匹配时,任务会立即停止,你不得不手动处理并重启。

不过,别慌!我们可以通过 Kafka Connect 死信队列(Dead Letter Queue, DLQ) 来优雅应对。当遇到数据序列化错误时,死信队列 Topic 可以存储相关错误信息,方便后续排查。同时,借助 Topic Header,还能快速定位错误原因。接下来,让我们愉快地体验一下死信队列的实际应用。。

1. 错误数据示例

当你期望从如下error_orders_json topic 中导入 Json 数据 到 Doris ,然而有可能不小心插入脏数据,如下在该 topic 中插入一条 “invalid-json”的无效 Json 数据。

echo "invalid-json" | ./bin/kafka-console-producer.sh \   --bootstrap-server 10.16.10.6:29092 \   --topic error_orders_json

2. Kafka REST API 配置死信队列

为了避免任务因单条错误数据而终止,我们可以在 Kafka Connector 配置中添加死信队列参数:

curl -i http://10.16.10.6:8083/connectors -H "Content-Type: application/json" -X POST -d '{   "name":"kf-error-json-sink-doris",   "config":{     "connector.class":"org.apache.doris.kafka.connector.DorisSinkConnector",     "tasks.max":"2",     "topics":"error_orders_json",     "doris.topic2table.map": "error_orders_json:orders_dlq",     "buffer.count.records":"10000",     "buffer.flush.time":"11",     "buffer.size.bytes":"5000000",     "doris.urls":"172.21.16.12",     "doris.user":"root",     "doris.password":"",     "doris.http.port":"38230",     "doris.query.port":"39230",     "doris.database":"testdb",     "key.converter":"org.apache.kafka.connect.storage.StringConverter",     "value.converter":"org.apache.kafka.connect.json.JsonConverter",     "value.converter.schemas.enable": "false",     "errors.tolerance":"all",     "errors.deadletterqueue.topic.name":"orders_dlq",     "errors.deadletterqueue.context.headers.enable":true,     "errors.deadletterqueue.topic.replication.factor":"1",    "errors.log.enable":true   } }'

参数解释:

参数

说明

errors.tolerance

设定消息处理的容错级别。"all" 允许跳过错误消息,"none" 则遇到错误立即停止处理。

errors.deadletterqueue.topic.name

指定死信队列的 Topic 名称,失败的消息会被发送到该 Topic。

errors.deadletterqueue.context.headers.enable

是否在死信消息中包含上下文信息,如原始 Topic、分区、偏移量和错误信息等。

errors.deadletterqueue.topic.replication.factor

设置死信队列的副本因子,影响数据的高可用性。

errors.log.enable

是否启用错误日志记录,方便后续排查问题。

3. 如何消费死信队列中的错误消息

错误消息会被存储在 orders_dlq 这个 Topic 中,我们可以使用如下命令查看详细的错误信息:

./bin/kafka-console-consumer.sh \ --bootstrap-server 10.16.10.6:29092 \ --topic orders_dlq --from-beginning \ --property print.key=true \ --property print.value=true \ --property print.headers=true

在 orders_dlq 中,我们可以发现 invalid-json-1 这条消息因格式错误被丢入死信队列:

dlq_error_info

dlq\_error\_info

死信队列就像是数据管道里的“迷路儿童保护站”,让错误数据有处可去,不至于影响整体系统的稳定性。通过合理配置 Kafka Connect,我们可以将错误数据集中管理,并在合适的时机进行补救。希望这个小功能能帮到你,让数据处理更加丝滑!🚀

  • 数据变形记:Schema 变更、格式不匹配,数据直接“变异”,写不进去!
  • 目标系统耍脾气:网络抽风、存储爆满,数据堵在门口进不去!
  • 脏数据捣乱:业务逻辑出错、恶意数据作妖,让系统措手不及!

想让数据流转更稳妥?死信队列安排上!😎

文章总结

本文深入解析了 Doris Kafka Connector 的基本构成工作原理部署方式,并通过三个典型实践场景——普通 JSON 数据导入Transform 算子使用 和 死信队列,帮助用户快速理解其在数据流转中的核心价值。

下期预告

下期我们将探讨:如何利用 Doris Kafka Connect 实时导入关系数据库数据,并支持 Avro、Protobuf、ByteArray 等多种数据格式,以及一流多表的数据导入形式。敬请期待,我们将深入剖析数据流转的技术细节与实践经验,助你精通 Apache Doris 数据导入的核心要点。


文章寄语

感谢这个时代,它让我们见证了智能化的飞速发展。

AI 时代,数据驱动创新,连接万物。

拥抱未来,在新兴技术的浪潮中,做那个无法被定义的自己。


引用

[^1]: Doris Kafka Connector[1]

[^2]: Introduction to Kafka Connect[2]

[^3]: Distributed workers

[^4]: Apicurio Registry

[^5]: Kafka Connect Single Message Transform[3]

[^6]: Kafka Connect Deep Dive – Error Handling and Dead Letter Queues

[^7]: KIP-146 - Classloading Isolation in Connect

[^8]: What is Kafka Dead Letter Queue?


关于作者

vinlee_logo

技术爱好者 | 数据生态研发工程师 | 红军球迷

Apache Doris Active ContributorApache Flink CDC Contributor

参考资料

[1] 

Doris Kafka Connector: https://doris.apache.org/zh-C...

[2] 

Introduction to Kafka Connect | Confluent Documentation: https://developer.confluent.i...

[3] 

Kafka Connect Single Message Transform Reference for Confluent Cloud or Confluent Platform: https://docs.confluent.io/kaf...

往期推荐

[

【建议收藏】Apache Doris 常用命令速查手册

](http://mp.weixin.qq.com/s?__b...

[

从源码到运行:深入解析 Apache Doris 的编译与 Debug 流程

](http://mp.weixin.qq.com/s?__b...

[

成为 Apache 顶级项目贡献者之路:Apache Doris 的语法迁移攻略

](http://mp.weixin.qq.com/s?__b...

[

【Apache Doris】数据副本问题排查指南

](http://mp.weixin.qq.com/s?__b...

[

「FE 倒下了,但我挺住了」—— Doris FE 挂机应急指南

](http://mp.weixin.qq.com/s?__b...

数据微光 专注分享 Apache Doris 的最佳实践、问题解决技巧、学习资源和实用案例,致力于为开发者和技术爱好者提供高质量内容支持和持续学习动力。

📚 特别福利 | 数据微光知识库内含Apache Doris丰富的 学习资料、实战课程、白皮书、行业报告、技术指南,帮助快速掌握数据库核心技能!

📘 领取方式: 关注 “数据微光” 公众号 扫描下方二维码,备注【Doris】即可免费获取! 💻 让我们携手点亮技术微光,共同探索 Doris 的无限可能!

关于社区

Apache Doris

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极易易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发发点查询场景,也能支持高吞吐的复杂分析场景。

如果您对 Apache Doris 感兴趣,可以通过以下入口访问官方网站、社区论坛、GitHub 和 dev 邮件组:

可以加 作者微信 (hhj\_0530) 直接进 Doris 官方社区群。

PowerData

PowerData 是由一群数据从业人员,因为热爱凝聚在一起,以开源精神为基础,组成的数据开源社区。

社区整理了一份每日一题汇总及社区分享 PPT,内容涵盖大数据组件、编程语言、数据结构与算法、企业真实面试题等各个领域,帮助您提升自我,成功上岸。

可以加 作者微信 (hhj\_0530) 直接进 PowerData 官方社区群。


PowerData
1 声望2 粉丝

PowerData社区官方思否账号