您正在查看 Debezium 未发布版本的文档。
如果您想查看此页面的最新稳定版本,请在此 查看。

Debezium 管理平台

此项目目前处于孵化阶段。确切的语义、配置选项等可能会根据我们收到的反馈而更改。

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

平台的实现代表了 Debezium Server 的自然演进。过去的版本提供了 Debezium Operator 来简化 Kubernetes 环境下的操作。通过引入该平台,Debezium 现在提供了一个高级抽象,可以在不同环境中部署数据管道,同时利用 Debezium Server。

基本概念

在 Debezium 管理平台中有四个主要概念

定义数据的来源。

目标

定义数据的目的地。

转换

定义数据事件在管道中流动时如何被转换。

管道

定义数据如何在被转换的同时从源流向目标。

定义管道后,它将根据平台的配置方式进行部署。

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

Debezium 平台

架构

该平台由以下组件组成

Conductor (协调器)

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

Stage (界面)

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

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

API Server (API 服务器)

主入口点。它提供了一套 API 来与平台进行交互。

Watcher (监视器)

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

Debezium Platform Architecture

安装

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

先决条件
  • Helm

  • 带有入口控制器 (ingress controller) 的 Kubernetes 集群

安装通过 Helm chart 提供。

过程
  1. 输入以下命令以添加 Debezium charts 仓库

    helm repo add debezium https://charts.debezium.io
  2. 输入以下命令之一以安装您想要的平台版本

    helm install debezium-platform debezium/debezium-platform --version 3.1.0-beta1 --set database.enabled=true --set domain.url=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

    domain.url 是唯一必需的属性;它在 Ingress 定义中用作 host

    在前面的示例中,使用了 database.enabled 属性。此属性通过自动部署 Conductor 服务所需的 PostgreSQL 数据库来简化测试环境中的部署。在生产环境中部署时,请勿启用 PostgreSQL 数据库的自动部署。而是通过设置 database.namedatabase.host 以及连接数据库所需的其他属性来指定现有数据库实例。有关更多信息,请参阅下表。

下表列出了 chart 的所有属性

名称 描述 Default (默认值)

domain.url

用作入口主机 (ingress host) 的域名

""

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 偏移量 (offsets) 的 ConfigMap 名称。如果未指定值,Helm 将自动创建一个 ConfigMap。

""

database.enabled

启用 Helm 安装 PostgreSQL。

false

database.name

平台要从中存储数据的现有数据库的名称。

postgres

database.host

平台要使用的数据库主机。

postgres

database.auth.existingSecret

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

如果为此属性提供值,请不要设置 database.auth.usernamedatabase.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

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

如果您提供 Secret 的名称,请不要设置 offset.database.auth.usernameoffset.database.auth.password 属性。

""

offset.database.auth.username

平台通过该用户名连接到偏移量数据库。

user

offset.database.auth.password

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

password

schemaHistory.reusePlatformDatabase

指定管道是否使用配置的平台数据库来存储模式历史记录。要配置管道以使用不同的专用数据库来存储模式历史记录,请将值设置为 false

true

schemaHistory.database.name

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

postgres

schemaHistory.database.host

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

postgres

schemaHistory.database.port

平台连接到其存储模式历史记录的专用数据库的端口。

5432

schemaHistory.database.auth.existingSecret

存储平台用于向存储模式历史记录的数据库进行身份验证的 usernamepassword 的 Secret 名称。如果您未指定值,平台将使用 schemaHistory.database.auth.usernameschemaHistory.database.auth.password 属性的值来向数据库进行身份验证,而不是使用 Secret 来存储凭据。

如果您提供 Secret 的名称,请不要设置 schemaHistory.database.auth.usernameschemaHistory.database.auth.password 属性。

""

schemaHistory.database.auth.username

平台通过该用户名连接到模式历史记录数据库。

user

schemaHistory.database.auth.password

schemaHistory.database.auth.username 属性指定的模式历史记录数据库用户的密码。

password

env

要传递给 Conductor 的环境变量列表。

[]

使用平台

您可以使用平台 UI 来执行许多不同的任务。

定义源

使用 UI 的部分来指定托管数据的数据库。您可以将 Debezium 支持的任何数据库配置为源。创建的源可以被多个管道共享。对源的更改会反映在使用它的每个管道中。

创建源

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

Form Editor (表单编辑器)

使您能够指定源的名称和描述,以及属性列表。有关连接器可用属性的完整列表,请参阅连接器文档。

Smart Editor (智能编辑器)

提供一种以 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 连接器或 Debezium Server 的配置部分中的 config 几乎相同。

要重用现有的 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 添加到智能编辑器时,它会检测到它是为 Kafka Connect 格式化的,并显示一个警报。

Debezium UI smart editor - Kafka connect

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

下图显示了您使用自动格式化选项转换 MySQL 数据源配置后生成的 JSON。可选地,您可以编辑 JSON 以更新 name 字段的值或填充 `description` 字段。

Debezium platform smart editor - source

下面的示例显示了更新名称描述字段后生成的平台配置 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 平台使用。有关更多信息,请参阅使用智能编辑器配置目标

删除源

先决条件
  • 您要删除的源未在任何管道中使用。

过程
  • 从平台 UI,打开菜单,点击要删除的源的操作菜单,然后点击删除

如果您尝试删除正在使用的源,则会导致错误。如果操作返回错误,请验证该源不再在任何管道中使用,然后重复删除操作。

编辑源

要编辑源,请从平台 UI 打开菜单,点击要编辑的源的操作菜单,然后点击编辑

编辑源会影响所有使用它的管道。在提交更改之前,一条消息会通知您,使用该源的管道将重新启动。

Edit source confirmation modal

定义目标

使用 UI 的目标部分来指定平台将源数据发送到的数据接收器。所有 Debezium Server 接收器都可用作目标。创建目标时,它可以被不同的管道共享,这意味着对目标的任何更改都会反映在使用它的每个管道中。

创建、编辑和移除目标

创建目标

使用 UI 的目标部分来配置平台将数据发送到的接收器目标。您可以使用以下任一编辑器来配置目标

Form Editor (表单编辑器)

使您能够指定目标的名称和描述,以及属性列表。有关接收器连接器可用属性的完整列表,请参阅连接器文档。

Smart Editor (智能编辑器)

使您能够以 JSON 格式定义接收器配置。或者,您可以提取 Debezium Server 接收器配置并自动重新格式化以供平台使用。

Debezium platform - Create sink toolbar

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

使用智能编辑器配置目标

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

您可以通过上传或粘贴到智能编辑器中来直接使用 Debezium Server 配置。Stage UI 会智能识别配置类型,并提示您将其重新格式化以供平台使用。该编辑器会自动提取 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 smart editor - Server

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

下图显示了在编辑器自动格式化您添加的发布-订阅接收器属性后生成的 JSON。编辑 JSON 以更新 name 字段的值,并可选地填充 description 字段。

Debezium platform smart editor - 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"
  }
}

删除目标

先决条件
  • 您要删除的接收器未在任何管道中使用。

过程
  • 从平台 UI,打开目标菜单,点击要删除的目标的操作菜单,然后点击删除

如果您尝试删除正在使用的目标,则会导致错误。如果操作返回错误,请验证该目标不再在任何管道中使用,然后重复删除操作。

编辑目标

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

编辑目标会影响所有使用它的管道。在您进行更改后,确认消息会通知您,使用该目标的所有管道将重新启动。

管理转换

使用平台 UI 的转换部分来管理您想在数据管道中使用的转换。

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

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

创建、编辑和移除转换

创建转换

使用平台 UI 的转换部分来配置和管理单消息转换。

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

Form Editor (表单编辑器)

使您能够指定转换的名称、类型和描述。您还可以设置特定于转换类型的其他配置选项。

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

Smart Editor (智能编辑器)

使您能够使用 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 配置格式的支持计划在将来的版本中提供。

在转换了 unwrap 转换的 Debezium 配置后,将生成以下 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,打开转换菜单,点击要删除的转换的操作菜单,然后点击删除

    如果您尝试删除正在使用的转换,则会导致错误。如果操作返回错误,请验证该转换不再在任何管道中使用,然后重复删除操作。

创建和管理管道

管道部分是您连接“点”的地方。您可以定义数据的来源,如何最终转换它们,以及它们应该去哪里。

创建、编辑和移除管道

创建管道

  1. 从平台 UI,打开管道菜单,然后点击创建第一个管道管道设计器将打开。在管道设计器中,指定您想添加到数据管道的组件。

  2. 点击+ 源框以添加源,然后选择之前创建的源,或创建一个新源。

  3. (可选)点击+ 转换框以应用一个或多个转换。

  4. 点击+ 目标框以添加目标,然后选择之前创建的目标,或创建一个新目标。

Debezium 应用转换的顺序很重要,会影响最终输出。请验证您指定的顺序是否能产生预期的输出。

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

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

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

从 Debezium Server 配置创建管道

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

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

Debezium platform pipeline server modal
源和目标名称是自动生成的。

删除管道

从平台 UI,打开管道菜单,点击要删除的管道的操作菜单,然后点击删除。删除只会移除管道:源、目标和任何转换都不会被删除。

编辑管道

  1. 从平台 UI,打开管道菜单,点击要编辑的管道的操作菜单,然后点击编辑

  2. 管道设计器中,根据需要修改转换。有关使用管道设计器的更多信息,请参阅使用管道设计器删除和排序转换

  3. 点击保存并下一步以编辑管道的名称、描述和日志级别属性。

使用管道设计器删除和排序转换

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

删除转换
  1. 管道设计器中,点击转换框中的铅笔图标(铅笔)。

  2. 转换列表中,点击要删除的转换名称旁边的垃圾桶图标。

重新排列转换

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

  1. 管道设计器中,点击转换框中的铅笔图标(铅笔)。

  2. 转换列表中,将转换拖放到您想要应用的顺序,然后点击应用

监控管道

Debezium 平台提供了对管道日志的便捷访问。 . 从平台 UI,点击管道,点击您想监控的管道名称,然后点击管道日志