4.5. 部署 Debezium MongoDB 连接器
您可以使用以下任一方法部署 Debezium MongoDB 连接器:
4.5.1. 使用 AMQ Streams 部署 MongoDB 连接器
从 Debezium 1.7 开始,部署 Debezium 连接器的首选方法是使用 AMQ Streams 来构建包含连接器插件的 Kafka Connect 容器镜像。
在部署过程中,您可以创建并使用以下自定义资源(CR):
-
定义 Kafka Connect 实例的
KafkaConnect
CR,并包含有关镜像中需要包含连接器工件的信息。 -
提供连接器用来访问源数据库的信息的
KafkaConnector
CR。在 AMQ Streams 启动 Kafka Connect pod 后,您可以通过应用KafkaConnector
CR 来启动连接器。
在 Kafka Connect 镜像的构建规格中,您可以指定可用于部署的连接器。对于每个连接器插件,您还可以指定您的部署可以使用的其他组件。例如,您可以添加 Service Registry 工件或 Debezium 脚本组件。当 AMQ Streams 构建 Kafka Connect 镜像时,它会下载指定的工件,并将其合并到镜像中。
KafkaConnect
CR 中的 spec.build.output
参数指定存储生成的 Kafka Connect 容器镜像的位置。容器镜像可以存储在 Docker registry 中,也可以存储在 OpenShift ImageStream 中。要将镜像存储在 ImageStream 中,您必须先创建 ImageStream,然后才能部署 Kafka Connect。镜像流不会被自动创建。
如果使用 KafkaConnect
资源创建集群,之后您无法使用 Kafka Connect REST API 创建或更新连接器。您仍然可以使用 REST API 来检索信息。
其他资源
- 在 OpenShift 上使用 AMQ Streams 配置 Kafka 连接。
- 在 OpenShift 中部署和升级 AMQ Streams 中的使用 AMQ Streams 自动创建新容器镜像。
4.5.2. 使用 AMQ Streams 部署 Debezium MongoDB 连接器
使用早期版本的 AMQ Streams 时,要在 OpenShift 上部署 Debezium 连接器,首先需要为连接器构建 Kafka Connect 镜像。在 OpenShift 上部署连接器的当前首选的方法是使用 AMQ Streams 中的构建配置来自动构建 Kafka Connect 容器镜像,其中包含您要使用的 Debezium 连接器插件。
在构建过程中,AMQ Streams Operator 会将 KafkaConnect
自定义资源中的输入参数(包括 Debezium 连接器定义)转换为 Kafka Connect 容器镜像。构建从 Red Hat Maven 存储库或其他配置的 HTTP 服务器下载必要的工件。
新创建的容器被推送到 .spec.build.output
中指定的容器 registry,用于部署 Kafka Connect 集群。AMQ Streams 构建 Kafka Connect 镜像后,您可以创建 KafkaConnector
自定义资源来启动构建中包含的连接器。
先决条件
- 您可以访问安装了集群 Operator 的 OpenShift 集群。
- AMQ Streams Operator 正在运行。
- 部署 Apache Kafka 集群,如在 OpenShift 中部署和升级 AMQ Streams 所述。
- Kafka Connect 部署在 AMQ Streams 上
- 您有一个 Red Hat Integration 许可证。
-
已安装 OpenShift
oc
CLI 客户端,或者您可以访问 OpenShift Container Platform Web 控制台。 根据您要存储 Kafka Connect 构建镜像的方式,您需要 registry 权限或您必须创建 ImageStream 资源:
- 要将构建镜像存储在镜像 registry 中,如 Red Hat Quay.io 或 Docker Hub
- 在 registry 中创建和管理镜像的帐户和权限。
- 将构建镜像存储为原生 OpenShift ImageStream
- ImageStream 资源已部署到集群中。您必须为集群明确创建 ImageStream。镜像流默认不可用。如需有关 ImageStreams 的更多信息,请参阅在 OpenShift Container Platform 上管理镜像流。
流程
- 登录 OpenShift 集群。
为连接器创建 Debezium
KafkaConnect
自定义资源(CR),或修改现有的资源。例如,创建一个名为dbz-connect.yaml
的KafkaConnect
CR,用于指定metadata.annotations
和spec.build
属性。以下示例显示了来自dbz-connect.yaml
文件的摘录,该文件描述了KafkaConnect
自定义资源。
例 4.1.
dbz-connect.yaml
文件,该文件定义包含 Debezium 连接器的KafkaConnect
自定义资源在以下示例中,自定义资源被配置为下载以下工件:
- Debezium MongoDB 连接器存档。
- Service Registry 归档。Service Registry 是一个可选组件。只有在打算在连接器中使用 Avro 序列化时,才添加 Service Registry 组件。
- Debezium 脚本 SMT 归档以及您要与 Debezium 连接器一起使用的关联脚本引擎。SMT 归档和脚本语言依赖项是可选组件。只有在打算使用 Debezium 是 基于内容的路由 SMT 或 过滤 SMT 时,才添加这些组件。
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect metadata: name: debezium-kafka-connect-cluster annotations: strimzi.io/use-connector-resources: "true" 1 spec: version: 3.3.1 build: 2 output: 3 type: imagestream 4 image: debezium-streams-connect:latest plugins: 5 - name: debezium-connector-mongodb artifacts: - type: zip 6 url: https://maven.repository.redhat.com/ga/io/debezium/debezium-connector-mongodb/2.1.4.Final-redhat-00001/debezium-connector-mongodb-2.1.4.Final-redhat-00001-plugin.zip 7 - type: zip url: https://maven.repository.redhat.com/ga/io/apicurio/apicurio-registry-distro-connect-converter/2.3.0.Final-redhat-<build-number>/apicurio-registry-distro-connect-converter-2.3.0.Final-redhat-<build-number>.zip 8 - type: zip url: https://maven.repository.redhat.com/ga/io/debezium/debezium-scripting/2.1.4.Final-redhat-00001/debezium-scripting-2.1.4.Final-redhat-00001.zip 9 - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy/3.0.11/groovy-3.0.11.jar 10 - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy-jsr223/3.0.11/groovy-jsr223-3.0.11.jar - type: jar url: https://repo1.maven.org/maven2/org/codehaus/groovy/groovy-json3.0.11/groovy-json-3.0.11.jar bootstrapServers: debezium-kafka-cluster-kafka-bootstrap:9093 ...
表 4.10. Kafka Connect 配置设置的描述 项 描述 1
将
strimzi.io/use-connector-resources
注解设置为"true"
,以便 Cluster Operator 使用KafkaConnector
资源在此 Kafka Connect 集群中配置连接器。2
spec.build
配置指定构建镜像的位置,并列出要在镜像中包含的插件,以及插件工件的位置。3
build.output
指定存储新构建镜像的 registry。4
指定镜像输出的名称和镜像名称。
output.type
的有效值是docker
,可推送到容器 registry,如 Docker Hub 或 Quay,或将镜像推送到内部 OpenShift ImageStream的镜像流
。要使用 ImageStream,必须将 ImageStream 资源部署到集群中。有关在 KafkaConnect 配置中指定build.output
的更多信息,请参阅在 OpenShift 中配置 AMQ Streams 中的 AMQ Streams Build schema 参考。5
插件配置
列出了您要包含在 Kafka Connect 镜像中的所有连接器。对于列表中的每个条目,指定一个插件名称
,以及有关构建连接器所需的工件的信息。另外,对于每个连接器插件,您还可以包含您要与连接器一起使用的其他组件。例如,您可以添加 Service Registry 工件或 Debezium 脚本组件。6
artifacts.type
的值指定artifacts.url
中指定的工件的文件类型。有效类型是zip
、tgz
或jar
。Debezium 连接器存档以.zip
文件格式提供。type
值必须与url
字段中引用的文件类型匹配。7
artifacts.url
的值指定 HTTP 服务器的地址,如 Maven 存储库,用于存储连接器工件的文件。Debezium 连接器工件位于 Red Hat Maven 存储库中。OpenShift 集群必须有权访问指定的服务器。8
(可选)指定下载 Service Registry 组件的工件
类型和
url
。包括 Service Registry 工件,只有在您希望连接器使用 Apache Avro 与 Service Registry 序列化事件键和值时,而不是使用默认的 JSON converter。9
(可选)指定 Debezium 脚本 SMT 归档的工件
类型和
url
,以用于 Debezium 连接器。只有在打算使用 Debezium 基于内容的路由 SMT 或 过滤 SMT 时使用脚本 SMT 时,才包含脚本 SMT,您必须部署 JSR 223 兼容脚本实施,如 groovy。10
(可选)为 JSR 223 兼容脚本实现的 JAR 文件指定工件
类型和
url
,这是 Debezium 脚本 SMT 所需的。重要如果您使用 AMQ Streams 将连接器插件合并到 Kafka Connect 镜像中,每个所需脚本语言组件
artifacts.url
必须指定 JAR 文件的位置,而artifacts.type
的值还必须设置为jar
。无效的值会导致连接器在运行时失败。要启用使用带有脚本 SMT 的 Apache Groovy 语言,示例中的自定义资源会检索以下库的 JAR 文件:
-
groovy
-
Groovy-jsr223
(协调代理) -
Groovy-json
(用于解析 JSON 字符串的模块)
作为替代方案,Debebe 脚本 SMT 还支持使用 GraalVM JavaScript 的 JSR 223 实现。
输入以下命令将
KafkaConnect
构建规格应用到 OpenShift 集群:oc create -f dbz-connect.yaml
根据自定义资源中指定的配置,Streams Operator 会准备要部署的 Kafka Connect 镜像。
构建完成后,Operator 将镜像推送到指定的 registry 或 ImageStream,并启动 Kafka Connect 集群。您配置中列出的连接器工件在集群中可用。创建一个
KafkaConnector
资源来定义您要部署的每个连接器的实例。
例如,创建以下KafkaConnector
CR,并将它保存为mongodb-inventory-connector.yaml
例 4.2. 为 Debezium 连接器定义
KafkaConnector
自定义资源的mongodb-inventory-connector.yaml
文件apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnector metadata: labels: strimzi.io/cluster: debezium-kafka-connect-cluster name: inventory-connector-mongodb 1 spec: class: io.debezium.connector.mongodb.MongoDbConnector 2 tasksMax: 1 3 config: 4 mongodb.hosts: rs0/192.168.99.100:27017 5 mongodb.user: debezium 6 mongodb.password: dbz 7 topic.prefix: inventory-connector-mongodb 8 collection.include.list: inventory[.]* 9
表 4.11. 连接器配置设置的描述 项 描述 1
使用 Kafka Connect 集群注册的连接器名称。
2
连接器类的名称。
3
可同时运行的任务数量。
4
连接器的配置。
5
主机数据库实例的地址和端口号。
7
Debezium 用于连接到数据库的帐户名称。
8
Debezium 用于连接到数据库用户帐户的密码。
8
数据库实例或集群的主题前缀。
指定的名称只能从字母数字字符或下划线括起。
由于主题前缀用作从这个连接器接收更改事件的任何 Kafka 主题的前缀,所以名称必须在集群中的连接器之间唯一。
此命名空间也用于相关的 Kafka Connect 模式的名称,如果您将连接器与 Avro 连接器集成,则对应的 Avro 模式的命名空间也用于。9
连接器从中捕获更改的集合名称。
运行以下命令来创建连接器资源:
oc create -n <namespace> -f <kafkaConnector>.yaml
例如,
oc create -n debezium -f {context}-inventory-connector.yaml
连接器注册到 Kafka Connect 集群,并开始针对
KafkaConnector
CR 中的spec.config.database.dbname
指定的数据库运行。连接器 pod 就绪后,Debezium 正在运行。
现在,您已准备好 验证 Debezium MongoDB 部署。
4.5.3. 通过从 Dockerfile 构建自定义 Kafka Connect 容器镜像来部署 Debezium MongoDB 连接器
要部署 Debezium MongoDB 连接器,您必须构建包含 Debezium 连接器存档的自定义 Kafka Connect 容器镜像,然后将此容器镜像推送到容器 registry。然后,创建两个自定义资源(CR):
-
定义 Kafka Connect 实例的
KafkaConnect
CR。CR 中的image
属性指定您创建用来运行 Debezium 连接器的容器镜像的名称。您可以将此 CR 应用到部署了 Red Hat AMQ Streams 的 OpenShift 实例。AMQ Streams 提供将 Apache Kafka 引入到 OpenShift 的 operator 和镜像。 -
定义 Debezium MongoDB 连接器的
KafkaConnector
CR。将此 CR 应用到应用KafkaConnect
CR 的同一 OpenShift 实例。
先决条件
- MongoDB 正在运行,您完成了 设置 MongoDB 的步骤以用于 Debezium 连接器。
- AMQ Streams 部署在 OpenShift 上,并运行 Apache Kafka 和 Kafka Connect。如需更多信息,请参阅在 OpenShift 中部署和升级 AMQ Streams。
- podman 或 Docker 已安装。
-
您有在容器 registry 中创建和管理容器(如
quay.io
或docker.io
)的帐户和权限,您要向其添加将运行 Debezium 连接器的容器。
流程
为 Kafka Connect 创建 Debezium MongoDB 容器:
创建一个 Dockerfile,它使用
registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.0-12
作为基础镜像。例如,在终端窗口中输入以下命令:cat <<EOF >debezium-container-for-mongodb.yaml 1 FROM registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.0-12 USER root:root RUN mkdir -p /opt/kafka/plugins/debezium 2 RUN cd /opt/kafka/plugins/debezium/ \ && curl -O https://maven.repository.redhat.com/ga/io/debezium/debezium-connector-mongodb/2.1.4.Final-redhat-00001/debezium-connector-mongodb-2.1.4.Final-redhat-00001-plugin.zip \ && unzip debezium-connector-mongodb-2.1.4.Final-redhat-00001-plugin.zip \ && rm debezium-connector-mongodb-2.1.4.Final-redhat-00001-plugin.zip RUN cd /opt/kafka/plugins/debezium/ USER 1001 EOF
项 描述 1
您可以指定您想要的任何文件名。
2
指定 Kafka Connect 插件目录的路径。如果您的 Kafka Connect 插件目录位于不同的位置,请将这个路径替换为您的目录的实际路径。
该命令在当前目录中创建一个名为
debezium-container-for-mongodb.yaml
的 Dockerfile。从您在上一步中创建的
debezium-container-for-mongodb.yaml
Docker 文件中构建容器镜像。在包含该文件的目录中,打开终端窗口并输入以下命令之一:podman build -t debezium-container-for-mongodb:latest .
docker build -t debezium-container-for-mongodb:latest .
上述命令使用名称
debezium-container-for-mongodb
构建容器镜像。将自定义镜像推送到容器 registry,如
quay.io
或内部容器 registry。容器 registry 必须可供部署镜像的 OpenShift 实例使用。输入以下命令之一:podman push <myregistry.io>/debezium-container-for-mongodb:latest
docker push <myregistry.io>/debezium-container-for-mongodb:latest
创建新的 Debezium MongoDB
KafkaConnect
自定义资源(CR)。例如,创建一个名为dbz-connect.yaml
的KafkaConnect
CR,用于指定注解和
镜像
属性。以下示例显示了来自dbz-connect.yaml
文件的摘录,该文件描述了KafkaConnect
自定义资源。
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect metadata: name: my-connect-cluster annotations: strimzi.io/use-connector-resources: "true" 1 spec: #... image: debezium-container-for-mongodb 2 ...
项 描述 1
metadata.annotations
表示KafkaConnector
资源用于配置在这个 Kafka Connect 集群中使用的 Cluster Operator。2
spec.image
指定您为运行 Debezium 连接器而创建的镜像名称。此属性覆盖 Cluster Operator 中的STRIMZI_DEFAULT_KAFKA_CONNECT_IMAGE
变量。输入以下命令将
KafkaConnect
CR 应用到 OpenShift Kafka Connect 环境:oc create -f dbz-connect.yaml
命令添加一个 Kafka Connect 实例,用于指定您为运行 Debezium 连接器而创建的镜像名称。
创建一个
KafkaConnector
自定义资源来配置 Debezium MongoDB 连接器实例。您可以在
.yaml
文件中配置 Debezium MongoDB 连接器,该文件指定连接器的配置属性。连接器配置可能会指示 Debezium 为 MongoDB 副本集或分片集群的子集生成更改事件。另外,您可以设置过滤不需要的集合的属性。以下示例配置了 Debezium 连接器,它连接到在
192.168.99.100
上的端口27017
处连接到 MongoDB 副本集rs0
,并捕获清单
集合中发生的更改。inventory-connector-mongodb
是副本集的逻辑名称。MongoDB
inventory-connector.yaml
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnector metadata: name: inventory-connector-mongodb 1 labels: strimzi.io/cluster: my-connect-cluster spec: class: io.debezium.connector.mongodb.MongoDbConnector 2 config: mongodb.connection.string: mongodb://192.168.99.100:27017/?replicaSet=rs0 3 topic.prefix: inventory-connector-mongodb 4 collection.include.list: inventory[.]* 5
- 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
- 用于在 Kafka Connect 中注册连接器的名称。
- 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
- MongoDB 连接器类的名称。
- 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
- 用于连接到 MongoDB 副本集的主机地址。
- 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
- MongoDB 副本集的逻辑名称,它组成了生成事件的命名空间,并在使用 Avro converter 时,用来写入的 Kafka 主题、Kafka Connect 模式名称和相应 Avro 模式的命名空间中使用。
- 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
- 与要监控的所有集合的集合命名空间(如 <dbName>.<collectionName>)匹配的正则表达式列表。
使用 Kafka Connect 创建连接器实例。例如,如果您将
KafkaConnector
资源保存到inventory-connector.yaml
文件中,您将运行以下命令:oc apply -f inventory-connector.yaml
上述命令注册
inventory-connector
,连接器开始针对KafkaConnector
CR 中定义的清单
集合运行。
有关您可以为 Debezium MongoDB 连接器设置的配置属性的完整列表,请参阅 MongoDB 连接器配置属性。
结果
连接器启动后,它会完成以下操作:
- 在 MongoDB 副本集中对集合执行一致的快照。
- 读取副本集的更改流。
- 为每个插入、更新和删除文档生成更改事件。
- 将事件记录更改为 Kafka 主题。
4.5.4. 验证 Debezium MongoDB 连接器是否正在运行
如果连接器正确启动且没有错误,它会为每个连接器配置为捕获的表创建一个主题。下游应用程序可以订阅这些主题以检索源数据库中发生的信息事件。
要验证连接器是否正在运行,您可以从 OpenShift Container Platform Web 控制台或 OpenShift CLI 工具(oc)执行以下操作:
- 验证连接器状态。
- 验证连接器是否生成主题。
- 验证主题是否填充了每个表初始快照过程中生成的读操作("op":"r")的事件。
先决条件
- Debezium 连接器部署到 OpenShift 上的 AMQ Streams。
-
已安装 OpenShift
oc
CLI 客户端。 - 访问 OpenShift Container Platform web 控制台。
流程
使用以下方法之一检查
KafkaConnector
资源的状态:在 OpenShift Container Platform Web 控制台中:
-
导航到 Home
Search。 -
在 Search 页面中,点 Resources 以打开 Select Resource 复选框,然后键入
KafkaConnector
。 - 在 KafkaConnectors 列表中,点您要检查的连接器的名称,如 inventory-connector-mongodb。
- 在 Conditions 部分中,验证 Type 和 Status 列中的值是否已设置为 Ready 和 True。
-
导航到 Home
在一个终端窗口中:
使用以下命令:
oc describe KafkaConnector <connector-name> -n <project>
例如,
oc describe KafkaConnector inventory-connector-mongodb -n debezium
该命令返回类似以下输出的状态信息:
例 4.3.
KafkaConnector
资源状态Name: inventory-connector-mongodb Namespace: debezium Labels: strimzi.io/cluster=debezium-kafka-connect-cluster Annotations: <none> API Version: kafka.strimzi.io/v1beta2 Kind: KafkaConnector ... Status: Conditions: Last Transition Time: 2021-12-08T17:41:34.897153Z Status: True Type: Ready Connector Status: Connector: State: RUNNING worker_id: 10.131.1.124:8083 Name: inventory-connector-mongodb Tasks: Id: 0 State: RUNNING worker_id: 10.131.1.124:8083 Type: source Observed Generation: 1 Tasks Max: 1 Topics: inventory-connector-mongodb.inventory inventory-connector-mongodb.inventory.addresses inventory-connector-mongodb.inventory.customers inventory-connector-mongodb.inventory.geom inventory-connector-mongodb.inventory.orders inventory-connector-mongodb.inventory.products inventory-connector-mongodb.inventory.products_on_hand Events: <none>
验证连接器是否已创建 Kafka 主题:
通过 OpenShift Container Platform Web 控制台。
-
导航到 Home
Search。 -
在 Search 页面中,点 Resources 打开 Select Resource 复选框,然后键入
KafkaTopic
。 -
在 KafkaTopics 列表中,点您要检查的主题的名称,例如
inventory-connector-mongodb.inventory.orders--ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d
。 - 在 Conditions 部分中,验证 Type 和 Status 列中的值是否已设置为 Ready 和 True。
-
导航到 Home
在一个终端窗口中:
使用以下命令:
oc get kafkatopics
该命令返回类似以下输出的状态信息:
例 4.4.
KafkaTopic
资源状态NAME CLUSTER PARTITIONS REPLICATION FACTOR READY connect-cluster-configs debezium-kafka-cluster 1 1 True connect-cluster-offsets debezium-kafka-cluster 25 1 True connect-cluster-status debezium-kafka-cluster 5 1 True consumer-offsets---84e7a678d08f4bd226872e5cdd4eb527fadc1c6a debezium-kafka-cluster 50 1 True inventory-connector-mongodb--a96f69b23d6118ff415f772679da623fbbb99421 debezium-kafka-cluster 1 1 True inventory-connector-mongodb.inventory.addresses---1b6beaf7b2eb57d177d92be90ca2b210c9a56480 debezium-kafka-cluster 1 1 True inventory-connector-mongodb.inventory.customers---9931e04ec92ecc0924f4406af3fdace7545c483b debezium-kafka-cluster 1 1 True inventory-connector-mongodb.inventory.geom---9f7e136091f071bf49ca59bf99e86c713ee58dd5 debezium-kafka-cluster 1 1 True inventory-connector-mongodb.inventory.orders---ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d debezium-kafka-cluster 1 1 True inventory-connector-mongodb.inventory.products---df0746db116844cee2297fab611c21b56f82dcef debezium-kafka-cluster 1 1 True inventory-connector-mongodb.inventory.products_on_hand---8649e0f17ffcc9212e266e31a7aeea4585e5c6b5 debezium-kafka-cluster 1 1 True schema-changes.inventory debezium-kafka-cluster 1 1 True strimzi-store-topic---effb8e3e057afce1ecf67c3f5d8e4e3ff177fc55 debezium-kafka-cluster 1 1 True strimzi-topic-operator-kstreams-topic-store-changelog---b75e702040b99be8a9263134de3507fc0cc4017b debezium-kafka-cluster 1 1 True
检查主题内容。
- 在终端窗口中输入以下命令:
oc exec -n <project> -it <kafka-cluster> -- /opt/kafka/bin/kafka-console-consumer.sh \ > --bootstrap-server localhost:9092 \ > --from-beginning \ > --property print.key=true \ > --topic=<topic-name>
例如,
oc exec -n debezium -it debezium-kafka-cluster-kafka-0 -- /opt/kafka/bin/kafka-console-consumer.sh \ > --bootstrap-server localhost:9092 \ > --from-beginning \ > --property print.key=true \ > --topic=inventory-connector-mongodb.inventory.products_on_hand
指定主题名称的格式与
oc describe
命令的格式在第 1 步中返回,例如inventory-connector-mongodb.inventory.addresses
。对于主题中的每个事件,命令会返回类似以下输出的信息:
例 4.5. Debezium 更改事件的内容
{"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"}],"optional":false,"name":"inventory-connector-mongodb.inventory.products_on_hand.Key"},"payload":{"product_id":101}} {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"},{"type":"int32","optional":false,"field":"quantity"}],"optional":true,"name":"inventory-connector-mongodb.inventory.products_on_hand.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"},{"type":"int32","optional":false,"field":"quantity"}],"optional":true,"name":"inventory-connector-mongodb.inventory.products_on_hand.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":true,"field":"table"},{"type":"int64","optional":false,"field":"server_id"},{"type":"string","optional":true,"field":"gtid"},{"type":"string","optional":false,"field":"file"},{"type":"int64","optional":false,"field":"pos"},{"type":"int32","optional":false,"field":"row"},{"type":"int64","optional":true,"field":"thread"},{"type":"string","optional":true,"field":"query"}],"optional":false,"name":"io.debezium.connector.mongodb.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"field":"transaction"}],"optional":false,"name":"inventory-connector-mongodb.inventory.products_on_hand.Envelope"},"payload":{"before":null,"after":{"product_id":101,"quantity":3},"source":{"version":"2.1.4.Final-redhat-00001","connector":"mongodb","name":"inventory-connector-mongodb","ts_ms":1638985247805,"snapshot":"true","db":"inventory","sequence":null,"table":"products_on_hand","server_id":0,"gtid":null,"file":"mongodb-bin.000003","pos":156,"row":0,"thread":null,"query":null},"op":"r","ts_ms":1638985247805,"transaction":null}}
在上例中,
有效负载
值显示连接器快照从表inventory.products_on_hand
中生成一个读取("op" ="r"
)事件。product_id
记录的"before"
状态为null
,这表示记录没有之前的值。"after"
状态对于product_id
为101
的项目的quantity
显示为3
。
4.5.5. Debezium MongoDB 连接器配置属性的描述
Debezium MongoDB 连接器有很多配置属性,您可以使用它们来实现应用程序的正确连接器行为。许多属性具有默认值。有关属性的信息按如下方式进行组织:
除非默认值可用 , 否则需要以下配置属性。
属性 | 默认 | 描述 |
---|---|---|
没有默认值 | 连接器的唯一名称。尝试再次使用相同的名称注册将失败。(所有 Kafka Connect 连接器都需要此属性。) | |
没有默认值 |
连接器的 Java 类的名称。对于 MongoDB 连接器,始终使用 | |
没有默认值 |
副本集中 MongoDB 服务器的主机名和端口对列表(格式为 'host' 或 'host:port')。列表可以包含单个主机名和端口对。如果 注意 必须提供当前的主地址是必需的。在下一个 Debezium 发行版本中会删除这个限制。 | |
没有默认值 |
指定连接器在 MongoDB 副本集的初始发现过程中使用的连接字符串。要使用这个选项,您必须将 注意
连接器只在初始副本集发现过程中使用此连接字符串。在此发现过程中,连接器会忽略在其他属性中指定的连接值( | |
没有默认值 |
标识此连接器和/或 MongoDB 副本集或分片集群的唯一名称。每个服务器都应该被最多一个 Debezium 连接器监控,因为这个服务器名称前缀的所有持久性 Kafka 主题都来自 MongoDB 副本集或集群。仅使用字母数字字符、连字符、句点和下划线组成名称。逻辑名称在所有其他连接器中应该是唯一的,因为名称用作命名从这个连接器接收记录的 Kafka 主题的前缀。 警告 不要更改此属性的值。如果您更改了 name 值,重启后,而不是继续向原始主题发出事件,连接器会将后续事件发送到名称基于新值的主题。 | |
没有默认值 | 连接到 MongoDB 时使用的数据库用户的名称。这只在将 MongoDB 配置为使用身份验证时才需要。 | |
没有默认值 | 连接到 MongoDB 时使用的密码。这只在将 MongoDB 配置为使用身份验证时才需要。 | |
|
包含 MongoDB 凭证的数据库(身份验证源)。这只有在 MongoDB 被配置为使用与 | |
| 连接器将使用 SSL 连接到 MongoDB 实例。 | |
|
启用 SSL 时,控制在连接阶段是否禁用严格的主机名检查。如果为 | |
空字符串 |
一个可选的正则表达式列表,与要监控的数据库名称匹配。默认情况下,所有数据库都会被监控。
要匹配数据库的名称,Debebe 应用 您指定的正则表达式。也就是说,指定的表达式与数据库的整个名称字符串匹配,它与数据库名称中可能存在的子字符串不匹配。 | |
空字符串 |
可选的正则表达式列表,与要在监控中排除的数据库名称匹配。当设置了
要匹配数据库的名称,Debebe 应用 您指定的正则表达式。也就是说,指定的表达式与数据库的整个名称字符串匹配,它与数据库名称中可能存在的子字符串不匹配。 | |
空字符串 |
可选的、以逗号分隔的正则表达式列表,与要监控的 MongoDB 集合的完全限定命名空间匹配。默认情况下,连接器会监控除
要匹配命名空间的名称,Debebe 应用 您指定的正则表达式。也就是说,指定的表达式与命名空间的整个名称字符串匹配,它与名称中的子字符串不匹配。 | |
空字符串 |
可选的正则表达式列表,与 MongoDB 集合的完全限定命名空间匹配,以便从监控中排除。当设置了
要匹配命名空间的名称,Debebe 应用 您指定的正则表达式。也就是说,指定的表达式与命名空间的整个名称字符串匹配,它与数据库名称中可能存在的子字符串不匹配。 | |
| 指定在连接器启动时执行快照的条件。将属性设置为以下值之一:
| |
|
指定连接器用于从 MongoDB 服务器捕获
| |
|
可选的、以逗号分隔的正则表达式列表,与您要包含在快照中的 schema 的完全限定名称(< 要匹配架构的名称,Debezium 应用您指定的正则表达式,以 替代 的正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配,它与 schema 名称中可能存在的子字符串不匹配。 | |
空字符串 | 可选的逗号分隔列表,字段的完全限定名称应不包括在更改事件消息值中。字段的完全限定域名格式为 databaseName.collectionName.fieldName.nestedFieldName,其中 databaseName 和 collectionName 可能包含与任何字符匹配的通配符。 | |
空字符串 | 可选的、以逗号分隔的字段列表,字段应用于重命名更改事件消息值中的字段。字段的完全限定替换格式为 databaseName.collectionName.fieldName.nestedFieldName:newNestedFieldName,其中 databaseName 和 collectionName 可能包含与任何字符匹配的通配符,冒号字符(:)用于决定重命名字段映射。下一字段替换将应用于列表中之前字段替换的结果,因此在重命名同一路径中的多个字段时请注意这一点。 | |
| 应该为此连接器创建的最大任务数量。MongoDB 连接器会尝试为每个副本集使用单独的任务,因此在将连接器与单个 MongoDB 副本集搭配使用时可以接受。当将连接器与 MongoDB 分片集群搭配使用时,我们建议指定一个等于集群中的分片数量的值,以便 Kafka Connect 可以分发每个副本集的工作。 | |
| 正整数值,用于指定用于在副本集中执行集合同步的最大线程数量。默认值为 1。 | |
|
控制 删除 事件是否随后是 tombstone 事件。 | |
没有默认值 |
连接器在启动后进行快照的间隔(毫秒)。 | |
|
指定在进行快照时应从一个集合中读取的最大文档数。连接器将以这个大小的多个批处理读取集合内容。 | |
none |
指定如何调整架构名称,以便与连接器使用的消息转换器兼容。可能的设置:
|
以下 高级配置 属性有很好的默认值,其在大多数情况下可以正常工作,因此很少需要在连接器配置中指定。
属性 | 默认 | 描述 |
---|---|---|
| 正整数值,用于指定在每个连接器迭代过程中应处理的每个批处理事件的最大大小。默认值为 2048。 | |
|
正整数值,用于指定阻塞队列可以保存的最大记录数。当 Debezium 从数据库读取事件时,它会将事件放置在阻塞队列中,然后再将它们写入 Kafka。当连接器将消息写入 Kafka 或 Kafka 不可用时,阻塞队列可以提供从数据库读取更改事件的后端。当连接器定期记录偏移时,队列中保存的事件会被忽略。始终将 | |
|
较长的整数值,指定块队列的最大卷(以字节为单位)。默认情况下,不会为阻塞队列指定卷限制。要指定队列可以使用的字节数,请将此属性设置为正长值。 | |
| 正整数值,用于指定连接器在每次迭代期间应该等待的毫秒数,以便显示新的更改事件。默认值为 500 毫秒,或 0.5 秒。 | |
| 正整数值,用于指定在第一次连接尝试或没有主连接可用后尝试重新连接到主时的初始延迟。默认值为 1 秒(1000 ms)。 | |
| 正整数值,用于指定在重复失败连接尝试或没有主连接可用后尝试重新连接到主数时的最大延迟。默认为 120 秒(120,000 ms)。 | |
|
正整数值,用于指定在发生异常和任务中止前尝试到副本集主的最大失败连接数。默认为 16,对于 | |
|
布尔值,指定 'mongodb.hosts' 中的地址是 seeds,它用于发现集群或副本集的所有成员( | |
|
控制发送心跳消息的频率。
将此参数设置为 | |
当连接器配置明确指定使用 Avro 的 | 字段名称是否被清理以遵守 Avro 命名要求。 | |
|
以逗号分隔的操作类型列表,这些类型将在流期间跳过。操作包括: | |
没有默认值 | 控制快照中包含的集合项目。此属性仅影响快照。以 databaseName.collectionName 格式指定以逗号分隔的集合名称列表。
对于您指定的每个集合,还要指定另一个配置属性: | |
|
当设置为 如需了解更多详细信息,请参阅事务元数据。 | |
10000 (10 秒) | 在发生可分配错误后重启连接器前要等待的毫秒数量。 | |
| 连接器轮询新的、删除或更改的副本集的时间间隔。 | |
10000 (10 秒) | 驱动程序在中止新连接尝试前等待的时间。 | |
10000 (10 秒) | 集群监控器试图访问每台服务器的频率。 | |
0 |
在超时发生前,套接字上的发送/接收前的毫秒数。 | |
30000 (30 秒) | 驱动程序在超时前等待选择服务器的毫秒数,并抛出错误。 | |
|
指定 oplog/change 流光标将等待服务器生成结果的最大毫秒数,然后再导致执行超时异常。值 | |
没有默认值 |
用于向连接器发送信号的数据收集的完全限定名称。https://access.redhat.com/documentation/zh-cn/red_hat_integration/2023.q2/html-single/debezium_user_guide/index#debezium-signaling-enabling-signaling使用以下格式指定集合名称: | |
|
连接器在增量快照块期间获取和读取内存的最大文档数。增加块大小可提高效率,因为快照会运行更大的快照查询。但是,较大的块大小还需要更多内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。 | |
|
应该用来确定数据更改的主题名称、模式更改、事务、心跳事件等的 TopicNamingStrategy 类的名称,默认为 | |
|
指定主题名称的分隔符,默认为 | |
| 用于在绑定并发哈希映射中保存主题名称的大小。此缓存有助于确定与给定数据收集对应的主题名称。 | |
|
控制连接器向发送心跳消息的主题名称。主题名称具有此模式: | |
|
控制连接器向发送事务元数据消息的主题名称。主题名称具有此模式: |