Debezium日常分享系列之:Debezium管理平台
Debezium日常分享系列之:Debezium管理平台
- 基础概念
- 架构
- 安装
- 使用平台
Debezium管理平台旨在以高度定制化的方式简化Debezium在各种环境中的部署。为实现这一目标,该平台采用以数据为中心的视角来管理Debezium组件。
该平台的实施标志着从Debezium Server自然演进而来。过去的版本提供了Debezium operator以简化在Kubernetes环境中的操作。随着该平台的推出,Debezium现在提供了一个高级抽象层,使您能够在不同环境中部署数据管道,同时充分利用Debezium Server的功能
- Debezium日常分享系列之:认识Debezium Operator
基础概念
在Debezium管理平台中,存在四个核心概念:
数据源(Source)
- 定义数据的来源端。
数据目的地(Destination)
- 定义数据的去向端。
数据转换(Transform)
- 定义单个数据事件在管道传输过程中的转换规则。
数据管道(Pipeline)
- 定义数据从源端到目的端的流动路径,并指定沿途的数据转换逻辑。
完成管道定义后,系统将根据平台配置自动部署。
每个管道对应一个Debezium Server实例。在Kubernetes环境(当前唯一支持的环境)中,该实例体现为DebeziumServer自定义资源。
架构
该平台由以下组件组成:
Conductor(协调器)
- 后端组件,提供一组API来编排和控制Debezium的部署。
Stage(舞台)
- 前端组件,提供用户界面与协调器进行交互。
协调器组件本身又包含以下子组件:
API Server(API服务器)
- 主要入口点。提供一组API与平台进行交互。
Watcher(监视器)
- 负责与部署环境(例如Kubernetes集群中的Debezium Operator)进行实际通信的组件。
安装
目前唯一支持的环境是Kubernetes。
先决条件
- Helm
- 带有Ingress控制器的Kubernetes集群
安装通过Helm图表提供。
安装步骤
- 执行以下命令添加Debezium图表仓库:
helm repo add debezium https://charts.debezium.io
输入以下命令之一来安装所需平台的版本:
helm install debezium-platform
debezium/debezium-platform
--version 3.1.0-beta1
--set database.enabled=true
--set domain.url=platform.debezium.io
helm install
这是 Helm 的安装命令,用于部署 Helm Chart 到 Kubernetes 集群中。
-
debezium-platform
这是为安装的 Helm Release 指定的名称。你可以使用任何自定义名称来标识这个 Helm Release。在这里,debezium-platform 是 Helm Release 的名称。 -
debezium/debezium-platform
这是 Helm Chart 的来源:
debezium 是 Chart 的仓库名称。
debezium-platform 是 Chart 的名称,它定义了如何部署 Debezium 平台及其相关组件。 -
–version 3.1.0-beta1
指定安装的 Helm Chart 的版本。在这里,安装的是 Debezium 平台的 3.1.0-beta1 版本。你可以通过 Helm 仓库检查并选择其他版本。 -
–set database.enabled=true
这是 Helm 的 --set 参数,用来覆盖 Chart 的默认值。这里的作用是:
设置 database.enabled 参数为 true。
启用 Helm Chart 安装一个 PostgreSQL 数据库实例,作为 Debezium 平台的一部分。如果设置为 false,则假定你已经有一个现有的数据库并不会自动安装。 -
–set domain.url=platform.debezium.io
同样是 Helm 的 --set 参数,用来覆盖 Chart 的默认值。这里的作用是:
设置 domain.url 参数为 platform.debezium.io。
domain.url 是用于指定平台的入口域名(Ingress Host)。这个值通常是在 Kubernetes 集群中配置的域名,用于访问平台的 UI 或 API。
整体解释
该命令的作用是:
- 使用 Helm 在 Kubernetes 集群中安装 Debezium 平台的 3.1.0-beta1 版本。
- 同时启用 PostgreSQL 数据库(database.enabled=true),用作平台存储数据的数据库。
- 将平台的入口域名(Ingress Host)设置为 platform.debezium.io。
检查 Helm Release 状态:
helm list
验证服务是否运行正常:
kubectl get pods
kubectl get svc
访问平台 UI:
- 使用浏览器访问 http://platform.debezium.io(假定域名已正确解析)。
或者,要使用 OCI 工件来安装平台,请输入以下命令:
helm install debezium-platform
--set database.enabled=true
--set domain.url=platform.debezium.io
--version 3.1.0-beta1
oci://quay.io/debezium-charts/debezium-platform
-
helm install
这是 Helm 的安装命令,用于将 Helm Chart 部署到 Kubernetes 集群中。 -
debezium-platform
这是 Helm Release 的名称。该名称用于标识此次安装的 Helm Release(即部署的应用)。在一个 Kubernetes 集群中,每个 Release 名称必须是唯一的。 -
oci://quay.io/debezium-charts/debezium-platform
这是 Helm Chart 的来源地址:
oci://:指明这是一个 OCI(Open Container Initiative)兼容的 Helm Chart Registry,而不是传统的 HTTP Helm 仓库。
quay.io/debezium-charts/debezium-platform:这是 Helm Chart 在 Quay.io 容器镜像注册表中的路径。
Helm 从这个 OCI 注册表下载 debezium-platform Chart,以部署 Debezium 平台。
OCI Registry 的支持
该命令使用的是 Helm 的 OCI Registry 功能,而不是传统的 HTTP Helm 仓库。
确保 Helm 版本在 v3.8.0 或以上,因为 OCI 支持是从 Helm v3.8.0 开始稳定支持的。
如果还未登录 Quay.io 的 OCI Registry,需要先登录:
helm registry login quay.io
域名配置
- domain.url=platform.debezium.io 表示平台的域名入口。如果没有正确配置 Kubernetes 的 Ingress 或 DNS,这个域名可能无法访问。
- 确保 Kubernetes 集群中已经正确设置了 Ingress Controller,并且 platform.debezium.io 已在 DNS 中解析到 Ingress 的 IP 地址。
domain.url 是唯一必需的属性;它在 Ingress 定义中用作主机。
在前面的示例中,使用了 database.enabled 属性。此属性有助于通过自动部署 Conductor 服务所需的 PostgreSQL 数据库来简化测试环境中的部署。在生产环境中部署时,请勿启用 PostgreSQL 数据库的自动部署。而是通过设置 database.name、database.host 以及连接数据库所需的其他属性来指定现有数据库实例。
下表列出了图表的所有属性:
名称 | 描述 | 默认值 |
---|---|---|
domain.url | 用作入口主机的域名 | “” |
stage.image | Helm 用于部署 stage (UI) pod 的镜像 | quay.io/debezium/platform-stage:<release_tag> |
conductor.image | Helm 用于部署 conductor pod 的镜像 | quay.io/debezium/platform-conductor:<release_tag> |
conductor.offset.existingConfigMap | 存储 conductor 偏移量的 ConfigMap 的名称。如果未指定值,Helm 会自动创建一个 ConfigMap | “” |
database.enabled | 启用 Helm 安装 PostgreSQL | false |
database.name | 用于存储平台数据的现有数据库的名称 | postgres |
database.host | 平台使用的数据库主机 | postgres |
database.auth.existingSecret | 存储平台用于数据库认证的用户名和密码的 Secret 名称。如果未指定值,Helm 会基于 database.auth.username 和 database.auth.password 属性自动创建一个 Secret。如果为此属性提供了值,请不要设置 database.auth.username 或 database.auth.password | “” |
database.auth.username | 平台连接数据库的用户名 | user |
database.auth.password | 平台连接数据库的用户密码 | password |
offset.reusePlatformDatabase | 指定管道是否使用配置的平台数据库来存储偏移量。如果要将偏移量存储在另一个专用数据库中,请将该值设置为 false | true |
offset.database.name | 平台用来存储偏移量的数据库名称 | postgres |
offset.database.host | 平台存储偏移量的数据库主机 | postgres |
offset.database.port | 平台连接偏移量数据库的端口 | 5432 |
offset.database.auth.existingSecret | 存储平台用于偏移量数据库认证的用户名和密码的 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 | 平台连接偏移量数据库的用户密码 | password |
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 | 存储平台用于 schema 历史记录数据库认证的用户名和密码的 Secret 名称。如果未指定值,平台会使用 schemaHistory.database.auth.username 和 schemaHistory.database.auth.password 属性的值来认证数据库。如果提供了 Secret 的名称,请不要设置 schemaHistory.database.auth.username 和 schemaHistory.database.auth.password 属性 | “” |
schemaHistory.database.auth.username | 平台连接 schema 历史记录数据库的用户名 | user |
schemaHistory.database.auth.password | 平台连接 schema 历史记录数据库的用户密码 | password |
env | 传递给 conductor 的环境变量列表 | [] |
使用平台
您可以通过平台用户界面执行多种不同的任务。
定义数据源
- 在用户界面的"Source"部分,您可以指定托管数据的数据库。您可以配置任何Debezium支持的数据库作为数据源。创建的数据源可以在多个管道(pipeline)之间共享。对数据源的修改会反映在使用该数据源的所有管道中。
创建数据源
- 您可以使用以下任意一种编辑器来配置数据源:
表单编辑器(Form Editor)
- 允许您指定数据源的名称、描述以及一系列属性。有关连接器可用属性的完整列表,请参阅连接器文档。
智能编辑器(Smart Editor)
- 允许您使用JSON来定义数据源配置。
使用智能编辑器配置数据源
- 您可以使用智能编辑器(Smart Editor)来指定定义数据源配置的JSON。您可以直接在编辑器中输入和编辑JSON,或者将外部来源的JSON粘贴到编辑器中。
- 智能编辑器中用于配置数据源的JSON与Kafka Connect或Debezium Server中定义Debezium连接器配置的config部分几乎相同,只有少量细微差别。实际上,您基本上可以直接将标准Debezium配置中config属性的部分复制到智能编辑器中。您只需要移除connector.class,因为在数据源配置中,类型(type)已经提供。
- 对于直接使用Kafka Connect或Debezium Server格式来配置连接器的支持,计划在未来的版本中实现。
例如,以下是用于指定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"}
}
要使上述配置适用于在智能编辑器中定义 MySQL 数据源,请复制配置部分并删除 connector.class。
以下示例显示了您将用于在智能编辑器中定义 MySQL 数据源的 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"}
}
删除数据源
前提条件
- 您要删除的数据源未被任何管道(pipeline)使用
操作步骤
- 在平台用户界面中,打开"数据源(Source)"菜单找到要删除的数据源,点击其操作菜单(Action menu)选择"删除(Delete)"选项
- 注意:如果尝试删除正在使用的数据源会导致错误。若操作返回错误,请确认该数据源已不再被任何管道使用后,重新执行删除操作。
编辑数据源
要编辑数据源,请执行以下步骤:
- 在平台用户界面中,打开"数据源(Source)"菜单
- 找到要编辑的数据源,点击其操作菜单(Action menu)
- 选择"编辑(Edit)"选项
- 重要提示:编辑数据源会影响所有使用该数据源的管道。
创建数据目的地
- 在用户界面的"Destination"部分,您可以指定平台发送源数据的数据接收端。所有Debezium Server支持的接收端都可以作为目的地使用。当您创建一个目的地时,它可以被不同的管道(pipeline)共享,这意味着对目的地的任何修改都会反映在使用该目的地的所有管道中。
创建数据目的地
- 在用户界面的"Destination"部分,您可以配置平台发送数据的目标接收端(sink)。您可以使用以下任意一种编辑器来配置目的地:
表单编辑器(Form Editor)
- 允许您指定目的地的名称、描述以及一系列属性配置。有关接收端连接器(sink connector)可用属性的完整列表,请参阅相应的连接器文档。
智能编辑器(Smart Editor)
- 支持使用JSON格式来定义接收端配置。
使用智能编辑器配置目的地
- 您可以使用智能编辑器指定定义源配置的 JSON。您可以在编辑器中直接输入和编辑 JSON,也可以将来自外部来源的 JSON 粘贴到编辑器中。除了一些小差异外,在智能编辑器中用于配置目的地的 JSON 与用于定义 Debezium 服务器接收器的配置几乎相同。
- 计划在未来的版本中支持智能编辑器直接使用 Debezium 服务器配置格式。通常,在Debezium 服务器中,接收器的配置以 debezium.sink.<sink_name> 开头,其中 <sink_name> 是接收器类型。
例如,考虑以下用于在Debezium服务器中配置接收器目的地的 JSON:
debezium.sink.type=pubsub
debezium.sink.pubsub.project.id=debezium-tutorial-local
debezium.sink.pubsub.address=pubsub:8085
{"name": "test-destination","type": "pubsub","description": "Some funny destination","schema": "dummy","vaults": [],"config": {"project.id": "debezium-tutorial-local","address": "pubsub:8085"}
}
要将上述配置适应于在智能编辑器中定义接收器目的地的用法,需要删除前缀 debezium.sink.pubsub,并将配置转换为 JSON 格式。
以下示例展示了您可能在智能编辑器中使用的用于定义接收器目的地的 JSON。
{"name": "test-destination","type": "pubsub","description": "Some funny destination","schema": "dummy","vaults": [],"config": {"project.id": "debezium-tutorial-local","address": "pubsub:8085"}
}
删除目的地
先决条件
- 要删除的接收器在任何管道中都未被使用。
- 步骤 从平台 UI 中打开目的地菜单,单击要删除的目的地的操作菜单,然后单击删除。 如果尝试删除正在使用的目的地,则会出现错误。如果操作返回错误,请验证目的地是否不再在任何管道中使用,然后重复删除操作。
编辑目的地
- 要编辑目的地,请转到目的地菜单,然后单击要编辑的目的地的操作菜单,然后单击编辑。
- 编辑目的地将影响使用它的所有管道。
管理转换
- 使用平台 UI 的“转换”部分来管理您想在数据管道中使用的转换。
- 目前,平台支持由Debezium提供的所有单个消息转换以及任何Kafka Connect转换。
- 转换在管道之间共享。当您修改一个转换时,这些更改将反映在使用该转换的所有管道中。
创建转换
- 使用平台 UI 的“转换”部分来指定配置和管理单个消息转换。
- 您可以使用以下任一编辑器来配置转换: 表单编辑器 使您能够指定转换的名称、类型和描述。您还可以设置特定于转换类型的其他配置选项。 如果要仅将转换应用于符合特定条件的记录,可以选择性地指定一个谓词。您可以从列表中选择谓词,并设置其属性。
智能编辑器
- 使您能够使用 JSON 来配置转换。
使用智能编辑器配置转换
- 您可以使用智能编辑器指定定义转换配置的 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}
}
编辑转换
- 从平台 UI 中打开“转换”菜单,单击要编辑的转换的操作菜单,然后单击编辑。 编辑转换会影响使用它的所有管道。
删除转换
先决条件
- 要删除的转换在任何管道中都未被使用。 步骤 从平台 UI 中打开“转换”菜单,单击要删除的转换的操作菜单,然后单击删除。 如果尝试删除正在使用的转换,则会出现错误。如果操作返回错误,请验证转换是否不再在任何管道中使用,然后重复删除操作。
创建和管理管道
- 管道部分是连接“点”的地方。您可以定义数据的来源,最终如何转换数据以及数据应该传送到哪里。
创建管道
- 从平台 UI 中打开“管道”菜单,点击“创建你的第一个管道”以打开管道设计器。 在管道设计器中,您可以添加数据管道的组件。 点击“+ 源”框以添加一个数据源,然后选择之前创建的数据源,或创建一个新的数据源。 点击“+ 目的地”框以添加一个目的地。
- (可选)点击“+ 转换”框以应用一个或多个转换。 配置了谓词的转换会标记有谓词图标(配置了谓词的转换)。工具提示会显示谓词的名称。 设计完管道后,点击“配置管道”,然后指定管道的名称、描述和日志级别。
删除管道
- 从平台 UI 中打开“管道”菜单,点击要删除的管道的操作菜单,然后点击删除。删除只会移除管道本身,源、目的地和任何转换不会被删除。
编辑管道
- 从平台 UI 中打开“管道”菜单,点击要编辑的管道的操作菜单,然后点击“编辑管道”。
- 使用管道设计器根据需要修改转换。您可以编辑转换的名称、描述和日志级别。有关使用管道设计器的更多信息,请参阅使用管道设计器删除和排序转换。 使用管道设计器删除和排序转换 从管道设计器中,您可以删除转换或重新安排它们的运行顺序。
删除转换
从管道设计器中,点击“转换”框中的铅笔图标。 从转换列表中,点击要删除的转换名称旁边的垃圾桶图标。
重新安排转换
- 如果配置连接器使用多个转换,您可以在管道设计器中的转换列表中指定它们应用的顺序。列表中的第一个转换首先处理消息。 从管道设计器中,点击“转换”框中的铅笔图标。 从转换列表中,将转换拖动到您希望应用它们的顺序中,然后点击“应用”。
监控管道 Debezium
- 平台提供了对管道日志的简单访问。从平台 UI 中,点击“管道”,点击要监控的管道名称,然后点击“管道日志”。