debezium 经验和踩坑

debezium的运维和使用大半年时间。曾经管理的单个debezium集群有10个左右的debeizum任务。某个库的debezium订阅的表数量大概有几十个,得出了很多经验,踩了很多坑。下面会列出各种遇到的问题和一些比较不错的实践。

踩坑

debezium坑很多!!最大的坑就是kafka connectrebalance;每当有新的debezium connector被发到集群后,就会触发集群的rebalance;集群内部的connector任务开始重启,表面上看任务重新分配,每个debezium实例都能均匀的分配到任务,确实很优雅。但是事实上重启集群内部所有的connector一个很重的操作。由于本身debezium的一些不优雅的特性,导致重启有可能造成集群内多个connector挂掉。所以需要尽可能的少触发集群的rebalance; 不过这个巨坑其实很难避免。

其它的几个大坑:

  1. debeziumhistory topic 不能被多个connector共用。如果新的connector使用了集群内某个connector正在使用的history topic,集群内的正在使用history topicconnector会抛出异常终止(这个在0.5.x版本的时候,并不会抛出异常!!)。
  2. 竟可能的每个库对应一个connector,每个connector只订阅需要接入debezium的某个库内的表。可以通过设置库的白名单和表的白名单实现。(一个任务订阅多个库、多个表是非常不正确的行为,后续新增表代价会非常大)
  3. debezium connector重启并不是每次都成功的,也即是说connector重启可能会导致任务挂掉。history topic可能会非常的大,connector重启时会读取history topic所有数据,如果history topic数据量非常的大,connector可能就无法在给定的时间内启动,connector抛出异常启动失败。
  4. 3这个坑遇上rebalance,就会出现比较严重的问题。如果集群内有多个connector,并且多个connectorhistroy topic都很大,那rebalance之后,这些connector很有可能都会重启失败。
  5. 1rebalance也有关系。debezium集群内connector数量很多时,重启可能会发生history topic被共用的异常,但是事实上我们并没有共用!!

建议

  1. 一个debezium内尽量不要运行太多的connector。相同数量的机器情况下,多集群的效果会比单集群多服务器好很多!
  2. 把很重的connector迁到单独的集群。比如我所在的公司,需要订阅一个库内几十个表,这就导致任务的重启非常的慢,停掉任务就要花很长时间,如果和其它connector部署在一起,不是很好!(理由自己想)
  3. 推荐将debezium部署到k8s,集群扩容、缩容会很方便。
  4. 可以尝试将每个connector对应一个k8s pod,来做到正真的资源隔离,互不影响。当然这个我没有尝试过 ~.~

大概就这些吧。

### Debezium 安装教程与使用指南 #### 一、环境准备 为了使 Debezium 正常工作,需先准备好必要的组件。这包括但不限于 Zookeeper Kafka 的安装。 对于 Zookeeper 的安装,可以采用 Docker 方式简化操作流程。具体命令如下所示[^3]: ```bash docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 quay.io/debezium/zookeeper:1.9 ``` 接着是 Kafka 的部署,同样推荐通过 Docker 来完成。这里不再赘述具体的命令,因为重点在于如何集成 Debezium 而不是单独搭建这些服务。 #### 二、配置 PostgreSQL 数据库 为了让 Debezium 成功捕捉到数据变更事件,在 PostgreSQL 中需要做特定的设置。其中一项重要参数 `publication.autocreate.mode` 应被设为 `filtered` 模式,从而实现更精确的数据捕获控制[^1]。 #### 三、启动并配置 Debezium Connector Kafka Connect 是用于连接 Kafka 其他系统的标准化接口框架。Debezium 则作为其中一个专门处理关系型数据库变化日志取的插件存在。因此,在实际应用中,应当按照官方文档指导来创建相应的连接器实例,并对其进行适当配置以满足业务需求[^2]。 例如,当针对 MySQL 或者 PostgreSQL 创建一个新的 Debezium Source Connector 实例时,可以通过 REST API 发送 POST 请求给 Kafka Connect Server: ```json { "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.postgresql.PostgresConnector", "tasks.max": "1", "database.hostname": "localhost", "database.port": "5432", "database.user": "postgres_user", "database.password": "password", "database.dbname" : "db_name", "database.server.name": "server_name" } } ``` 以上 JSON 对象定义了一个名为 inventory-connector 的 PostgresSQL 连接器,指定了目标数据库的相关信息以及一些额外选项。 #### 四、验证安装成果 一旦上述步骤都已完成,则可通过向源表插入记录的方式来测试整个链路是否正常运作。如果一切顺利的话,应该能够在对应的 Kafka 主题里看到由 Debezium 生产出来的消息流。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值