7.6. 部署 Debezium PostgreSQL 连接器


您可以使用以下任一方法部署 Debezium PostgreSQL 连接器:

7.6.1. 使用 AMQ Streams 部署 PostgreSQL 连接器

从 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 来检索信息。

7.6.2. 使用 AMQ Streams 部署 Debezium PostgreSQL 连接器

使用早期版本的 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

流程

  1. 登录 OpenShift 集群。
  2. 为连接器创建 Debezium KafkaConnect 自定义资源(CR),或修改现有的资源。例如,创建一个名为 dbz-connect.yamlKafkaConnect CR,用于指定 metadata.annotationsspec.build 属性。以下示例显示了来自 dbz-connect.yaml 文件的摘录,该文件描述了 KafkaConnect 自定义资源。

    例 7.1. dbz-connect.yaml 文件,该文件定义包含 Debezium 连接器的 KafkaConnect 自定义资源

    在以下示例中,自定义资源被配置为下载以下工件:

    • Debezium PostgreSQL 连接器存档。
    • 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-postgres
            artifacts:
              - type: zip 6
                url: https://maven.repository.redhat.com/ga/io/debezium/debezium-connector-postgres/2.1.4.Final-redhat-00001/debezium-connector-postgres-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
    
      ...
    表 7.23. 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 中指定的工件的文件类型。有效类型是 ziptgzjar。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 实现。

  3. 输入以下命令将 KafkaConnect 构建规格应用到 OpenShift 集群:

    oc create -f dbz-connect.yaml

    根据自定义资源中指定的配置,Streams Operator 会准备要部署的 Kafka Connect 镜像。
    构建完成后,Operator 将镜像推送到指定的 registry 或 ImageStream,并启动 Kafka Connect 集群。您配置中列出的连接器工件在集群中可用。

  4. 创建一个 KafkaConnector 资源来定义您要部署的每个连接器的实例。
    例如,创建以下 KafkaConnector CR,并将它保存为 postgresql-inventory-connector.yaml

    例 7.2. 为 Debezium 连接器定义 KafkaConnector 自定义资源的 postgresql-inventory-connector.yaml 文件

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnector
    metadata:
      labels:
        strimzi.io/cluster: debezium-kafka-connect-cluster
      name: inventory-connector-postgresql 1
    spec:
      class: io.debezium.connector.postgresql.PostgresConnector 2
      tasksMax: 1  3
      config:  4
        database.hostname: postgresql.debezium-postgresql.svc.cluster.local 5
        database.port: 5432   6
        database.user: debezium  7
        database.password: dbz  8
        database.dbname: mydatabase 9
        topic.prefix: inventory-connector-postgresql 10
        table.include.list: public.inventory  11
    
        ...
    表 7.24. 连接器配置设置的描述
    描述

    1

    使用 Kafka Connect 集群注册的连接器名称。

    2

    连接器类的名称。

    3

    可同时运行的任务数量。

    4

    连接器的配置。

    5

    主机数据库实例的地址。

    6

    数据库实例的端口号。

    7

    Debezium 用于连接到数据库的帐户名称。

    8

    Debezium 用于连接到数据库用户帐户的密码。

    9

    要从中捕获更改的数据库名称。

    10

    数据库实例或集群的主题前缀。
    指定的名称只能从字母数字字符或下划线括起。
    由于主题前缀用作从这个连接器接收更改事件的任何 Kafka 主题的前缀,所以名称必须在集群中的连接器之间唯一。
    此命名空间也用于相关的 Kafka Connect 模式的名称,如果您将连接器与 Avro 连接器集成,则对应的 Avro 模式的命名空间也用于。

    11

    连接器从中捕获更改事件的表列表。

  5. 运行以下命令来创建连接器资源:

    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 PostgreSQL 部署

7.6.3. 通过从 Dockerfile 构建自定义 Kafka Connect 容器镜像来部署 Debezium PostgreSQL 连接器

要部署 Debezium PostgreSQL 连接器,您需要构建包含 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 Db2 连接器的 KafkaConnector CR。将此 CR 应用到应用 KafkaConnect CR 的相同 OpenShift 实例。

先决条件

流程

  1. 为 Kafka Connect 创建 Debezium PostgreSQL 容器:

    1. 创建一个 Dockerfile,它使用 registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.0-12 作为基础镜像。例如,在终端窗口中输入以下命令:

      cat <<EOF >debezium-container-for-postgresql.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-postgres/2.1.4.Final-redhat-00001/debezium-connector-postgres-2.1.4.Final-redhat-00001-plugin.zip \
      && unzip debezium-connector-postgres-2.1.4.Final-redhat-00001-plugin.zip \
      && rm debezium-connector-postgres-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-postgresql.yaml 的 Dockerfile。

    2. 从您在上一步中创建的 debezium-container-for-postgresql.yaml Docker 文件中构建容器镜像。在包含该文件的目录中,打开终端窗口并输入以下命令之一:

      podman build -t debezium-container-for-postgresql:latest .
      docker build -t debezium-container-for-postgresql:latest .

      build 命令构建名为 debezium-container-for-postgresql 的容器镜像。

    3. 将自定义镜像推送到容器 registry,如 quay.io 或内部容器 registry。容器 registry 必须可供部署镜像的 OpenShift 实例使用。输入以下命令之一:

      podman push <myregistry.io>/debezium-container-for-postgresql:latest
      docker push <myregistry.io>/debezium-container-for-postgresql:latest
    4. 创建新的 Debezium PostgreSQL KafkaConnect 自定义资源(CR)。例如,创建一个名为 dbz-connect.yamlKafkaConnect 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-postgresql 2
      
        ...
      描述

      1

      metadata.annotations 表示 KafkaConnector 资源用于配置在这个 Kafka Connect 集群中使用的 Cluster Operator。

      2

      spec.image 指定您为运行 Debezium 连接器而创建的镜像名称。此属性覆盖 Cluster Operator 中的 STRIMZI_DEFAULT_KAFKA_CONNECT_IMAGE 变量。

    5. 运行以下命令,将 KafkaConnect CR 应用到 OpenShift Kafka 实例:

      oc create -f dbz-connect.yaml

      这会更新 OpenShift 中的 Kafka Connect 环境,以添加 Kafka Connector 实例,用于指定您为运行 Debezium 连接器而创建的镜像名称。

  2. 创建一个 KafkaConnector 自定义资源来配置 Debezium PostgreSQL 连接器实例。

    您可以在 .yaml 文件中配置 Debezium PostgreSQL 连接器,该文件指定连接器的配置属性。连接器配置可能会指示 Debezium 为 schema 和表的子集生成事件,或者可能会设置属性,以便 Debezium 忽略敏感、太大或不需要的指定栏中的值。有关您可以为 Debezium PostgreSQL 连接器设置的配置属性的完整列表,请参阅 PostgreSQL 连接器属性

    以下示例显示了一个自定义资源的摘录,该资源在端口 5432 上配置 Debezium 连接器,连接到 PostgreSQL 服务器主机 192.168.99.100。此主机有一个名为 sampledb 的数据库,名为 public 的模式,inventory-connector-postgresql 是服务器的逻辑名称。

    inventory-connector.yaml

    apiVersion: kafka.strimzi.io/v1beta2
      kind: KafkaConnector
      metadata:
        name: inventory-connector-postgresql  1
        labels:
          strimzi.io/cluster: my-connect-cluster
      spec:
        class: io.debezium.connector.postgresql.PostgresConnector
        tasksMax: 1  2
        config:  3
          database.hostname: 192.168.99.100   4
          database.port: 5432
          database.user: debezium
          database.password: dbz
          database.dbname: sampledb
          topic.prefix: inventory-connector-postgresql   5
          schema.include.list: public   6
          plugin.name: pgoutput    7
    
          ...

    1 1 1 1 1
    连接器的名称。
    2 2 2 2 2
    任何时候只能有一个任务。由于 PostgreSQL 连接器读取 PostgreSQL 服务器的 binlog,因此使用单一连接器任务可以确保正确的顺序和事件处理。Kafka Connect 服务使用连接器启动一个或多个可以正常工作的任务,并在 Kafka Connect 服务集群中自动分发运行的任务。如果有任何服务停止或崩溃,这些任务将重新分发到运行的服务。
    3 3 3
    连接器的配置。
    4 4 4
    运行 PostgreSQL 服务器的数据库主机的名称。在本例中,数据库主机名为 192.168.99.100
    5 5 5
    唯一的主题前缀。服务器名称是 PostgreSQL 服务器或服务器集群的逻辑标识符。此名称用作接收更改事件记录的所有 Kafka 主题的前缀。
    6 6 6
    连接器只捕获 公共 模式中的更改。可以配置连接器来捕获您选择的表中的更改。如需更多信息,请参阅 table.include.list
    7 7 7
    在 PostgreSQL 服务器上安装 PostgreSQL 逻辑解码插件的名称。虽然 PostgreSQL 10 及更新版本唯一支持的值是 pgoutput,但您必须将 plugin.name 明确设置为 pgoutput
  3. 使用 Kafka Connect 创建连接器实例。例如,如果您将 KafkaConnector 资源保存到 inventory-connector.yaml 文件中,您将运行以下命令:

    oc apply -f inventory-connector.yaml

    这会注册 inventory-connector,连接器开始针对 KafkaConnector CR 中定义的 sampledb 数据库运行。

结果

连接器启动后,它会对配置了连接器的 PostgreSQL 服务器数据库 执行一致的快照。然后,连接器开始为行级操作生成数据更改事件,并将事件记录流传输到 Kafka 主题。

7.6.4. 验证 Debezium PostgreSQL 连接器是否正在运行

如果连接器正确启动且没有错误,它会为每个连接器配置为捕获的表创建一个主题。下游应用程序可以订阅这些主题以检索源数据库中发生的信息事件。

要验证连接器是否正在运行,您可以从 OpenShift Container Platform Web 控制台或 OpenShift CLI 工具(oc)执行以下操作:

  • 验证连接器状态。
  • 验证连接器是否生成主题。
  • 验证主题是否填充了每个表初始快照过程中生成的读操作("op":"r")的事件。

先决条件

  • Debezium 连接器部署到 OpenShift 上的 AMQ Streams。
  • 已安装 OpenShift oc CLI 客户端。
  • 访问 OpenShift Container Platform web 控制台。

流程

  1. 使用以下方法之一检查 KafkaConnector 资源的状态:

    • 在 OpenShift Container Platform Web 控制台中:

      1. 导航到 Home Search
      2. Search 页面中,点 Resources 以打开 Select Resource 复选框,然后键入 KafkaConnector
      3. KafkaConnectors 列表中,点您要检查的连接器的名称,如 inventory-connector-postgresql
      4. Conditions 部分中,验证 TypeStatus 列中的值是否已设置为 ReadyTrue
    • 在一个终端窗口中:

      1. 使用以下命令:

        oc describe KafkaConnector <connector-name> -n <project>

        例如,

        oc describe KafkaConnector inventory-connector-postgresql -n debezium

        该命令返回类似以下输出的状态信息:

        例 7.3. KafkaConnector 资源状态

        Name:         inventory-connector-postgresql
        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-postgresql
            Tasks:
              Id:               0
              State:            RUNNING
              worker_id:        10.131.1.124:8083
            Type:               source
          Observed Generation:  1
          Tasks Max:            1
          Topics:
            inventory-connector-postgresql.inventory
            inventory-connector-postgresql.inventory.addresses
            inventory-connector-postgresql.inventory.customers
            inventory-connector-postgresql.inventory.geom
            inventory-connector-postgresql.inventory.orders
            inventory-connector-postgresql.inventory.products
            inventory-connector-postgresql.inventory.products_on_hand
        Events:  <none>
  2. 验证连接器是否已创建 Kafka 主题:

    • 通过 OpenShift Container Platform Web 控制台。

      1. 导航到 Home Search
      2. Search 页面中,点 Resources 打开 Select Resource 复选框,然后键入 KafkaTopic
      3. KafkaTopics 列表中,点您要检查的主题的名称,例如 inventory-connector-postgresql.inventory.orders--ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d
      4. Conditions 部分中,验证 TypeStatus 列中的值是否已设置为 ReadyTrue
    • 在一个终端窗口中:

      1. 使用以下命令:

        oc get kafkatopics

        该命令返回类似以下输出的状态信息:

        例 7.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-postgresql--a96f69b23d6118ff415f772679da623fbbb99421                               debezium-kafka-cluster   1            1                    True
        inventory-connector-postgresql.inventory.addresses---1b6beaf7b2eb57d177d92be90ca2b210c9a56480          debezium-kafka-cluster   1            1                    True
        inventory-connector-postgresql.inventory.customers---9931e04ec92ecc0924f4406af3fdace7545c483b          debezium-kafka-cluster   1            1                    True
        inventory-connector-postgresql.inventory.geom---9f7e136091f071bf49ca59bf99e86c713ee58dd5               debezium-kafka-cluster   1            1                    True
        inventory-connector-postgresql.inventory.orders---ac5e98ac6a5d91e04d8ec0dc9078a1ece439081d             debezium-kafka-cluster   1            1                    True
        inventory-connector-postgresql.inventory.products---df0746db116844cee2297fab611c21b56f82dcef           debezium-kafka-cluster   1            1                    True
        inventory-connector-postgresql.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
  3. 检查主题内容。

    • 在终端窗口中输入以下命令:
    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-postgresql.inventory.products_on_hand

    指定主题名称的格式与 oc describe 命令的格式在第 1 步中返回,例如 inventory-connector-postgresql.inventory.addresses

    对于主题中的每个事件,命令会返回类似以下输出的信息:

    例 7.5. Debezium 更改事件的内容

    {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"product_id"}],"optional":false,"name":"inventory-connector-postgresql.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-postgresql.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-postgresql.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.postgresql.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-postgresql.inventory.products_on_hand.Envelope"},"payload":{"before":null,"after":{"product_id":101,"quantity":3},"source":{"version":"2.1.4.Final-redhat-00001","connector":"postgresql","name":"inventory-connector-postgresql","ts_ms":1638985247805,"snapshot":"true","db":"inventory","sequence":null,"table":"products_on_hand","server_id":0,"gtid":null,"file":"postgresql-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_id101 的项目的 quantity 显示为 3

7.6.5. Debezium PostgreSQL 连接器配置属性的描述

Debezium PostgreSQL 连接器有许多配置属性,您可以使用它们来实现应用程序的正确连接器行为。许多属性具有默认值。有关属性的信息按如下方式进行组织:

除非默认值可用 否则需要以下配置属性。

表 7.25. 所需的连接器配置属性
属性默认描述

name

没有默认值

连接器的唯一名称。尝试再次使用相同的名称注册将失败。所有 Kafka Connect 连接器都需要此属性。

connector.class

没有默认值

连接器的 Java 类的名称。对于 PostgreSQL 连接器,始终使用 io.debezium.connector.postgresql.PostgresConnector 的值。

tasks.max

1

应该为此连接器创建的最大任务数量。PostgreSQL 连接器始终使用单个任务,因此不要使用这个值,因此始终可以接受默认值。

plugin.name

decoderbufs

在 PostgreSQL 服务器上安装 PostgreSQL 逻辑解码插件的名称

唯一支持的值是 pgoutput。您必须将 plugin.name 明确设置为 pgoutput

slot.name

debezium

为特定数据库/架构的特定插件创建的 PostgreSQL 逻辑解码插槽的名称。服务器使用此插槽将事件流传输到您要配置的 Debezium 连接器。

插槽名称必须符合 PostgreSQL 复制插槽命名规则它的状态:"每个复制插槽都有一个名称,可以包含小写字母、数字和下划线字符"。

slot.drop.on.stop

false

当连接器以安全、预期的方式停止时,是否删除逻辑复制插槽。默认行为是,当连接器停止时,复制插槽仍然为连接器配置。当连接器重启时,具有相同的复制插槽可让连接器在离开的地方开始处理。

仅在测试或开发环境中设置为 true。丢弃插槽可让数据库丢弃 WAL 段。当连接器重启时,它会执行新的快照,或者可以从 Kafka Connect offsets 主题中的持久偏移中继续。

publication.name

dbz_publication

使用 pgoutput 时为流更改创建的 PostgreSQL 出版物名称。

如果尚未存在且 包含所有表,则在启动时会创建此发布。然后,Debezium 应用自己的 include/exclude 列表过滤(如果已配置),以限制发布以更改感兴趣的事件。连接器用户必须有超级用户权限才能创建此发布,因此通常会在首次启动连接器前创建发布。

如果发布已存在,对于所有表,或配置了表子集,Debezium 会使用其定义发布。

database.hostname

没有默认值

PostgreSQL 数据库服务器的 IP 地址或主机名。

database.port

5432

PostgreSQL 数据库服务器的整数端口号。

database.user

没有默认值

用于连接到 PostgreSQL 数据库服务器的 PostgreSQL 数据库用户的名称。

database.password

没有默认值

连接到 PostgreSQL 数据库服务器时要使用的密码。

database.dbname

没有默认值

要从中流传输更改的 PostgreSQL 数据库的名称。

topic.prefix

没有默认值

为 Debezium 捕获更改的特定 PostgreSQL 数据库服务器或集群提供命名空间的主题前缀。前缀在所有其他连接器中应该是唯一的,因为它用作从这个连接器接收记录的所有 Kafka 主题的主题名称前缀。数据库服务器逻辑名称中只能使用字母数字字符、连字符、句点和下划线。

警告

不要更改此属性的值。如果您更改了 name 值,重启后,而不是继续向原始主题发出事件,连接器会将后续事件发送到名称基于新值的主题。

schema.include.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与您要 捕获更改的模式的名称匹配。任何未包含在 schema. include.list 中的模式 名称都不包括在捕获其更改的情况下。默认情况下,所有非系统模式都会捕获其更改。

要匹配架构的名称,Debezium 应用您指定的正则表达式,以 替代 的正则表达式。也就是说,指定的表达式与架构的完整标识符匹配,它与 schema 名称中可能存在的子字符串不匹配。
如果您在配置中包含此属性,不要设置 schema.exclude.list 属性。

schema.exclude.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与 您不想 捕获更改的模式的名称匹配。任何名称没有包含在 schema. exclude.list 中的模式 都会捕获其更改,但系统模式除外。

要匹配架构的名称,Debezium 应用您指定的正则表达式,以 替代 的正则表达式。也就是说,指定的表达式与架构的完整标识符匹配,它与 schema 名称中可能存在的子字符串不匹配。
如果您在配置中包含此属性,请不要设置 schema.include.list 属性。

table.include.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与您要捕获更改的表的完全限定表标识符匹配。当设置此属性时,连接器只从指定的表中捕获更改。每个标识符的格式都是 schemaNametableName。默认情况下,连接器捕获捕获更改的每个模式中的每个非系统表中的更改。

要匹配表的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与表的整个标识符匹配;它与表名称中可能存在的子字符串不匹配。
如果您在配置中包含此属性,不要设置 table.exclude.list 属性。

table.exclude.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与您不想捕获更改的表的完全限定表标识符匹配。每个标识符的格式都是 schemaNametableName。当设置此属性时,连接器会捕获您指定的每个表中的更改。

要匹配表的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与表的整个标识符匹配;它与表名称中可能存在的子字符串不匹配。
如果您在配置中包含此属性,请不要设置 table.include.list 属性。

column.include.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与应包含在更改事件记录值中的列的完全限定名称匹配。列的完全限定域名格式为 schemaNametableName.columnName

要匹配列的名称,Debebe 应用您指定的正则表达式。也就是说,表达式用于匹配列的整个名称字符串;它与列名称中可能存在的子字符串不匹配。
如果您在配置中包含此属性,不要设置 column.exclude.list 属性。

column.exclude.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与应该从更改事件记录值中排除的列的完全限定名称匹配。列的完全限定域名格式为 schemaNametableName.columnName

要匹配列的名称,Debebe 应用您指定的正则表达式。也就是说,表达式用于匹配列的整个名称字符串;它与列名称中可能存在的子字符串不匹配。
如果您在配置中包含此属性,请不要设置 column.include.list 属性。

time.precision.mode

适应性

时间、日期和时间戳可以通过不同类型的精度表示:

adaptive 捕获数据库中的时间和时间戳值,使用 millisecond、microsecond 或 nanosecond 精度值基于数据库列的类型。

adaptive_time_microseconds 捕获数据库中的时间、日期和时间戳值,与数据库列的 millisecond、microsecond 或 nanosecond 精度值相同。一个例外是 TIME 类型字段,它总是以微秒的形式捕获。

connect 始终通过使用 Kafka Connect 的内置表示 Time,Date, 和 Timestamp,无论数据库列的精度是什么,它都使用 millisecond 精度。如需更多信息,请参阅 临时值

decimal.handling.mode

精确

指定连接器应该如何处理 DECIMALNUMERIC 列的值:

使用 java.math.BigDecimal 代表更改事件中的值。

使用 值代表值,这可能会导致精度丢失,但更易于使用。

字符串 编码为格式的字符串。 这些易于使用,但缺少实际类型的语义信息。如需更多信息,请参阅 Decimal 类型

hstore.handling.mode

map

指定连接器应该如何处理 hstore 列:

映射 使用 MAP 代表值。

json 代表使用 json 字符串 代表值。此设置将值编码为格式的字符串,如 {"key" : "val"}。如需更多信息,请参阅 PostgreSQL HSTORE 类型

interval.handling.mode

numeric

指定连接器应该如何处理 interval 列的值:

数字代表使用大约微秒数的间隔。

字符串通过使用字符串 模式表示 P<years>Y<months>M<days>DT<hours>H<minutes>M<seconds>S 代表间隔。例如: P1Y2M3DT4H5M6.78S。如需更多信息,请参阅 PostgreSQL 基本类型

database.sslmode

disable

是否使用加密连接到 PostgreSQL 服务器。选项包括:

disable 使用未加密的连接。

需要使用 安全(加密)连接,如果无法建立它,则

verify-ca 的行为与 需要,但还根据配置的证书颁发机构(CA)证书验证服务器 TLS 证书,或者如果没有找到有效的匹配 CA 证书。

verify-full 的行为(如 verify-ca )验证服务器证书是否与配置的证书颁发机构(CA)证书匹配,或者如果没有找到有效的匹配 CA 证书。verify-full 的行为类似于 verify-ca,但还会验证服务器证书是否与配置的证书颁发机构(CA)证书的连接。如需更多信息 ,请参阅 PostgreSQL 文档

database.sslcert

没有默认值

包含客户端的 SSL 证书的文件的路径。如需更多信息 ,请参阅 PostgreSQL 文档

database.sslkey

没有默认值

包含客户端 SSL 私钥的文件的路径。如需更多信息 ,请参阅 PostgreSQL 文档

database.sslpassword

没有默认值

database.sslkey 指定的文件访问客户端私钥的密码。如需更多信息 ,请参阅 PostgreSQL 文档

database.sslrootcert

没有默认值

包含服务器验证的根证书的文件路径。如需更多信息 ,请参阅 PostgreSQL 文档

database.tcpKeepAlive

true

启用 TCP keep-alive 探测以验证数据库连接是否仍然处于活动状态。如需更多信息 ,请参阅 PostgreSQL 文档

tombstones.on.delete

true

控制 删除 事件是否随后是 tombstone 事件。

true - 删除操作由 delete 事件和后续 tombstone 事件表示。

false - 仅发出 delete 事件。

删除源记录后,发出 tombstone 事件(默认行为)后,如果为主题启用了 日志压缩,则 Kafka 可以完全删除与已删除行键相关的所有事件。

column.truncate.to.length.chars

不适用

一个可选的、以逗号分隔的正则表达式列表,与基于字符的列的完全限定名称匹配。如果您要在一组列中超过属性名称中指定的字符数时,设置此属性。length 设置为正整数值,例如 column.truncate.to.20.chars

列的完全限定域名会观察以下格式:< schemaName > . <tableName> . & lt;columnName&gt;。要匹配列的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配列名称中可能存在的子字符串。

您可以在单个配置中指定多个长度不同的属性。

column.mask.with.length.chars

不适用

一个可选的、以逗号分隔的正则表达式列表,与基于字符的列的完全限定名称匹配。如果您希望连接器屏蔽一组列的值,例如,如果它们包含敏感数据,则设置此属性。将 length 设置为正整数,将指定列中的数据替换为属性名称中 长度 指定的星号(DSL)字符数。length 设为 0 ( 零)将指定列中的数据替换为空字符串。

列的完全限定域名会观察以下格式: schemaName.tableName.columnName。要匹配列的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配列名称中可能存在的子字符串。

您可以在单个配置中指定多个长度不同的属性。

column.mask.hash.hashAlgorithm.with.salt.salt; hash- hash.v2.hashAlgorithm.with.salt.salt

不适用

一个可选的、以逗号分隔的正则表达式列表,与基于字符的列的完全限定名称匹配。列的完全限定域名格式为 < schemaName>。<tableName & gt; . <columnName&gt;。
要匹配 column Debezium 的名称,请应用您指定为 正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配列名称中可能存在的子字符串。在生成的更改事件记录中,指定列的值替换为 pseudonyms。

一个 pseudonym,它包括了通过应用指定的 hashAlgorithmsalt 的结果的哈希值。根据使用的 hash 功能,会维护引用完整性,而列值则替换为伪nyms。支持的哈希功能在 Java Cryptography 架构标准算法名称文档中的 MessageDigest 部分 进行了描述。

在以下示例中,CzQMA0cB5K 是一个随机选择的 salt。

column.mask.hash.SHA-256.with.salt.CzQMA0cB5K = inventory.orders.customerName, inventory.shipment.customerName

如有必要,伪的nym 会自动缩短到列的长度。连接器配置可以包含多个指定不同哈希算法和 salt 的属性。

根据使用的 hashAlgorithm、选择 salt 以及实际数据集,生成的数据集可能无法完全屏蔽。

如果该值在不同的位置或系统中被哈希化,则应使用哈希策略版本 2 来确保光纤。

column.propagate.source.type

不适用

可选的、以逗号分隔的正则表达式列表,它与您希望连接器发送代表列元数据的完全限定名称匹配。当设置此属性时,连接器会将以下字段添加到事件记录的架构中:

  • __debezium.source.column.type
  • __debezium.source.column.length
  • __debezium.source.column.scale

这些参数分别传播列的原始类型和长度(用于变量带宽类型)。
启用连接器发送这个额外数据有助于正确调整接收器数据库中的特定数字或基于字符的列。

列的完全限定域名会观察以下格式之一: databaseName.tableName.columnName, 或 databaseName.schemaName.tableName.columnName.
要匹配列的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配列名称中可能存在的子字符串。

datatype.propagate.source.type

不适用

可选的、以逗号分隔的正则表达式列表,用于指定为数据库列定义的数据类型的完全限定名称。当设置此属性时,对于具有匹配数据类型的列,连接器会发出事件记录,该记录在 schema 中包含以下额外字段:

  • __debezium.source.column.type
  • __debezium.source.column.length
  • __debezium.source.column.scale

这些参数分别传播列的原始类型和长度(用于变量带宽类型)。
启用连接器发送这个额外数据有助于正确调整接收器数据库中的特定数字或基于字符的列。

列的完全限定域名会观察以下格式之一: databaseName.tableName.typeName, 或 databaseName.schemaName.tableName.typeName.
要匹配数据类型的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与数据类型的整个名称字符串匹配;表达式不匹配类型名称中可能存在的子字符串。

有关 PostgreSQL 特定数据类型名称的列表,请查看 PostgreSQL 数据类型映射

message.key.columns

空字符串

指定连接器用来组成自定义消息键的表达式列表,以更改它发布到指定表的 Kafka 主题的事件记录。

默认情况下,Debezium 使用表的主键列作为它发出的记录的消息键。对于缺少主密钥的表,或者指定缺少主密钥的表的密钥,您可以根据一个或多个列配置自定义消息密钥。

要为表建立自定义消息键,请列出表,后跟要用作消息键的列。每个列表条目的格式都是:

<fully-qualified_tableName > : &lt;keyColumn > ,<keyColumn>

to a table key on multiple 列名称,在列名称之间插入逗号。

每个完全限定表名称都是正则表达式,格式为:

<schemaName >。&lt;tableName>

属性可以包含多个表的条目。使用分号分隔列表中的表条目。

以下示例为表 inventory.customerspurchase.orders:

inventory 设置了消息键。customers:pk1,pk2; (rhacm).purchaseorders:pk3,pk4

用于表 清单。客户,列 pk1pk2 被指定为 message 键。对于任意 模式中的订购 表,列 pk3pk4 服务器作为消息键。

对您用来创建自定义消息键的列数没有限制。但是,最好使用指定唯一密钥所需的最小数量。

publication.autocreate.mode

all_tables

仅在使用 pgoutput 插件 更改时应用流更改。该设置决定了 发布 的创建方式应如何工作。指定以下值之一:

all_tables - 如果存在发布,则连接器会使用它。如果不存在发布,连接器会为连接器捕获更改的数据库中的所有表创建一个发布。要使连接器创建发布,它必须通过有权创建发布并执行复制的数据库用户帐户访问数据库。您可以使用以下 SQL 命令 CREATE PUBLICATION <publication_name> FOR ALL TABLES;

disabled - 连接器不会尝试创建发布。在运行连接器前,必须已创建了用于执行复制的数据库管理员或用户。如果连接器无法找到发布,连接器会抛出异常并停止。

过滤 - 如果一个 发布存在,则连接器将使用它。如果不存在发布,连接器会为表创建一个新的发布,该表与 schema.include.listschema.exclude.listtable.include.list 配置属性指定的当前过滤器配置属性匹配。例如: CREATE PUBLICATION <publication_name> FOR TABLE <tbl1, tbl2, tbl3>。如果存在发布,连接器会更新与当前过滤器配置匹配的表的发布。例如:ALTER PUBLICATION <publication_name> SET TABLE <tbl1, tbl2, tbl3>

binary.handling.mode

bytes

指定二进制(字节)列在更改事件中代表:

字节 表示二进制数据作为字节数组。

base64 代表二进制数据作为 base64 编码的字符串。

base64-url-safe 代表二进制数据作为 base64-url-safe-encoded 字符串。

hex 代表二进制数据,以十六进制编码(base16)字符串。

schema.name.adjustment.mode

none

指定如何调整架构名称,以便与连接器使用的消息转换器兼容。可能的设置:

  • none 不适用任何调整。
  • Avro 将 Avro 类型名称中使用的字符替换为下划线。

money.fraction.digits

2

指定在将 Postgres 领导类型转换为 java.math.BigDecimal 时应使用的十进制数字,它代表更改事件中的值。仅在将 decimal.handling.mode 设置为 precise 时适用。

message.prefix.include.list

没有默认值

可选的、以逗号分隔的正则表达式列表,与您希望连接器捕获的逻辑解码消息前缀的名称匹配。默认情况下,连接器捕获所有逻辑解码信息。当设置此属性时,连接器只捕获具有属性指定的前缀的逻辑解码消息。所有其他逻辑解码信息都会被排除。

要匹配消息前缀的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与整个消息前缀长度匹配;表达式与前缀中可能存在的子字符串不匹配。

如果您在配置中包含此属性,不要设置 message.prefix.exclude.list 属性。

有关 消息 事件结构及其排序语义的信息,请参考 消息 事件

message.prefix.exclude.list

没有默认值

可选的、以逗号分隔的正则表达式列表,它与您不想连接器捕获的逻辑解码消息前缀的名称匹配。当设置此属性时,连接器不会捕获使用指定前缀的逻辑解码消息。所有其他消息都会被捕获。
要排除所有逻辑解码消息,请将此属性的值设置为 IANA

要匹配消息前缀的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与整个消息前缀长度匹配;表达式与前缀中可能存在的子字符串不匹配。

如果您在配置中包含此属性,不要设置 message.prefix.include.list 属性。

有关 消息 事件结构及其排序语义的信息,请参考 消息 事件

以下 高级配置 属性具有在大多数情况下工作的默认值,因此很少需要在连接器配置中指定。

表 7.26. 高级连接器配置属性
属性默认描述

converters

没有默认值

枚举连接器可以使用 的自定义转换器 实例的符号名称的逗号分隔列表。例如,

isbn

您必须设置 converters 属性,以便连接器使用自定义转换器。

对于您为连接器配置的每个转换器,还必须添加一个 .type 属性,它指定了实现转换器接口的类的完全限定域名。.type 属性使用以下格式:

<converterSymbolicName>.type

例如,

isbn.type: io.debezium.test.IsbnConverter

如果要进一步控制配置的转换器的行为,您可以添加一个或多个配置参数将值传递给转换器。要将任何其他配置参数与转换器关联,请将参数名称与转换器的符号链接名称添加前缀。
例如,

isbn.schema.name: io.debezium.postgresql.type.Isbn

snapshot.mode

Initial

指定在连接器启动时执行快照的条件:

初始 - 连接器只有在没有为逻辑服务器名称记录偏移时才执行快照。

总是 会在连接器启动时都执行快照。

不会执行快照。当连接器以这种方式配置时,其行为如下。如果 Kafka offsets 主题中存在之前存储的 LSN,则连接器将继续从该位置流更改。如果没有存储 LSN,则连接器在服务器上创建 PostgreSQL 逻辑复制插槽时从点开始流更改。只有在您知道感兴趣的所有数据仍然反映在 WAL 中时,永不 快照模式才很有用。

initial_only - 连接器执行初始快照,然后在不处理任何后续更改的情况下停止。

导出 - 弃用的


都会反映到 snapshot.mode 选项表

snapshot.include.collection.list

table.include.list中指定的所有表

可选的、以逗号分隔的正则表达式列表,与表的完全限定名称(<schemaName>.<tableName&gt;)匹配,以便包括在快照中。指定的项目必须在连接器的 table.include.list 属性中命名。只有在连接器的 snapshot.mode 属性设置为除 never 以外的值时,此属性才会生效。
此属性不会影响增量快照的行为。

要匹配表的名称,Debebe 应用您指定的正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配,它与表名称中可能存在的子字符串不匹配。

snapshot.lock.timeout.ms

10000

正整数值,用于指定在执行快照时等待获取表锁定的最长时间(以毫秒为单位)。如果连接器无法在这个时间段内获取表锁定,则快照会失败。连接器如何提供快照 提供详情。

snapshot.select.statement.overrides

没有默认值

指定要包含在快照中的表行。如果您希望快照仅在表中包括行的子集,请使用此属性。此属性仅影响快照。它不适用于连接器从日志中读取的事件。

属性包含一个以逗号分隔的表名称列表,格式为 < schemaName>.<tableName&gt;。例如,

"snapshot.select.statement.overrides": "inventory.products,customers.orders"

For the list 中的每个表,添加一个进一步的配置属性,用于指定连接器在进行快照时要在表上运行的 SELECT 语句。指定 SELECT 语句决定快照中包含的表行的子集。使用以下格式指定此 SELECT 语句属性的名称:

snapshot.select.statement.overrides. <schemaName> . &lt;tableName&gt;。例如,snapshot.select.statement.overrides.customers.orders

Example:

在包含 soft-delete 列 delete_flagcustomers.orders 表中,如果您希望快照只包含不是软删除的记录,请添加以下属性:

"snapshot.select.statement.overrides": "customer.orders",
"snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC"

在生成的快照中,连接器仅包含 delete_flag = 0 的记录。

event.processing.failure.handling.mode

fail

指定连接器在处理事件过程中应如何响应异常:

会失败,表示有问题的事件偏移,并导致连接器停止。

会记录 有问题的事件的偏移,跳过该事件并继续处理。

跳过 跳过有问题的事件并继续处理。

max.batch.size

2048

正整数值,用于指定连接器进程每个批处理的最大大小。

max.queue.size

8192

正整数值,用于指定阻塞队列可以保存的最大记录数。当 Debezium 从数据库读取事件时,它会将事件放置在阻塞队列中,然后再将它们写入 Kafka。当连接器将消息写入 Kafka 或 Kafka 不可用时,阻塞队列可以提供从数据库读取更改事件的后端。当连接器定期记录偏移时,队列中保存的事件会被忽略。始终将 max.queue.size 的值设置为大于 max.batch.size 的值。

max.queue.size.in.bytes

0

较长的整数值,指定块队列的最大卷(以字节为单位)。默认情况下,不会为阻塞队列指定卷限制。要指定队列可以使用的字节数,请将此属性设置为正长值。
如果还设置了 max.queue.size,当队列的大小达到任一属性指定的限制时,写入队列会被阻断。例如,如果您设置了 max.queue.size=1000, 和 max.queue.size.in.bytes=5000,则在队列包含 1000 记录后,或者队列中记录的卷达到 5000 字节后会被阻断。

poll.interval.ms

500

正整数值,用于指定连接器在处理批处理事件前应该等待出现新更改事件的毫秒数。默认值为 500 毫秒。

include.unknown.datatypes

false

当连接器遇到数据类型未知的字段时,指定连接器行为。默认行为是连接器从更改事件省略字段并记录警告。

如果您希望更改事件包含字段的不透明二进制表示,请将此属性设置为 true。这使得使用者能够解码字段。您可以通过设置 二进制处理 mode 属性来控制准确的表示。

注意

include.unknown.datatypes 设为 true 时,消费者面临向后兼容性问题。不仅可能版本之间特定于数据库的二进制表示变化,但如果 Debezium 最终支持数据类型,则数据类型将在逻辑类型中发送,这需要用户调整。通常,当遇到不受支持的数据类型时,请创建一个功能请求,以便可以添加支持。

database.initial.statements

没有默认值

连接器建立与数据库的 JDBC 连接时执行的、以逗号分隔的 SQL 语句列表。要将分号用作字符而不是分隔符,请指定两个连续分号 ;;

连接器可以自行自行建立 JDBC 连接。因此,此属性仅适用于配置会话参数,不适用于执行 DML 语句。

连接器在创建连接以读取事务日志时不会执行这些语句。

status.update.interval.ms

10000

以毫秒为单位向服务器发送复制连接状态更新的频率。
属性还控制数据库状态在数据库关闭时检测死连接的频率。

heartbeat.interval.ms

0

控制连接器将心跳信息发送到 Kafka 主题的频率。默认行为是连接器不会发送心跳信息。

心跳消息可用于监控连接器是否从数据库接收更改事件。心跳消息可能会帮助减少连接器重启时需要重新发送的更改事件数量。要发送心跳消息,请将此属性设置为正整数,这表示心跳消息之间的毫秒数。

如果数据库中有多个更新被跟踪,但只有少量更新与连接器捕获更改的表和模式相关,则需要心跳消息。在这种情况下,连接器会照常从数据库事务日志读取,但很少会向 Kafka 发出更改记录。这意味着,没有向 Kafka 提交偏移更新,连接器没有向数据库发送最新检索到的 LSN 的机会。数据库会保留包含连接器已经处理的事件的 WAL 文件。发送心跳消息可让连接器将最新检索到的 LSN 发送到数据库,这样数据库可以回收不再需要 WAL 文件所使用的磁盘空间。

heartbeat.action.query

没有默认值

指定连接器发送心跳消息时连接器在源数据库上执行的查询。

这可用于解决 WAL 磁盘空间消耗 中描述的情况,其中捕获与高流量数据库在同一主机上低流量数据库的更改,从而防止 Debezium 处理 WAL 记录,从而向数据库识别 WAL 位置。为了解决这种情况,请在低流量数据库中创建一个心跳表,并将此属性设置为将记录插入到该表的声明中,例如:

INSERT INTO test_heartbeat_table (text) VALUES ('test_heartbeat')

,允许连接器从低流量数据库接收更改,并确认其 LSN,从而防止数据库主机上的未绑定 WAL 增长。

schema.refresh.mode

columns_diff

指定为表触发刷新内存模式的条件。

column_diff 是最安全的模式。它确保 in-memory 模式始终与数据库表的 schema 同步。

column_diff_exclude_unchanged_toast 指示连接器刷新内存模式缓存,如果来自传入消息的模式不同,除非有变化的 TOASTable 数据完全针对差异。

如果有经常更新的表有很少更新的数据,则此设置可显著提高连接器性能。但是,如果从表中丢弃了 TOASTable 列,则内存中模式可能会变得过时。

snapshot.delay.ms

没有默认值

连接器在连接器启动时应等待的时间(毫秒)。如果您要在集群中启动多个连接器,此属性对于避免快照中断非常有用,这可能会导致连接器重新平衡。

snapshot.fetch.size

10240

在快照中,连接器以行批处理形式读取表内容。此属性指定批处理中的最大行数。

slot.stream.params

没有默认值

用于传递给配置的逻辑解码插件的参数的分号分隔列表。例如,add-tables=public.table,public.table2;include-lsn=true

sanitize.field.names

如果连接器配置将 key.convertervalue.converter 属性设置为 Avro converter,则为 true

如果没有,则为 false

指明是否清理字段名称以遵循 Avro 命名要求

slot.max.retries

6

如果连接到复制插槽失败,这是连续尝试连接的最大次数。

slot.retry.delay.ms

10000 (10 秒)

连接器无法连接到复制插槽时重试尝试之间等待的时间。

unavailable.value.placeholder

__debezium_unavailable_value

指定连接器提供的常量值,以指示原始值是不是由数据库提供的粘贴值。如果 unavailable.value.placeholder 的设置以 hex: 前缀开头,则字符串的其余部分代表十六进制编码的 octets。如需更多信息,请参阅 粘贴值

provide.transaction.metadata

false

确定连接器是否生成带有事务边界的事件,并使用事务元数据增强更改事件。如果您希望连接器进行此操作,请指定 true。如需更多信息,请参阅 事务元数据

flush.lsn.source

true

确定连接器是否应该提交源 postgres 数据库中已处理的记录的 LSN,以便删除 WAL 日志。如果您不希望连接器进行此操作,请指定 false。请注意,如果 Debezium 不会确认为 false LSN,且因为 WAL 日志不会被清除,则可能会导致磁盘空间问题。用户应该处理 Debezium 外部 LSN 的确认。

retriable.restart.connector.wait.ms

10000 (10 秒)

在发生可分配错误后重启连接器前要等待的毫秒数量。

skipped.operations

t

以逗号分隔的操作类型列表,这些类型将在流期间跳过。操作包括: c 用于插入/创建,u 用于更新,d 用于删除,t 用于 truncates,none 用于不跳过任何操作。默认情况下跳过截断的操作。

signal.data.collection

没有默认值

用于向连接器发送信号的数据收集的完全限定名称。
使用以下格式指定集合名称:
<schemaName> . < tableName>

incremental.snapshot.chunk.size

1024

连接器在增量快照块期间获取并读取内存的最大行数。增加块大小可提高效率,因为快照会运行更大的快照查询。但是,较大的块大小还需要更多内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。

xmin.fetch.interval.ms

0

从复制插槽中读取 XMIN 的频率(以毫秒为单位)。XMIN 值提供从其开始新复制插槽的下限。默认值为 0 可禁用跟踪 XMIN 跟踪。

topic.naming.strategy

io.debezium.schema.SchemaTopicNamingStrategy

应该用来决定数据更改的主题名称、模式更改、事务、心跳事件等的 TopicNamingStrategy 类的名称,默认为 SchemaTopicNamingStrategy

topic.delimiter

.

指定主题名称的分隔符,默认为 .

topic.cache.size

10000

用于在绑定并发哈希映射中保存主题名称的大小。此缓存有助于确定与给定数据收集对应的主题名称。

topic.heartbeat.prefix

__debezium-heartbeat

控制连接器向发送心跳消息的主题名称。主题名称具有此模式:

topic.heartbeat.prefix.topic.prefix

,如果主题前缀是 fulfillment,则默认主题名称为 __debezium-heartbeat.fulfillment

topic.transaction

事务

控制连接器向发送事务元数据消息的主题名称。主题名称具有此模式:

topic.prefix.topic.transaction

,例如,如果主题前缀是 fulfillment,则默认主题名称为 fulfillment.transaction

直通连接器配置属性

连接器还支持在创建 Kafka producer 和消费者时使用的 直通 配置属性。

请务必查阅 Kafka 文档,了解 Kafka 生成者和消费者的所有配置属性。PostgreSQL 连接器 使用新的消费者配置属性

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.