独立版 Debezium

Debezium 管理平台

qianmoQqianmoQ· 更新于 2026-09-28· 阅读 74 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Debezium 管理平台

该项目目前处于孵化阶段。具体的语义、配置选项等可能会根据我们收到的反馈而发生变化。

Debezium 管理平台旨在以高度规范化的方式简化 Debezium 在各种环境中的部署。为实现这一目标,该平台采用以数据为中心的视角来管理 Debezium 组件。

实现该平台是 Debezium Server 的自然演进。过去的版本提供了 Debezium operator 以简化 Kubernetes 环境中的操作。随着管理平台的引入,Debezium 现在提供了一个高级抽象层,能够在利用 Debezium Server 的同时,在不同环境中部署你的数据管道。

基本概念

你可以使用 Debezium 管理平台在你的环境中配置和管理以下组件:

Source(源)

指定你希望 Debezium 从中读取数据的数据库。

Destination(目标)

指定你希望 Debezium 将数据发送到的接收端目标。

Connection(连接)

指定 Debezium 与数据源或目标进行通信所需的连接细节。

Transform(转换)

指定 Debezium 在数据事件流经管道时如何对其进行转换。

Pipeline(管道)

指定数据如何从源流向目标,并在传输过程中进行转换。每条管道由一个源、一个或多个转换和一个目标组成。

定义管道后,将根据你的平台配置对其进行部署。

每条管道映射到一个 Debezium Server 实例。对于 Kubernetes 环境(目前唯一支持的环境),该服务器实例对应于一个 DebeziumServer 自定义资源。

Debezium 平台

架构

该平台由以下组件组成:

Conductor(指挥器)

后端组件,提供一组 API 来编排和控制 Debezium 部署。

Stage(舞台)

前端组件,提供用户界面以便与 Conductor 进行交互。

Conductor 组件本身由以下子组件组成:

API Server(API 服务器)

主要入口点。提供一组 API 用于与平台交互。

Watcher(监视器)

负责与部署环境进行实际通信的组件(例如,Kubernetes 集群中的 Debezium Operator)。

Debezium 平台架构

安装

目前,唯一支持的环境是 Kubernetes。

前提条件

  • Helm
  • 具有 ingress 控制器的 Kubernetes 集群

安装通过 Helm chart 提供。

操作步骤

  1. 输入以下命令以添加 Debezium charts 仓库:
helm repo add debezium https://charts.debezium.io
  1. 输入以下命令之一,以安装你想要的平台的最新稳定版本:

    helm install debezium-platform debezium/debezium-platform --set database.enabled=true --set domain.name=platform.debezium.io

或者,要使用 OCI 工件安装该平台,请输入以下命令:

helm install debezium-platform --set database.enabled=true --set domain.name=platform.debezium.io oci://quay.io/debezium-charts/debezium-platform

domain.name 是唯一必需的属性;它会作为 Ingress 定义中的 host 使用。

在前面的示例中,使用的是 database.enabled 属性。该属性通过自动部署 conductor 服务所需的 PostgreSQL 数据库,简化了测试环境中的部署。在生产环境中部署时,请不要启用 PostgreSQL 数据库的自动部署,而应通过设置 database.name、database.host 以及连接数据库所需的其他属性来指定已有的数据库实例。详情请参见下表。

下表列出了该 Chart 的所有属性:

名称  描述  默认值

Domain

domain.name

用作 ingress 主机的域名。

""

domain.url

用作 ingress 主机的域名(已废弃)。请改用 domain.name。

""

Stage

stage.image

Helm 用于部署 stage(UI)Pod 的镜像。

quay.io/debezium/platform-stage:<release_tag>

stage.imagePullPolicy

stage 容器的镜像拉取策略。如果为空,则默认为 IfNotPresent。

IfNotPresent

Conductor

conductor.image

Helm 用于部署 conductor Pod 的镜像。

quay.io/debezium/platform-conductor:<release_tag>

conductor.imagePullPolicy

conductor 容器的镜像拉取策略。如果为空,则默认为 IfNotPresent。

IfNotPresent

conductor.offset.existingConfigMap

存储 conductor 偏移量的 ConfigMap 名称。如果未指定该值,Helm 会自动创建一个 ConfigMap。

""

conductor.descriptors.official.enabled

启用官方 Debezium 描述符,这些描述符会在启动时通过 ORAS 下载。

true

conductor.descriptors.official.registry

托管描述符制品的 OCI 注册表。

quay.io

conductor.descriptors.official.image

描述符 OCI 制品的镜像名称。

debezium/debezium-descriptors

conductor.descriptors.official.tag

描述符 OCI 制品的镜像标签。

nightly

conductor.descriptors.official.mountPath

容器内下载描述符的路径。

/opt/descriptors

conductor.extraVolumes

要添加到 conductor 部署中的额外卷。

[]

conductor.extraVolumeMounts

要添加到 conductor 容器中的额外卷挂载。

[]

Server

server.image

由流水线创建的 Debezium Server 实例所使用的镜像。如果为空,则由 operator 的 ServerImageProvider 决定镜像。

""

Ingress

ingress.enabled

为 conductor 和 stage 启用 ingress 资源。

true

ingress.className

可选的 ingress 类名。

""

ingress.annotations

额外的 ingress 注解。

{}

ingress.tls.enabled

在 ingress 上启用 TLS 部分。

false

ingress.tls.secretName

启用 TLS 时使用的 Secret 名称。

""

数据库

database.enabled

启用 Helm 安装 PostgreSQL。

false

database.name

希望平台存储数据的现有数据库的名称。

postgres

database.host

希望平台使用的数据库的主机。

postgres

database.auth.existingSecret

存储平台用于向数据库进行身份验证的 username 和 password 的 Secret 名称。如果未指定值,Helm 会根据你在 database.auth.username 和 database.auth.password 属性中提供的凭据自动创建一个 Secret。

如果为此属性提供了值,请勿设置 database.auth.username 或 database.auth.password。

""

database.auth.username

平台连接数据库所使用的用户名。

user

database.auth.password

由 database.auth.username 指定的用户的密码。

password

偏移量存储

offset.reusePlatformDatabase

指定管道是否使用已配置的平台数据库来存储偏移量。要将管道配置为使用其他专用数据库来存储偏移量,请将该值设置为 false。

true

offset.database.name

平台用于存储偏移量的数据库的名称。

postgres

offset.database.host

平台存储偏移量所在数据库的主机。

postgres

offset.database.port

平台连接其存储偏移量的数据库时所使用的端口。

5432

offset.database.auth.existingSecret

存储平台用于向存储偏移量的数据库进行身份验证的 username 和 password 的 Secret 名称。如果未指定值,平台将使用 offset.database.auth.username 和 offset.database.auth.password 属性的值向数据库进行身份验证。

如果提供了 Secret 的名称,请勿设置 offset.database.auth.username 和 offset.database.auth.password 属性。

""

offset.database.auth.username

平台连接偏移量数据库所使用的用户名。

user

offset.database.auth.password

由 offset.database.auth.username 指定的偏移量数据库用户的密码。

password

Schema 历史记录存储

schemaHistory.reusePlatformDatabase

指定管道是否使用已配置的平台数据库来存储 schema 历史记录。要将管道配置为使用其他专用数据库来存储 schema 历史记录,请将该值设置为 false。

true

schemaHistory.database.name

平台存储 schema 历史记录的专用数据库的名称。

postgres

schemaHistory.database.host

平台存储 schema 历史记录的专用数据库的主机。

postgres

schemaHistory.database.port

平台连接其存储 schema 历史记录的专用数据库时所使用的端口。

5432

schemaHistory.database.auth.existingSecret

用于存储平台与保存架构历史的数据库进行身份验证时所用 username 和 password 的 Secret 名称。如果未指定该值,平台将使用 schemaHistory.database.auth.username 和 schemaHistory.database.auth.password 属性的值来完成与该数据库的身份验证。

如果你提供了 Secret 的名称,请不要设置 schemaHistory.database.auth.username 和 schemaHistory.database.auth.password 属性。

""

schemaHistory.database.auth.username

平台连接架构历史数据库所使用的用户名。

user

schemaHistory.database.auth.password

由 schemaHistory.database.auth.username 属性指定的架构历史数据库用户的密码。

password

Debezium Operator

debezium-operator.enabled

启用该 Chart 对 Debezium Operator 的安装。

true

Pipeline

pipeline.labels

应用于流水线创建的 DebeziumServer 自定义资源的标签映射。这些标签会与内部的 debezium.io/conductor-id 标签合并。

{}

Monitoring

monitoring.otel.enabled

启用 OpenTelemetry 监控基础设施。需要已安装 OpenTelemetry Operator。有关更多信息,请参阅启用监控。

false

monitoring.otel.collector.image

OpenTelemetry Collector 镜像。必须包含 Prometheus 导出器。如果为空,则使用 operator 的默认镜像。

""

monitoring.otel.collector.replicas

OpenTelemetry Collector 副本数量。

1

monitoring.otel.collector.receivers.grpc.port

OTLP gRPC 接收器使用的端口。

4317

monitoring.otel.collector.receivers.http.port

OTLP HTTP 接收器使用的端口。

4318

monitoring.otel.collector.processors.batch.timeout

批处理器的刷新超时时间。

5s

monitoring.otel.collector.processors.batch.sendBatchSize

每批次指标的最大数量。

512

monitoring.otel.collector.exporters.prometheus.port

Prometheus 导出器监听的端口。

8889

monitoring.otel.collector.exporters.prometheus.resourceToTelemetryConversion

将 OpenTelemetry 资源属性转换为 Prometheus 标签。

true

monitoring.otel.collector.exporters.prometheus.constLabels

添加到所有导出指标的静态标签。

{platform: debezium}

monitoring.panels.additionalPanelsPath

包含额外监控面板的 YAML 文件路径。这些面板会与内置默认面板合并;ID 相同的面板将覆盖内置面板。有关更多信息,请参阅自定义监控面板。

""

monitoring.prometheus.url

Conductor 用于查询指标的 Prometheus 实例的 URL。当 monitoring.otel.enabled 为 true 时为必填项。

""

monitoring.prometheus.serviceMonitor.enabled

创建 ServiceMonitor 以实现 Prometheus 自动抓取。需要已安装 Prometheus Operator。

true

monitoring.prometheus.serviceMonitor.scrapeInterval

Prometheus 抓取间隔。

15s

monitoring.prometheus.serviceMonitor.labels

用于 Prometheus Operator ServiceMonitor 发现的标签。必须与你的 Prometheus 实例中配置的 serviceMonitorSelector 标签相匹配。

{prometheus: kube-prometheus}

其他

env

传递给 conductor 的环境变量列表。

[]

使用平台

你可以使用平台 UI 执行多种不同的任务。

定义连接

使用 UI 的 Connection 部分来定义到承载源数据的数据库以及到数据接收端的连接。你可以将 Debezium 支持的任何数据库配置为数据源或目标接收端。你创建的连接可以被多个源和目标共享。

创建连接

你可以为连接目录中可用的任何源或目标创建连接。连接目录列出了 Debezium 可以读取的源数据库,以及 Debezium Server 可以写入的接收端目标。

操作步骤

  1. 在平台 UI 中,打开 Connection 菜单。
  2. 点击 Add connection 以打开 Connection catalog 页面。
  3. 点击 Source 或 Destination 按连接类型筛选列表,然后选择所需的连接卡片。
  4. 在配置表单中,指定连接名称和预定义属性,并在 Additional properties 部分指定任何自定义属性。
  5. 点击 Verify 以验证配置,并确保 Debezium 能够与数据库源或接收端建立连接。
  6. 验证连接后,点击 Create connection。

删除连接

前提条件

  • 你要删除的连接未在任何源或目标中使用。

操作步骤

  • 在平台 UI 中,打开 Connection 菜单,点击要删除的连接对应的 Action 菜单,然后点击 Delete。

如果你尝试删除正在使用中的连接,将会出错。如果操作返回错误,请确认该连接已不再被任何源或目标使用,然后重新执行删除操作。

编辑连接

要编辑连接,请在平台 UI 中打开 Connection 菜单,点击要编辑的连接对应的 Action 菜单,然后点击 Edit。

定义源

使用 UI 的 Source 部分指定承载你数据的数据库。你可以将 Debezium 支持的任何数据库配置为源。你创建的源可以被多个管道共享。对源的更改会反映在使用该源的所有管道中。

创建源

你可以使用以下任一编辑器来配置源:

表单编辑器

可用于指定源的名称、描述和连接,以及属性列表。对于连接,您可以选择预定义的源连接,也可以点击创建连接来新建连接。有关详细信息,请参阅创建连接。有关连接器可用属性的完整列表,请参阅连接器文档。

智能编辑器

提供了一种以 JSON 格式定义源配置的方式。您也可以使用该编辑器,将为 Kafka Connect 或 Debezium Server 环境中的 Debezium 连接器设计的源配置重新格式化,以便在平台中使用。编辑器会自动将平台要求的 JSON 格式应用到指定的源配置上。

Debezium platform - Create source toolbar

您可以基于现有的 Debezium 配置创建源配置,例如 Kafka Connect 的 Debezium 连接器配置或 Debezium Server 配置。

在源目录页面上,从工具栏中选择使用智能编辑器创建。

创建、编辑和移除源

使用智能编辑器配置源

您可以使用智能编辑器指定定义源配置的 JSON。您可以直接在编辑器中输入并编辑 JSON,也可以将外部来源的 JSON 粘贴到编辑器中。您在 Debezium 管理平台中用于配置数据源的 JSON,与 Kafka Connect 或 Debezium Server 上定义 Debezium 连接器配置的 config 部分中的 JSON 几乎完全相同。

要复用现有的 Debezium 连接器配置,您可以上传包含该配置的文件,也可以将配置复制并粘贴到智能编辑器中。Stage UI 会智能识别您所提供配置的格式,并提示您将其重新格式化以便平台使用。

例如,考虑以下用于指定 Kafka Connect 上 Debezium MySQL 连接器配置的 JSON:

{
  "name": "inventory-connector",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "tasks.max": "1",
    "database.hostname": "mysql",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "dbz",
    "database.server.id": "184054",
    "topic.prefix": "dbserver1",
    "database.include.list": "inventory"
  }
}

将此 JSON 添加到智能编辑器后,它会检测到该 JSON 是为 Kafka Connect 格式化的,并显示一条警告提示。

Debezium UI 智能编辑器 - Kafka Connect

智能编辑器的工具栏随后会显示一个自动格式化选项,如上图所示。自动格式化选项会将提供的 JSON 自动转换为所需的 Debezium Management Platform JSON 格式。

下图展示了使用自动格式化选项转换 MySQL 数据源配置后得到的 JSON。你也可以编辑该 JSON,更新 name 字段的值或填写 description 字段。

Debezium 平台智能编辑器 - 数据源

以下示例展示了更新 name 和 description 字段后的平台配置 JSON。

{
    "name": "my-source",
    "description": "This is my first source",
    "type": "io.debezium.connector.mysql.MySqlConnector",
    "schema": "schema123",
    "vaults": [],
    "config": {
        "database.hostname": "mysql",
        "database.port": "3306",
        "database.user": "debezium",
        "database.password": "dbz",
        "database.server.id": "184054",
        "topic.prefix": "dbserver1",
        "database.include.list": "inventory"
    }
}

同样地,你可以在智能编辑器中打开 Debezium Server 配置,以自动提取源配置并重新格式化,供 Debezium 平台使用。有关更多信息,请参阅使用智能编辑器配置目标。

删除源

前提条件

  • 你要删除的源未在任何管道中使用。

操作步骤

  • 在平台界面中,打开源菜单,点击要删除的源对应的操作菜单,然后点击删除。

如果尝试删除正在使用的源,将会产生错误。如果操作返回错误,请确认该源未在任何管道中使用,然后重新执行删除操作。

编辑源

要编辑源,请在平台界面中打开源菜单,点击要编辑的源对应的操作菜单,然后点击编辑。

编辑源会影响使用该源的所有管道。在提交更改之前,系统会弹出消息,提示使用该源的管道将会重启。

编辑源确认模态框

启用信号传递

前提条件

  • 你拥有在源数据库上创建表的足够访问权限。

Debezium 信号机制提供了一种修改连接器行为或触发一次性操作的方式。在 Debezium 管理平台中,信号操作通过源连接器的 SourceSignalChannel 执行。有关信号传递的更多信息,请参阅启用源信号通道。

要为数据管道启用信号传递,你必须在源连接器配置中设置信号传递。

编辑源确认模态框

你在源数据库上创建的信号数据集合专门用于与 Debezium 进行通信。每个连接器实例必须拥有唯一的信号数据集合。

编辑源确认模态框

  1. 在对话框中,提供信号集合名称,并运行提供的 DDL 查询,在源数据库中创建信号数据集合。
  2. 点击验证,检查信号数据集合是否已正确设置。
  3. 点击完成,保存信号集合。

信号设置完成

定义目标

使用界面的**目标(Destination)**部分来指定平台将源数据发送到的数据接收端(sink)。所有 Debezium Server 接收器均可作为目标使用。创建的目标可以在不同管道之间共享,这意味着对目标的任何更改都会反映在使用该目标的每个管道中。

创建、编辑和删除目标

创建目标

使用界面的目标部分来配置平台发送数据的接收端目标。你可以使用以下任一编辑器来配置目标:

表单编辑器

允许你指定目标的名称、描述和连接,以及属性列表。对于连接,你可以选择预定义的源连接,或者点击创建连接来新建连接。有关更多信息,请参阅创建连接。有关接收器连接器可用属性的完整列表,请参阅连接器文档。

智能编辑器

允许你以 JSON 定义接收器配置。你也可以提取 Debezium Server 接收器配置,并将其自动重新格式化以在本平台中使用。

Debezium 平台 - 创建接收器工具栏

要从现有的 Debezium Server 配置创建接收器目标,请在目标目录页面点击使用智能编辑器创建。

使用智能编辑器配置目标

你可以使用智能编辑器来指定定义源配置的 JSON。你可以直接在编辑器中输入和编辑 JSON,也可以从外部源将 JSON 粘贴到编辑器中。除了少数细微差别之外,在智能编辑器中用于配置目标的 JSON 与用于定义 Debezium Server sink 的配置几乎完全相同。

你可以通过上传或粘贴到智能编辑器中,直接使用 Debezium Server 配置。阶段(Stage)界面会智能识别配置类型,并提示你将其重新格式化以供平台使用。编辑器会自动提取 Debezium Server 接收器配置,并将其转换为平台支持的 JSON 格式。

例如,考虑 Debezium Server 配置中的以下属性:

# ...

debezium.sink.type=pubsub
debezium.sink.pubsub.project.id=debezium-tutorial-local
debezium.sink.pubsub.address=pubsub:8085
debezium.source.connector.class=io.debezium.connector.mysql.MySqlConnector
debezium.source.database.hostname=mysql
debezium.source.database.server.id=223344
debezium.source.database.port=3306
debezium.source.database.user=debezium
debezium.source.database.password=dbz
debezium.source.schema.history.internal=io.debezium.storage.file.history.FileSchemaHistory
debezium.source.schema.history.internal.file.filename=data/schema.dat
debezium.source.offset.storage.file.filename=data/offsets.dat
debezium.source.offset.flush.interval.ms=0
debezium.source.topic.prefix=tutorial
debezium.source.database.include.list=inventory
debezium.source.table.include.list=inventory.customers

# ..

当你把前面的属性文件添加到智能编辑器中时,它会确认已将该文件识别为 Debezium Server 配置。

Debezium UI 智能编辑器 - Server

智能编辑器工具栏会显示一个**自动格式化(Auto Format)**选项,如上图所示。选择此选项可自动提取 sink 配置,并将 sink 属性转换为 Debezium 平台支持的 JSON 格式。

下图显示了编辑器自动格式化你所添加的发布-订阅 sink 属性后生成的 JSON。编辑该 JSON 以更新 name 字段的值,并可选择填写 description 字段。

Debezium 平台智能编辑器 - Sink

更新名称和描述后,得到的 JSON 如下:

{
  "name": "my-sink",
  "description": "This is my first sink",
  "type": "pubsub",
  "schema": "schema123",
  "vaults": [],
  "config": {
    "debezium.sink.pubsub.project.id": "debezium-tutorial-local",
    "debezium.sink.pubsub.address": "pubsub:8085"
  }
}

删除目标

前提条件

  • 要删除的接收器未在任何管道中使用。

操作步骤

  • 在平台界面中,打开 Destination 菜单,点击要删除的目标对应的 Action 菜单,然后点击 Delete。

如果您尝试删除正在使用中的目标,则会出错。如果操作返回错误,请确认该目标已不再被任何管道使用,然后重新执行删除操作。

编辑目标

要编辑目标,请转到 Destination 菜单,然后点击要编辑的目标对应的 action 菜单,再点击 Edit。

编辑目标会影响使用它的所有管道。完成更改后,系统会显示一条确认消息,告知您使用该目标的管道将会重启。

管理转换

使用平台界面的 Transforms 部分来管理您希望在数据管道中使用的转换。

目前,平台支持 Debezium 提供的所有单消息转换(SMT),以及任何 Kafka Connect 转换。

转换在各管道之间共享。当您修改某个转换时,更改会反映到使用该转换的所有管道中。

创建、编辑和移除转换

创建转换

使用平台界面的 Transforms 部分来指定、配置和管理单消息转换。

您可以使用以下任一编辑器来配置转换:

表单编辑器

允许您指定转换的名称、类型和描述。您还可以设置与该转换类型相关的其他配置选项。

此外,如果您只想将转换应用于满足特定条件的记录,可以指定一个谓词。您可以从列表中选择谓词,并设置其属性。

智能编辑器

允许您使用 JSON 来配置转换。

使用智能编辑器配置转换

您可以使用 Smart Editor 来指定定义转换配置的 JSON。您可以直接在编辑器中输入和编辑 JSON,也可以从外部来源将 JSON 粘贴到编辑器中。

在智能编辑器中配置转换的格式与 Debezium 用于配置转换的 Kafka Connect 格式不同,但您可以在两种格式之间轻松转换。

通常,转换配置中的条目以 transforms.<transform_name> 为前缀,其中 <transform_name 是分配给该转换的名称。

例如,在 Debezium 中,以下配置与 unwrap(ExtractNewRecordState)转换一起使用:

# ...

transforms=unwrap
transforms.unwrap.type=io.debezium.transforms.ExtractNewRecordState
transforms.unwrap.add.fields=op
transforms.unwrap.add.headers=db,table
predicates=onlyProducts
predicates.onlyProducts.type=org.apache.kafka.connect.transforms.predicates.TopicNameMatches
predicates.onlyProducts.pattern=inventory.inventory.products

# ..

要在 Debezium 平台中使用此配置,请将带有前缀 transforms.unwrap 的属性(transforms.unwrap.type 除外)转换为 JSON 格式。对谓词语句执行相同的转换过程。

智能编辑器对直接使用 Kafka Connect 配置格式的支持计划在未来版本中提供。

将 Debezium 配置中的 unwrap 转换处理完成后,得到以下 JSON 结果:

{
  "name": "Debezium marker",
  "description": "Extract Debezium payloa d",
  "type": "io.debezium.transforms.ExtractNewRecordState",
  "schema": "string",
  "vaults": [],
  "config": {
    "add.fields": "op",
    "add.headers": "db,table"
  },
  "predicate": {
    "type": "org.apache.kafka.connect.transforms.predicates.TopicNameMatches",
    "config": {
      "pattern": "inventory.inventory.products"
    },
    "negate": false
  }
}

编辑转换

在平台界面中,打开 Transform(转换)菜单,点击要编辑的转换对应的 Action(操作)菜单,然后点击 Edit(编辑)。

编辑某个转换会影响所有使用该转换的管道。

删除转换

前置条件

  • 要删除的转换未在任何管道中使用。

操作步骤

  • 在平台界面中,打开 Transform(转换)菜单,点击要删除的转换对应的 Action(操作)菜单,然后点击 Delete(删除)。

    如果尝试删除正在使用的转换,则会出错。如果操作返回错误,请确认该转换已不再被任何管道使用,然后重新执行删除操作。

创建和管理管道

管道部分是将各个"点"连接起来的地方。你可以定义数据的来源、最终如何转换数据,以及数据的去向。

创建、编辑和移除管道

创建管道

  1. 在平台界面中,打开 Pipeline(管道)菜单,然后点击 Create your first pipeline(创建你的第一条管道)。Pipeline Designer(管道设计器)将打开。在管道设计器中,指定要添加到数据管道的组件。
  2. 点击 + Source(+ 来源)框以添加来源,然后选择之前创建的来源,或创建新的来源。
  3. (可选)点击 + Transform(+ 转换)框以应用一个或多个转换。
  4. 点击 + Destination(+ 目的地)框以添加目的地,然后选择之前创建的目的地,或创建新的目的地。

Debezium 应用转换的顺序非常重要,会影响最终输出。请确认你指定的顺序能产生预期的输出结果。

在管道设计器中,你可以删除转换或更改所应用转换的顺序。有关使用管道设计器的更多信息,请参阅使用管道设计器移除和排序转换。

使用谓词配置的转换会标记有谓词图标(使用谓词配置的转换)。工具提示会显示谓词类型的名称。

Debezium 平台管道

完成管道设计后,点击 Configure Pipeline(配置管道),然后指定管道的名称、描述和日志级别。

从 Debezium Server 配置创建管道

管道设计器提供了通过上传现有的 Debezium Server 配置属性文件来创建数据管道资源(即源、目标和转换)的选项。

  • 在管道设计器中,点击 DBZ server config,上传或拖放一个 Debezium Server 属性文件,然后点击创建。设计器会根据你提供的 Debezium Server 配置,为该管道创建源、转换和目标。

Debezium 平台管道服务器模式窗口

源和目标的名称是自动生成的。

删除管道

在平台 UI 中,打开 Pipeline 菜单,点击要删除的管道对应的 Action 菜单,然后点击 Delete。删除操作仅移除管道本身:源、目标以及所有转换都不会被删除。

编辑管道

  1. 在平台 UI 中,打开 Pipeline 菜单,点击要编辑的管道对应的 Action 菜单,然后点击 Edit。
  2. 在管道设计器中,根据需要修改转换。有关使用管道设计器的更多信息,请参阅使用管道设计器删除和排序转换。
  3. 点击 Save and next,以编辑管道的名称、描述和日志级别属性。
使用管道设计器删除和排序转换

通过管道设计器,你可以删除转换,或者重新排列它们的运行顺序。

删除转换

  1. 在管道设计器中,点击 Transform 框中的铅笔图标(铅笔)。
  2. 在转换列表中,点击转换名称旁边的垃圾桶图标。

重新排列转换

如果你配置了使用多个转换的连接器,可以使用管道设计器中的转换列表来指定它们的应用顺序。列表中的第一个转换会最先处理消息。

  1. 在管道设计器中,点击 Transform 框中的铅笔图标(铅笔)。
  2. 在转换列表中,将转换拖动到你希望的应用顺序,然后点击 Apply。

监控管道

为了帮助你监控管道中的活动,平台提供了快速访问管道日志的功能。

操作步骤

  1. 在平台界面中,点击 Pipeline,点击要监控的管道名称,然后点击 Pipeline logs。

Debezium 平台管道服务器模态框

  1. 下载日志、切换到全屏视图、在日志中搜索相关段落,或点击 Grep notifications 搜索 [Notification Service]。

管道操作

要修改数据管道组件,可以使用 Debezium 信号来触发特定操作。

前提条件

  • 源连接器已启用信号功能。有关更多信息,请参阅启用信号。

操作步骤

  1. 在平台界面中,打开管道概览页面,并点击 Pipeline actions 标签页。

Debezium 平台 - 管道操作列表

  1. 从下拉列表中选择一个操作。随后会显示一个表单,其中包含与所选操作相关的字段。

  2. 根据需要编辑这些字段。

    Action Id 字段已预先填充一个 UUID 字符串。你可以更新默认值,但务必要确保每个操作的该值都是唯一的。
  3. 完成表单编辑后,点击 Submit 以触发操作。

管道监控

Debezium 管理平台提供内置的监控功能,使你能够直接从 Stage 界面观察管道的健康状况和性能。借助集成的监控仪表板,无需外部监控工具或单独的身份验证,即可跟踪事件吞吐量、复制延迟、队列使用率和快照进度等关键指标。

监控基础设施基于业界标准的开源组件构建:使用 OpenTelemetry 采集指标,使用 Prometheus 存储指标。

监控架构

监控系统由以下组件协同工作,负责收集、存储和展示管道指标:

Debezium Server

每个管道都作为 Debezium Server 实例运行,并通过 OpenTelemetry(OTLP 协议)导出指标。

OpenTelemetry Collector

接收来自所有 Debezium Server 实例的指标,并以 Prometheus 格式将其导出。

Prometheus

从 OpenTelemetry Collector 抓取指标,并将其存储为时序数据。

Conductor API

查询 Prometheus 以获取指标,并通过 REST API 将其提供给 Stage 界面。Conductor 会将管道特定的标识符代入预定义查询中,并执行访问控制。

Stage 展示带有可配置时间范围和自动刷新功能的交互式监控仪表板。

Debezium 平台监控架构

监控仪表板

要访问某条管道的监控仪表板,请进入该管道的详情页面并点击 监控(Monitoring) 标签页。

Debezium 平台监控仪表板

监控仪表板提供以下控件:

时间范围

选择所显示指标的时间窗口。可用的预设包括 5 分钟、15 分钟、30 分钟、1 小时、6 小时、12 小时和 24 小时。你也可以通过指定具体的开始和结束时间戳来设定自定义时间范围。

刷新间隔

配置仪表板自动刷新数据的频率。可用选项包括关闭(手动刷新)、15 秒、30 秒、1 分钟和 5 分钟。

Debezium 平台监控工具栏

内置监控面板

平台自带一组内置监控面板,按以下类别组织:流式传输和快照。

流式传输面板

流式传输面板显示有关正在进行的变更数据捕获过程的指标。

Debezium 平台流式传输监控面板

面板单位说明
流式事件计数速率events/s每秒流式变更数据捕获事件的速率,按事件类型(创建、更新、删除)分组。以面积图显示。
源端延迟seconds源数据库中发生变更与 Debezium 处理该变更之间的时间间隔。以折线图显示。
距上次事件的时间seconds自上一个变更事件被处理以来经过的时间。有助于检测停滞的管道。以折线图显示。
错误事件速率events/s处理过程中出错的事件速率。以折线图显示。
已过滤事件速率events/s被连接器过滤配置排除的事件速率。以面积图显示。
已提交事务速率transactions/s从源数据库处理的已提交事务的速率。以面积图显示。
连接状态—连接器是否已连接到源数据库并正在监听变更。以环形图显示。
队列使用率%内部事件队列当前的使用百分比。使用率过高可能表示目标端无法跟上源端的速度。以环形图显示。
队列大小使用率%内部事件队列字节容量当前的使用百分比。以环形图显示。

快照面板

快照面板显示管道首次启动或触发快照时,初始快照过程的相关指标。

下图展示了快照进行中的快照面板:

Debezium 平台快照监控面板 - 快照进行中

下图展示了快照完成后的快照面板:

Debezium 平台快照监控面板 - 快照已完成

面板单位说明
快照表进度剩余表数快照期间仍需捕获的表数量。以环形图形式显示。
快照耗时秒当前或最近一次快照已用的总时间。以折线图形式显示。
快照状态—当前快照的生命周期状态:运行中、已完成、已中止或已跳过。以环形图形式显示。

前置条件

在 Debezium Platform 中启用监控之前,请先在 Kubernetes 集群中安装以下 Operator。

OpenTelemetry Operator(必需)

OpenTelemetry Operator 负责管理平台 Helm Chart 所创建的 OpenTelemetryCollector 自定义资源。

使用 Helm 安装该 Operator:

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install opentelemetry-operator open-telemetry/opentelemetry-operator \
  -n opentelemetry-operator-system --create-namespace \
  --set admissionWebhooks.certManager.enabled=false \
  --set admissionWebhooks.autoGenerateCert.enabled=true
上一条命令使用 Helm 为操作器 Webhook 自动生成的自签名证书,这适用于开发和测试环境。对于生产环境,请使用合适的证书管理解决方案,例如 cert-manager,或提供您自己的证书。有关所有可用选项,请参阅 OTel Operator Helm chart 文档。

OpenTelemetry Collector 必须包含 Prometheus exporter 组件。基础的 otelcol 分发版本包含此组件,但当使用 Helm 安装 OpenTelemetry Operator 时,默认使用的是 otelcol-k8s 分发版本,该版本不包含 Prometheus exporter。

如果您的操作器使用 k8s 分发版本,请通过在 Helm values 中设置 monitoring.otel.collector.image 来覆盖收集器镜像。例如:

  • 基础分发版本:ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector:<version>
  • Contrib 分发版本:ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:<version>

有关可用的分发版本及其包含的组件,请参阅 opentelemetry-collector-releases 仓库。

Prometheus Operator(可选)

Prometheus Operator 仅在您希望 Helm chart 创建 ServiceMonitor 以实现 Prometheus 自动抓取时才是必需的。它通常通过 kube-prometheus-stack chart 安装:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
  -n monitoring --create-namespace

如果你已经有一个未使用 Prometheus Operator 的 Prometheus 实例,请参阅使用外部 Prometheus 实例。

启用监控

要启用监控基础设施,请将 monitoring.otel.enabled 设置为 true,并在 Helm values 中提供 Prometheus 的 URL。

操作步骤

  1. 创建一个 values 文件,或将以下内容添加到现有的 Helm values 中:

    monitoring:
      otel:
        enabled: true
        collector:
          # Override the collector image if needed (see Prerequisites)
          image: ""
      prometheus:
        url: "http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090"  (1)
        serviceMonitor:
          enabled: true
          labels:
            prometheus: kube-prometheus
1必填。请将 URL 设置为与你的 Prometheus 安装相匹配。示例假设 kube-prometheus-stack 以默认设置安装在 monitoring 命名空间中。
  1. 使用监控相关配置值安装或升级平台:

    helm upgrade --install debezium-platform debezium/debezium-platform \
      --set database.enabled=true \
      --set domain.name=platform.debezium.io \
      -f monitoring-values.yaml

启用监控后,Helm chart 会自动执行以下操作:

  • 创建一个 OpenTelemetryCollector 自定义资源,并将其配置为包含 OTLP 接收器、批处理器和 Prometheus 导出器。
  • 创建一个 ServiceMonitor(如果 monitoring.prometheus.serviceMonitor.enabled 为 true),以便 Prometheus 自动抓取指标。
  • 配置每个管道的 Debezium Server,将其指标导出到 OpenTelemetry Collector。

监控配置参考

下表列出了用于配置监控的 Helm chart 属性。

名称说明默认值
monitoring.otel.enabled启用 OpenTelemetry 监控基础设施。需要预先安装 OpenTelemetry Operator。false
monitoring.otel.collector.imageOpenTelemetry Collector 镜像。必须包含 Prometheus exporter。若为空,则使用 Operator 的默认镜像。""
monitoring.otel.collector.replicasOpenTelemetry Collector 副本数量。1
monitoring.otel.collector.receivers.grpc.portOTLP gRPC 接收器使用的端口。4317
monitoring.otel.collector.receivers.http.portOTLP HTTP 接收器使用的端口。4318
monitoring.otel.collector.processors.batch.timeout批量处理器的刷新超时时间。5s
monitoring.otel.collector.processors.batch.sendBatchSize每批发送的最大指标数量。512
monitoring.otel.collector.exporters.prometheus.portPrometheus exporter 监听的端口。8889
monitoring.otel.collector.exporters.prometheus.resourceToTelemetryConversion将 OpenTelemetry 资源属性转换为 Prometheus 标签。true
monitoring.otel.collector.exporters.prometheus.constLabels添加到所有导出指标上的静态标签。{platform: debezium}
monitoring.prometheus.urlConductor 用于查询指标的 Prometheus 实例 URL。当 monitoring.otel.enabled 为 true 时必填。""
monitoring.prometheus.serviceMonitor.enabled创建 ServiceMonitor 以实现 Prometheus 自动抓取。需要预先安装 Prometheus Operator。true
monitoring.prometheus.serviceMonitor.scrapeIntervalPrometheus 抓取间隔。15s
monitoring.prometheus.serviceMonitor.labels用于 Prometheus Operator 发现 ServiceMonitor 的标签。必须与 Prometheus 实例中配置的 serviceMonitorSelector 标签相匹配。{prometheus: kube-prometheus}
monitoring.panels.additionalPanelsPath包含额外监控面板的 YAML 文件路径。面板会与内置默认面板合并,id 值相同的面板将覆盖内置面板。""

自定义监控面板

你可以通过添加自定义面板或覆盖现有面板来扩展内置的监控仪表盘。自定义面板在 YAML 文件中定义,并挂载到 Conductor 容器中。

面板定义格式

每个面板都通过以下字段进行定义:

panels:
  - id: my-custom-panel           (1)
    title: "Custom Metric"         (2)
    description: "Description"     (3)
    category: streaming            (4)
    query: 'rate(my_metric{service_name="{{pipeline_id}}"}[5m])'  (5)
    unit: ops/s                    (6)
    visualization:                 (7)
      type: line
      suggestedStep: 15s
1唯一标识符。若与内置面板 ID 匹配,则自定义定义会覆盖内置定义。
2显示在仪表盘中的标题。
3作为工具提示显示的描述。
4分类分组:streaming(流式)或 snapshot(快照)。
5PromQL 查询。使用 {{pipeline_id}} 作为管道标识符的占位符。
6图表坐标轴上显示的单位标签。
7可视化配置:type 可取 line(折线图)、area(面积图)或 donut-utilization(环形利用率图)。有关图表类型的更多信息,请参阅 PatternFly 图表文档。

添加自定义面板

操作步骤

  1. 创建一个包含面板定义的 YAML 文件(例如 panels.yml)。

  2. 使用该文件创建 Kubernetes ConfigMap:

    kubectl create configmap custom-panels \
      --from-file=panels.yml \
      -n debezium-platform
  3. 配置 Helm Chart 以挂载 ConfigMap 并设置面板路径。

    可以通过两种方式挂载 ConfigMap:

    选项 1:目录挂载(推荐)

    将 ConfigMap 挂载为目录。Kubernetes 会自动将 ConfigMap 的更新同步到已挂载的卷,Conductor 会定期重新加载面板文件,无需重启 Pod。

    conductor:
      extraVolumes:
        - name: custom-panels
          configMap:
            name: custom-panels
      extraVolumeMounts:
        - name: custom-panels
          mountPath: /opt/config
          readOnly: true
    
    monitoring:
      panels:
        additionalPanelsPath: /opt/config/panels.yml

选项 2:subPath 挂载

使用 subPath 仅挂载特定文件。这种方式可以避免在挂载目录中创建多余的文件,但当 ConfigMap 发生变更时,Kubernetes 不会自动更新 subPath 挂载的内容。你必须重启 Conductor Pod 才能使变更生效。

conductor:
  extraVolumes:
    - name: custom-panels
      configMap:
        name: custom-panels
  extraVolumeMounts:
    - name: custom-panels
      mountPath: /opt/config/panels.yml
      subPath: panels.yml
      readOnly: true

monitoring:
  panels:
    additionalPanelsPath: /opt/config/panels.yml
  1. 升级 Helm Release 以应用变更:

    helm upgrade debezium-platform debezium/debezium-platform \
      -n debezium-platform -f values.yaml

Conductor 会自动将自定义面板与内置默认面板合并。id 值匹配的面板会覆盖相应的内置面板。

使用外部 Prometheus 实例

如果你的集群中已经在运行 Prometheus 实例,并且没有使用 Prometheus Operator,则可以将平台指向现有的 Prometheus,并禁用 ServiceMonitor。

操作步骤

  1. 将 monitoring.prometheus.url 设置为 Prometheus 实例的 URL,并禁用 ServiceMonitor:

    monitoring:
      otel:
        enabled: true
      prometheus:
        url: "http://prometheus.monitoring.svc.cluster.local:9090"
        serviceMonitor:
          enabled: false
  2. 在 Prometheus 配置中添加抓取配置,以便抓取 OpenTelemetry Collector:

    scrape_configs:
      - job_name: 'otel-collector'
        scrape_interval: 15s
        static_configs:
          - targets: ['debezium-platform-otel-collector-collector.<namespace>.svc.cluster.local:8889']

将 <namespace> 替换为 Debezium 平台部署所在的命名空间。

评论

登录后参与评论

正在加载评论…