Debezium日常分享系列之:在 OpenShift 上部署 Debezium

这篇具有很好参考价值的文章主要介绍了Debezium日常分享系列之:在 OpenShift 上部署 Debezium。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此过程用于在 Red Hat 的 OpenShift 容器平台上设置 Debezium 连接器。要在 OpenShift 上进行开发或测试,您可以使用 CodeRady 容器。

一、先决条件

为了使容器与集群上的其他工作负载分开,请为 Debezium 创建一个专用项目。在本文档的其余部分中,将使用 debezium-example 命名空间:

oc new-project debezium-example

二、部署 Strimzi Operator

对于 Debezium 部署,我们将使用 Strimzi 项目,该项目管理 OpenShift 集群上的 Kafka 部署。安装 Strimzi 最简单的方法是从 OperatorHub 安装 Strimzi 操作器。导航到 OpenShift UI 中的“OperatorHub”选项卡,选择“Strimzi”并单击“安装”按钮。

Debezium日常分享系列之:在 OpenShift 上部署 Debezium,日常分享专栏,Debezium,日常分享系列,OpenShift,部署 Debezium
如果您更喜欢命令行工具,也可以通过以下方式安装 Strimzi 操作符:

使用"<<"操作符和"oc create"命令来创建一个Kubernetes对象。通过将以下内容复制到终端中并按下Enter键执行命令:

cat << EOF | oc create -f -
<对象配置内容>
EOF

请将"<对象配置内容>"替换为您要创建的Kubernetes对象的配置。将其粘贴到命令中并按下Enter键,Kubernetes将创建该对象。
$ cat << EOF | oc create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: my-strimzi-kafka-operator
  namespace: openshift-operators
spec:
  channel: stable
  name: strimzi-kafka-operator
  source: operatorhubio-catalog
  sourceNamespace: olm
EOF

三、为数据库创建机密

稍后,在部署 Debezium Kafka 连接器时,我们需要提供连接器的用户名和密码才能连接到数据库。出于安全原因,最好不要直接提供凭据,而是将它们保存在单独的安全位置。 OpenShift 为此提供了 Secret 对象。除了创建 Secret 对象本身之外,我们还必须创建一个角色和角色绑定,以便 Kafka 可以访问凭证。

我们先创建 Secret 对象:

$ cat << EOF | oc create -f -
apiVersion: v1
kind: Secret
metadata:
  name: debezium-secret
  namespace: debezium-example
type: Opaque
data:
  username: ZGViZXppdW0=
  password: ZGJ6
EOF

用户名和密码包含用于连接 MySQL 数据库的 Base64 编码凭据 (debezium/dbz),我们稍后将部署该数据库。

现在,我们可以创建一个角色,它引用上一步中创建的秘密:

$ cat << EOF | oc create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: connector-configuration-role
  namespace: debezium-example
rules:
- apiGroups: [""]
  resources: ["secrets"]
  resourceNames: ["debezium-secret"]
  verbs: ["get"]
EOF

我们还必须将此角色绑定到 Kafka Connect 集群服务帐户,以便 Kafka Connect 可以访问密钥:

$ cat << EOF | oc create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: connector-configuration-role-binding
  namespace: debezium-example
subjects:
- kind: ServiceAccount
  name: debezium-connect-cluster-connect
  namespace: debezium-example
roleRef:
  kind: Role
  name: connector-configuration-role
  apiGroup: rbac.authorization.k8s.io
EOF

一旦我们部署 Kafka Connect,服务帐户将由 Strimzi 创建。服务帐户的名称采用 $KafkaConnectName-connect 形式。稍后,我们将创建名为 debezium-connect-cluster 的 Kafka Connect 集群,因此我们在这里使用 debezium-connect-cluster-connect 作为 subject.name。

四、部署Apache Kafka

接下来,部署一个(单节点)Kafka 集群:

$ cat << EOF | oc create -n debezium-example -f -
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: debezium-cluster
spec:
  kafka:
    replicas: 1
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
      - name: external
        port: 9094
        type: nodeport
        tls: false
    storage:
      type: jbod
      volumes:
      - id: 0
        type: persistent-claim
        size: 100Gi
        deleteClaim: false
    config:
      offsets.topic.replication.factor: 1
      transaction.state.log.replication.factor: 1
      transaction.state.log.min.isr: 1
      default.replication.factor: 1
      min.insync.replicas: 1
  zookeeper:
    replicas: 1
    storage:
      type: persistent-claim
      size: 100Gi
      deleteClaim: false
  entityOperator:
    topicOperator: {}
    userOperator: {}
EOF

等待它准备好:

oc wait kafka/debezium-cluster --for=condition=Ready --timeout=300s

五、部署数据源

下面将使用MySQL作为数据源。除了使用 MySQL 运行 pod 之外,还需要一个适当的服务来指向带有 DB 本身的 pod。它可以被创建,例如如下:

$ cat << EOF | oc create -f -
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: quay.io/debezium/example-mysql:2.3
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: debezium
        - name: MYSQL_USER
          value: mysqluser
        - name: MYSQL_PASSWORD
          value: mysqlpw
        ports:
        - containerPort: 3306
          name: mysql
EOF

六、部署 Debezium 连接器

要部署 Debezium 连接器,您需要在实例化实际连接器本身之前部署具有所需连接器插件的 Kafka Connect 集群。第一步,必须创建带有插件的 Kafka Connect 容器映像。如果您已经构建了容器镜像并在注册表中可用,则可以跳过此步骤。本文档以MySQL连接器为例。

创建 Kafka Connect 集群

同样,我们将使用 Strimzi 来创建 Kafka Connect 集群。 Strimzi 还可以用于为我们构建和推送所需的容器镜像。事实上,这两个任务可以合并在一起,并且可以直接在 KafkaConnect 对象规范中提供构建容器映像的说明:

$ cat << EOF | oc create -f -
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: debezium-connect-cluster
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  version: 3.1.0
  replicas: 1
  bootstrapServers: debezium-cluster-kafka-bootstrap:9092
  config:
    config.providers: secrets
    config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider
    group.id: connect-cluster
    offset.storage.topic: connect-cluster-offsets
    config.storage.topic: connect-cluster-configs
    status.storage.topic: connect-cluster-status
    # -1 means it will use the default replication factor configured in the broker
    config.storage.replication.factor: -1
    offset.storage.replication.factor: -1
    status.storage.replication.factor: -1
  build:
    output:
      type: docker
      image: image-registry.openshift-image-registry.svc:5000/debezium-example/debezium-connect-mysql:latest
    plugins:
      - name: debezium-mysql-connector
        artifacts:
          - type: tgz
            url: https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/{debezium-version}/debezium-connector-mysql-{debezium-version}-plugin.tar.gz
EOF

在这里,我们利用了 OpenShift 内置注册表,它已经作为服务在 OpenShift 集群上运行。

为简单起见,我们跳过了下载工件的校验和验证。如果您想确保工件已正确下载,请通过 sha512sum 属性指定其校验和。

如果您在本地或远程注册表(例如 quay.io 或 DockerHub)中已经有合适的容器映像,则可以使用此简化版本:

$ cat << EOF | oc create -f -
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: debezium-connect-cluster
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  version: 3.1.0
  image: 10.110.154.103/debezium-connect-mysql:latest
  replicas: 1
  bootstrapServers: debezium-cluster-kafka-bootstrap:9092
  config:
    config.providers: secrets
    config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider
    group.id: connect-cluster
    offset.storage.topic: connect-cluster-offsets
    config.storage.topic: connect-cluster-configs
    status.storage.topic: connect-cluster-status
    # -1 means it will use the default replication factor configured in the broker
    config.storage.replication.factor: -1
    offset.storage.replication.factor: -1
    status.storage.replication.factor: -1
EOF

您还可以注意到,我们已将机密提供程序配置为使用 Strimzi 机密提供程序 Strimzi 机密提供程序将为该 Kafka Connect 集群创建服务帐户(我们已将其绑定到适当的角色),并允许 Kafka Connect 访问我们的 Secret 对象。

在创建 Debezium 连接器之前,请检查所有 pod 是否已在运行:

Debezium日常分享系列之:在 OpenShift 上部署 Debezium,日常分享专栏,Debezium,日常分享系列,OpenShift,部署 Debezium

七、创建 Debezium 连接器

要创建 Debezium 连接器,您只需创建具有适当配置的 KafkaConnector,在本例中为 MySQL:

$ cat << EOF | oc create -f -
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
  name: debezium-connector-mysql
  labels:
    strimzi.io/cluster: debezium-connect-cluster
spec:
  class: io.debezium.connector.mysql.MySqlConnector
  tasksMax: 1
  config:
    tasks.max: 1
    database.hostname: mysql
    database.port: 3306
    database.user: ${secrets:debezium-example/debezium-secret:username}
    database.password: ${secrets:debezium-example/debezium-secret:password}
    database.server.id: 184054
    topic.prefix: mysql
    database.include.list: inventory
    schema.history.internal.kafka.bootstrap.servers: debezium-cluster-kafka-bootstrap:9092
    schema.history.internal.kafka.topic: schema-changes.inventory
EOF

您可以注意到,我们在连接器配置中没有使用纯文本用户名和密码,而是引用我们之前创建的 Secret 对象。

八、验证部署

要验证一切正常,您可以例如开始观看 mysql.inventory.customers Kafka 主题:

$ oc run -n debezium-example -it --rm --image=quay.io/debezium/tooling:1.2  --restart=Never watcher -- kcat -b debezium-cluster-kafka-bootstrap:9092 -C -o beginning -t mysql.inventory.customers

连接MySQL数据库:

$ oc run -n debezium-example -it --rm --image=mysql:8.0 --restart=Never --env MYSQL_ROOT_PASSWORD=debezium mysqlterm -- mysql -hmysql -P3306 -uroot -pdebezium

在客户表中做一些更改:

sql> update customers set first_name="Sally Marie" where id=1001;

您现在应该能够观察 Kafka 主题上的更改事件:文章来源地址https://www.toymoban.com/news/detail-603985.html

{
...
  "payload": {
    "before": {
      "id": 1001,
      "first_name": "Sally",
      "last_name": "Thomas",
      "email": "sally.thomas@acme.com"
    },
    "after": {
      "id": 1001,
      "first_name": "Sally Marie",
      "last_name": "Thomas",
      "email": "sally.thomas@acme.com"
    },
    "source": {
      "version": "{debezium-version}",
      "connector": "mysql",
      "name": "mysql",
      "ts_ms": 1646300467000,
      "snapshot": "false",
      "db": "inventory",
      "sequence": null,
      "table": "customers",
      "server_id": 223344,
      "gtid": null,
      "file": "mysql-bin.000003",
      "pos": 401,
      "row": 0,
      "thread": null,
      "query": null
    },
    "op": "u",
    "ts_ms": 1646300467746,
    "transaction": null
  }
}

到了这里,关于Debezium日常分享系列之:在 OpenShift 上部署 Debezium的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Debezium日常分享系列之:使用 Debezium 连接器实现密钥外部化

    隐藏数据库的账号和密码 当 Debezium 连接器部署到 Kafka Connect 实例时,有时需要对 Connect API 的其他用户隐藏数据库凭据。 让我们回顾一下 MySQL Debezium connector的连接器注册请求: 用户名和密码以纯字符串形式传递给 API。更糟糕的是,任何有权访问 Kafka Connect 集群及其 REST AP

    2024年02月16日
    浏览(33)
  • Debezium日常分享系列之:流式传输Cassandra第二部分

    在本博客文章系列的前半部分中,解释了Cassandra 设计流数据管道的决策过程。在这篇文章中,我们将把管道分为三个部分,并更详细地讨论每个部分: Cassandra 到 Kafka 与 CDC 代理 Kafka 与 BigQuery 和 KCBQ 使用 BigQuery 视图进行转换 相关技术博客: Debezium日常分享系列之:流式传输

    2024年02月16日
    浏览(37)
  • Debezium系列之:在 Kubernetes 上部署 Debezium

    K8s相关知识可以阅读博主以下几篇技术博客: K8s系列之:搭建高可用K8s v1.23.5集群详细步骤,3个master节点,3个Node节点 K8s系列之:Pod的基本用法 k8s系列之:kubectl子命令详解一 k8s系列之:kubectl子命令详解二 更多K8s知识点详见博主K8s系列文章 更多Debezium内容请阅读博主Debezi

    2024年02月11日
    浏览(36)
  • Debezium系列之:监控 Debezium

    Debezium JMX相关的技术博客: Debezium系列之:安装jmx导出器监控debezium指标 Debezium系列之:为Debezium集群JMX页面增加监控,JMX页面出现异常时发送飞书告警,确保任务能够获取debezium集群指标 Debezium系列之:深入解读Debezium重要的jmx指标 Debezium系列之:mysql JMX metrics指标详细解读

    2024年02月11日
    浏览(38)
  • Debezium系列之:使用 Strimzi 将 Kafka 和 Debezium 迁移到 Kubernetes

    在本文中,将探讨在生产中实现debezium与K8s的结合: 在 Kubernetes 集群中安装和管理 Apache Kafka 集群。 在 Kubernetes 集群中部署 Debezium Kafka Connect。 Kubernetes 是一个开源容器编排器,本文使用 minikube 作为 Kubernetes 集群,但相同的步骤在任何其他实现中都应该有效。 启动集群 在终

    2024年02月15日
    浏览(38)
  • Debezium系列之:记录变更事件

    Debezium 数据更改事件具有复杂的结构,可提供丰富的信息。 但是,在某些情况下,在下游消费者可以处理 Debezium 更改事件消息之前,它需要有关原始数据库更改导致的字段级更改的其他信息。 为了使用有关数据库操作如何修改源数据库中的字段的详细信息来增强事件消息,

    2024年02月09日
    浏览(43)
  • Debezium系列之:prometheus采集debezium的jmx数据,grafana通过dashboard展示debezium的jmx数据

    需要采集debezium的jmx数据,并把重要的指标展示出来 采取的方案是prometheus采集debezium的jmx数据,通过grafana展示出来,可以快速查看某个连接器重要的指标信息

    2024年02月13日
    浏览(36)
  • 37、Flink 的CDC 格式:debezium部署以及mysql示例(1)-debezium的部署与示例

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年01月25日
    浏览(24)
  • Debezium系列之:详细整理Debezium和Kafka的Transforms类型和全部功能

    Kafka Connect 是一个在 Apache Kafka 与外部系统之间进行数据传输的框架,其主要作用是实现可靠的数据集成和流转。 Transforms 是 Kafka Connect 中用于对数据进行处理和转换的一个重要特性。 通过使用 Transforms,用户可以对 Kafka Connect 中传输的数据进行一些处理和转换,例如过滤、格

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包