Debezium 管理平台
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)。
安装
| 目前,唯一支持的环境是 Kubernetes。 |
|---|
前提条件
- Helm
- 具有 ingress 控制器的 Kubernetes 集群
安装通过 Helm chart 提供。
操作步骤
- 输入以下命令以添加 Debezium charts 仓库:
helm repo add debezium https://charts.debezium.io输入以下命令之一,以安装你想要的平台的最新稳定版本:
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-platformdomain.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 可以写入的接收端目标。
操作步骤
- 在平台 UI 中,打开 Connection 菜单。
- 点击 Add connection 以打开 Connection catalog 页面。
- 点击 Source 或 Destination 按连接类型筛选列表,然后选择所需的连接卡片。
- 在配置表单中,指定连接名称和预定义属性,并在 Additional properties 部分指定任何自定义属性。
- 点击 Verify 以验证配置,并确保 Debezium 能够与数据库源或接收端建立连接。
- 验证连接后,点击 Create connection。
删除连接
前提条件
- 你要删除的连接未在任何源或目标中使用。
操作步骤
- 在平台 UI 中,打开 Connection 菜单,点击要删除的连接对应的 Action 菜单,然后点击 Delete。
如果你尝试删除正在使用中的连接,将会出错。如果操作返回错误,请确认该连接已不再被任何源或目标使用,然后重新执行删除操作。
编辑连接
要编辑连接,请在平台 UI 中打开 Connection 菜单,点击要编辑的连接对应的 Action 菜单,然后点击 Edit。
定义源
使用 UI 的 Source 部分指定承载你数据的数据库。你可以将 Debezium 支持的任何数据库配置为源。你创建的源可以被多个管道共享。对源的更改会反映在使用该源的所有管道中。
创建源
你可以使用以下任一编辑器来配置源:
表单编辑器
可用于指定源的名称、描述和连接,以及属性列表。对于连接,您可以选择预定义的源连接,也可以点击创建连接来新建连接。有关详细信息,请参阅创建连接。有关连接器可用属性的完整列表,请参阅连接器文档。
智能编辑器
提供了一种以 JSON 格式定义源配置的方式。您也可以使用该编辑器,将为 Kafka Connect 或 Debezium Server 环境中的 Debezium 连接器设计的源配置重新格式化,以便在平台中使用。编辑器会自动将平台要求的 JSON 格式应用到指定的源配置上。

您可以基于现有的 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 格式化的,并显示一条警告提示。

智能编辑器的工具栏随后会显示一个自动格式化选项,如上图所示。自动格式化选项会将提供的 JSON 自动转换为所需的 Debezium Management Platform JSON 格式。
下图展示了使用自动格式化选项转换 MySQL 数据源配置后得到的 JSON。你也可以编辑该 JSON,更新 name 字段的值或填写 description 字段。

以下示例展示了更新 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 进行通信。每个连接器实例必须拥有唯一的信号数据集合。

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

定义目标
使用界面的**目标(Destination)**部分来指定平台将源数据发送到的数据接收端(sink)。所有 Debezium Server 接收器均可作为目标使用。创建的目标可以在不同管道之间共享,这意味着对目标的任何更改都会反映在使用该目标的每个管道中。
创建、编辑和删除目标
创建目标
使用界面的目标部分来配置平台发送数据的接收端目标。你可以使用以下任一编辑器来配置目标:
表单编辑器
允许你指定目标的名称、描述和连接,以及属性列表。对于连接,你可以选择预定义的源连接,或者点击创建连接来新建连接。有关更多信息,请参阅创建连接。有关接收器连接器可用属性的完整列表,请参阅连接器文档。
智能编辑器
允许你以 JSON 定义接收器配置。你也可以提取 Debezium Server 接收器配置,并将其自动重新格式化以在本平台中使用。

要从现有的 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 配置。

智能编辑器工具栏会显示一个**自动格式化(Auto Format)**选项,如上图所示。选择此选项可自动提取 sink 配置,并将 sink 属性转换为 Debezium 平台支持的 JSON 格式。
下图显示了编辑器自动格式化你所添加的发布-订阅 sink 属性后生成的 JSON。编辑该 JSON 以更新 name 字段的值,并可选择填写 description 字段。

更新名称和描述后,得到的 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(删除)。
如果尝试删除正在使用的转换,则会出错。如果操作返回错误,请确认该转换已不再被任何管道使用,然后重新执行删除操作。
创建和管理管道
管道部分是将各个"点"连接起来的地方。你可以定义数据的来源、最终如何转换数据,以及数据的去向。
创建、编辑和移除管道
创建管道
- 在平台界面中,打开 Pipeline(管道)菜单,然后点击 Create your first pipeline(创建你的第一条管道)。Pipeline Designer(管道设计器)将打开。在管道设计器中,指定要添加到数据管道的组件。
- 点击 + Source(+ 来源)框以添加来源,然后选择之前创建的来源,或创建新的来源。
- (可选)点击 + Transform(+ 转换)框以应用一个或多个转换。
- 点击 + Destination(+ 目的地)框以添加目的地,然后选择之前创建的目的地,或创建新的目的地。
Debezium 应用转换的顺序非常重要,会影响最终输出。请确认你指定的顺序能产生预期的输出结果。
在管道设计器中,你可以删除转换或更改所应用转换的顺序。有关使用管道设计器的更多信息,请参阅使用管道设计器移除和排序转换。
| 使用谓词配置的转换会标记有谓词图标( |
|---|

完成管道设计后,点击 Configure Pipeline(配置管道),然后指定管道的名称、描述和日志级别。
从 Debezium Server 配置创建管道
管道设计器提供了通过上传现有的 Debezium Server 配置属性文件来创建数据管道资源(即源、目标和转换)的选项。
- 在管道设计器中,点击 DBZ server config,上传或拖放一个 Debezium Server 属性文件,然后点击创建。设计器会根据你提供的 Debezium Server 配置,为该管道创建源、转换和目标。

| 源和目标的名称是自动生成的。 |
|---|
删除管道
在平台 UI 中,打开 Pipeline 菜单,点击要删除的管道对应的 Action 菜单,然后点击 Delete。删除操作仅移除管道本身:源、目标以及所有转换都不会被删除。
编辑管道
- 在平台 UI 中,打开 Pipeline 菜单,点击要编辑的管道对应的 Action 菜单,然后点击 Edit。
- 在管道设计器中,根据需要修改转换。有关使用管道设计器的更多信息,请参阅使用管道设计器删除和排序转换。
- 点击 Save and next,以编辑管道的名称、描述和日志级别属性。
使用管道设计器删除和排序转换
通过管道设计器,你可以删除转换,或者重新排列它们的运行顺序。
删除转换
- 在管道设计器中,点击 Transform 框中的铅笔图标(
)。 - 在转换列表中,点击转换名称旁边的垃圾桶图标。
重新排列转换
如果你配置了使用多个转换的连接器,可以使用管道设计器中的转换列表来指定它们的应用顺序。列表中的第一个转换会最先处理消息。
- 在管道设计器中,点击 Transform 框中的铅笔图标(
)。 - 在转换列表中,将转换拖动到你希望的应用顺序,然后点击 Apply。
监控管道
为了帮助你监控管道中的活动,平台提供了快速访问管道日志的功能。
操作步骤
- 在平台界面中,点击 Pipeline,点击要监控的管道名称,然后点击 Pipeline logs。

- 下载日志、切换到全屏视图、在日志中搜索相关段落,或点击 Grep notifications 搜索
[Notification Service]。
管道操作
要修改数据管道组件,可以使用 Debezium 信号来触发特定操作。
前提条件
- 源连接器已启用信号功能。有关更多信息,请参阅启用信号。
操作步骤
- 在平台界面中,打开管道概览页面,并点击 Pipeline actions 标签页。

从下拉列表中选择一个操作。随后会显示一个表单,其中包含与所选操作相关的字段。
根据需要编辑这些字段。
Action Id 字段已预先填充一个 UUID 字符串。你可以更新默认值,但务必要确保每个操作的该值都是唯一的。 完成表单编辑后,点击 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 展示带有可配置时间范围和自动刷新功能的交互式监控仪表板。
监控仪表板
要访问某条管道的监控仪表板,请进入该管道的详情页面并点击 监控(Monitoring) 标签页。

监控仪表板提供以下控件:
时间范围
选择所显示指标的时间窗口。可用的预设包括 5 分钟、15 分钟、30 分钟、1 小时、6 小时、12 小时和 24 小时。你也可以通过指定具体的开始和结束时间戳来设定自定义时间范围。
刷新间隔
配置仪表板自动刷新数据的频率。可用选项包括关闭(手动刷新)、15 秒、30 秒、1 分钟和 5 分钟。

内置监控面板
平台自带一组内置监控面板,按以下类别组织:流式传输和快照。
流式传输面板
流式传输面板显示有关正在进行的变更数据捕获过程的指标。

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

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

| 面板 | 单位 | 说明 |
|---|---|---|
| 快照表进度 | 剩余表数 | 快照期间仍需捕获的表数量。以环形图形式显示。 |
| 快照耗时 | 秒 | 当前或最近一次快照已用的总时间。以折线图形式显示。 |
| 快照状态 | — | 当前快照的生命周期状态:运行中、已完成、已中止或已跳过。以环形图形式显示。 |
前置条件
在 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。
操作步骤
创建一个 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 命名空间中。 |
|---|
使用监控相关配置值安装或升级平台:
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.image | OpenTelemetry Collector 镜像。必须包含 Prometheus exporter。若为空,则使用 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 exporter 监听的端口。 | 8889 |
| monitoring.otel.collector.exporters.prometheus.resourceToTelemetryConversion | 将 OpenTelemetry 资源属性转换为 Prometheus 标签。 | true |
| monitoring.otel.collector.exporters.prometheus.constLabels | 添加到所有导出指标上的静态标签。 | {platform: debezium} |
| 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} |
| 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(快照)。 |
| 5 | PromQL 查询。使用 {{pipeline_id}} 作为管道标识符的占位符。 |
| 6 | 图表坐标轴上显示的单位标签。 |
| 7 | 可视化配置:type 可取 line(折线图)、area(面积图)或 donut-utilization(环形利用率图)。有关图表类型的更多信息,请参阅 PatternFly 图表文档。 |
添加自定义面板
操作步骤
创建一个包含面板定义的 YAML 文件(例如
panels.yml)。使用该文件创建 Kubernetes ConfigMap:
kubectl create configmap custom-panels \ --from-file=panels.yml \ -n debezium-platform配置 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升级 Helm Release 以应用变更:
helm upgrade debezium-platform debezium/debezium-platform \ -n debezium-platform -f values.yaml
Conductor 会自动将自定义面板与内置默认面板合并。id 值匹配的面板会覆盖相应的内置面板。
使用外部 Prometheus 实例
如果你的集群中已经在运行 Prometheus 实例,并且没有使用 Prometheus Operator,则可以将平台指向现有的 Prometheus,并禁用 ServiceMonitor。
操作步骤
将
monitoring.prometheus.url设置为 Prometheus 实例的 URL,并禁用ServiceMonitor:monitoring: otel: enabled: true prometheus: url: "http://prometheus.monitoring.svc.cluster.local:9090" serviceMonitor: enabled: false在 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 平台部署所在的命名空间。
评论
登录后参与评论
KnowForge