上部署Debeziu开云体育官方注册网址m Kubernetes
开云体育官方注册网址Debezium可以很容易地部署Kubernetes,一个开源容器管理平台。部署利用Strimzi项目,旨在简化的部署Apache Kubernetes通过卡夫卡自定义资源。
测试您的部署,您可以使用minikube在本地机器上,Kubernetes集群。看到minikube文档有关如何安装minikube在您的机器上。如果你想测试Debezium部署本文档中描述开云体育官方注册网址完全minikube,您需要设置一个不安全的容器minikube图像注册表。要做到这一点,你需要minikube的开始
|
先决条件
保持容器分开其他工作负载集群,为Debezium创建一个专门的名称空间。开云体育官方注册网址在本文的其余部分,开云体育官方注册网址debezium-example
将使用名称空间:
kubectl创建ns debezium开云体育官方注册网址-example美元
部署Strimzi运营商
正如上面提到的,我们将使用Strimzi Debeziu开云体育官方注册网址m部署,负责管理Kubernetes卡夫卡部署。请参见Strimzi部署文档更多细节关于如何部署Strimzi Kubernetes集群。
安装Strimzi是通过最简单的方式运营商Lifecycle Manager(洞螈)。如果你没有洞螈集群上安装,您可以通过运行下面的命令安装:
curl https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.20.0/install.sh sl | bash - s v0.20.0美元
现在,安装Strimzi运营商本身:
美元kubectl创建https://operatorhub.io/install/strimzi-kafka-operator.yaml - f
创建数据库的秘密开云体育电动老虎机
后来,当部署Debezium卡夫卡连接器,我们需要开云体育官方注册网址提供用户名和密码连接器能够连接到数据库。开云体育电动老虎机出于安全考虑,它是一个很好的实践没有直接提供的凭证,但让他们在一个单独的安全地方。Kubernetes提供了秘密
为此对象。除了创建秘密
对象本身,我们还需要创建一个角色,一个角色绑定,以便卡夫卡访问凭证。
让我们创建秘密
对象:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f apiVersion: v1:秘密的元数据:名称:debezium-secret名称空间:debezium-example类型:不透明的数据:用户名:ZGViZXppdW0 =密码:ZGJ6 EOF
的用户名
和密码
包含base64编码的凭证(开云体育官方注册网址
/dbz
)连接到MySQL数据库,稍后我们将部署。开云体育电动老虎机
现在,我们可以创建一个角色,即前一步骤中创建的秘密:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f apiVersion: rbac.authorization.k8s。io / v1:元数据:角色名称:connector-configuration-role名称空间:debezium-example规则:- ap开云体育官方注册网址iGroups:["]资源:[“秘密”]resourceNames: [" debezium-secret]动词:“获得”EOF
我们也有这个角色绑定到卡夫卡连接集群服务帐户,这样卡夫卡连接可以访问的秘密:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f apiVersion: rbac.authorization.k8s。io / v1: RoleBinding元数据:名称:connector-configuration-role-binding名称空间:debezium-example主题:—开云体育官方注册网址—:ServiceAccount名称:debezium-connect-cluster-connect名称空间:debezium-example roleRef::角色名称:connector-configuration-role apiGroup: rbac.authorization.k8s。io EOF
服务帐户将由Strimzi一旦我们部署卡夫卡连接。服务帐户的名称形式KafkaConnectName-connect美元
。稍后,我们将创建卡夫卡连接集群命名开云体育官方注册网址debezium-connect-cluster
因此我们使用开云体育官方注册网址debezium-connect-cluster-connect
在这里作为一个subjects.name
。
部署Apache卡夫卡
接下来,部署一个(单节点)卡夫卡集群:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f - apiVersion: kafka.strimzi。io / v1beta2:卡夫卡元数据:名称:debezium-cluster开云体育官方注册网址规范:卡夫卡:副本:1听众:-名称:普通端口:9092类型:内部tls:错:名称:tls端口:9093类型:内部tls:真正的身份验证:类型:tls -名称:外部端口:9094类型:nodeport tls:错误的存储:类型:文件卷:- id: 0类型:persistent-claim大小:100 gi deleteClaim:错误配置:offsets.topic.replication。transaction.state.log.replication因素:1。transaction.state.log.min因素:1。isr: 1 default.replication。min.insync因素:1。副本:1管理员:副本:1存储:类型:persistent-claim大小:100 gi deleteClaim:假entityOperator: topicOperator: {} userOperator: {} EOF
等到准备:
$ kubectl卡夫卡/ debeziu开云体育官方注册网址m-cluster——等待= =条件——timeout = 300 s - n debezium-example做好了准备
部署一个数据源
作为数据源,MySQL将用于以下。除了运行MySQL的豆荚,一个适当的服务将指向pod与DB本身是必要的。它可以创建如如下:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f - apiVersion: v1:服务元数据:名称:mysql规范:港口:-端口:3306选择器:应用:mysql clusterIP:没有——apiVersion:应用程序/ v1:部署元数据:名称:mysql规范:选择器:matchLabels:应用:mysql策略:类型:创建模板:元数据:标签:应用:mysql规范:容器:——形象:quay.io / debezium /示例mysql: 1.9名称:mysql env: -名称:MYSQL_ROOT_PASSWORD值:debezium -名称:MYSQL_USER值:mysqluser -名称:MYSQL_PASSWORD值:mysqlpw港口:- containerPort: 3306姓名:mysql EOF
部署一个Debezium开云体育官方注册网址连接器
部署Debezium连接开云体育官方注册网址器,您需要部署一个卡夫卡连接集群所需的插件连接器(s),在实例化之前实际的连接器本身。作为第一步,一个容器形象卡夫卡与插件必须被创建。如果你已经有一个容器形象构建和可用在注册表中,你可以跳过这一步。在本文档中,将使用MySQL连接器为例。
创建集群卡夫卡连接
再一次,我们将使用Strimzi创建集群卡夫卡连接。Strimzi也可用于构建和推动为我们所需的容器的形象。事实上,这两个任务可以合并在一起,说明建筑容器内的图像可以直接提供KafkaConnect
对象规范:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f - apiVersion: kafka.strimzi。io / v1beta2: KafkaConnect元数据:名称:debezium-conn开云体育官方注册网址ect-cluster注释:strimzi。io / use-connector-resources:“真正”的规范:版本:3.1.0副本:1 bootstrapServers: debezium-cluster-k开云体育官方注册网址afka-bootstrap: 9092配置:配置。提供者:config.providers.secrets秘密。类:io.strimzi.kafka。Kubernetes秘密ConfigProvider 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: 10.110.154.103/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
你必须更换注册的IP地址
|
为简单起见,我们跳过了校验和验证下载的工件。如果你想确定工件是否正确下载,指定其校验和通过 |
如果你已经有一个合适的容器图像在本地或远程注册表(如码头。io或DockerHub),您可以使用这一段简化版:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f - apiVersion: kafka.strimzi。io / v1beta2: KafkaConnect元数据:名称:debezium-conn开云体育官方注册网址ect-cluster注释:strimzi。io / use-connector-resources:“真正”的规范:版本:3.1.0形象:10.110.154.103 / debezium-conn开云体育官方注册网址ect-mysql:最新副本:1 bootstrapServers: debezium-cluster-kafka-bootstrap: 9092配置:配置。提供者:config.providers.secrets秘密。类:io.strimzi.kafka。Kubernetes秘密ConfigProvider 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秘密提供者。这个秘密提供者将创建一个服务占这卡夫卡连接集群(我们已经绑定到适当的角色),并允许卡夫卡连接来访问我们秘密
对象。
创建一个Debeziu开云体育官方注册网址m连接器
创建一个Debezium开云体育官方注册网址连接器,您只需要创建一个KafkaConnector
用适当的配置,MySQL在这种情况下:
美元猫< < EOF | kubectl创建- n debeziu开云体育官方注册网址m-example - f - apiVersion: kafka.strimzi。io / v1beta2: KafkaConnector元数据:名称:debezium-conn开云体育官方注册网址ector-mysql标签:strimzi。io /集群:debez开云体育官方注册网址ium-connect-cluster规范类:io.debezium.connector.mysql.MySqlConnector tasksMax: 1配置:任务。马克斯:1数据开云体育电动老虎机库。主机名:mysql数据库。开云体育电动老虎机数据库端口:3306。开云体育电动老虎机用户:${秘密:debezium开云体育官方注册网址-example / debezium-secret:用户名}数据库。开云体育电动老虎机密码: ${secrets:debezium-example/debezium-secret:password} database.server.id: 184054 database.server.name: mysql database.include.list: inventory database.history.kafka.bootstrap.servers: debezium-cluster-kafka-bootstrap:9092 database.history.kafka.topic: schema-changes.inventory EOF
你可以注意,我们没有使用纯文本连接器配置用户名和密码,但是参考秘密
我们先前创建对象。
验证部署
验证,一切工作正常,你可以如开始观看mysql.inventory.customers
卡夫卡的话题:
美元kubectl运行- n de开云体育官方注册网址bezium-example - - rm -图像= quay.io / debezium /工具:1.2——重启=从未观察家kcat - b debezium-cluster-kafka-bootstrap: 9092 - c - o - t mysql.inventory.customers开始
连接到MySQL数据库:开云体育电动老虎机
美元kubectl运行- n de开云体育官方注册网址bezium-example - - rm -图像= mysql: 8.0——重启=从未env MYSQL_ROOT_PASSWORD = debezium mysqlterm——mysql -hmysql -P3306 -uroot -pdebezium
做一些改变吗客户
表:
sql >更新客户设置first_name =“莎莉玛丽”,id = 1001;
您现在应该能够观察卡夫卡的更改事件主题:
{…“有效载荷”:{“前”:{" id ": 1001年,“first_name”:“莎莉”,“last_name”:“托马斯”、“电子邮件”:“sally.thomas@acme.com”},“后”:{" id ": 1001年,“first_name”:“莎莉玛丽”,“last_name”:“托马斯”、“电子邮件”:“sally.thomas@acme.com”},“源”:{“版本”:“{debezium-version}”,“连接器”:“mysql”、“名称”:“mysql”、“ts_ms”: 1646开云体育官方注册网址300467000,“快照”:“false”,“分贝”:“库存”、“序列”:空,“表”:“客户”、“server_id”: 223344年,“gtid”:空,“文件”:“mysql-bin。000003”、“pos”: 401年,“行”:0,“线程”:空,“查询”:零},“人事处”:“u”、“ts_ms”: 1646300467746,“交易”:零}}