Debezium 心跳表未更新
Posted
技术标签:
【中文标题】Debezium 心跳表未更新【英文标题】:Debezium heartbeat table not updating 【发布时间】:2021-10-24 19:46:56 【问题描述】:已经有一个问题Debezium Heartbeat Action not firing,但它没有解决我的问题。
这是我的 postgres 源连接器配置。它每 5 秒后生成一次心跳事件。我已经通过检查 kafka 主题确认了这一点,但问题是它没有更新数据库心跳表中的行。有什么建议吗?
"name": "postgres-localdb-source-connector",
"config":
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"tasks.max": "1",
"database.hostname": "postgres",
"database.port": "5432",
"slot.name":"debezium",
"database.user": "postgres",
"database.password": "postgres",
"database.dbname" : "postgres",
"database.server.name": "dbserver2",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "schema-changes.dbserver2",
"schema.include": "inventory",
"tables.include": "customers,heartbeat",
"publication.autocreate.mode" : "filtered",
"max.batch.size":"20480",
"max.queue.size":"81920",
"poll.interval.ms":"100",
"heartbeat.interval.ms": "5000",
"heartbeat.action.query" :"INSERT INTO heartbeat (id, ts) VALUES (1, NOW()) ON CONFLICT(id) DO UPDATE SET ts=EXCLUDED.ts;"
【问题讨论】:
【参考方案1】:尝试与 DDL 共享您的 heartbeat
表。你的heartbeat
表有主键吗?如果表定义了 PK,Debezium 只会跟踪更新和删除。还要尝试分享您的 debezium 版本,因为此属性会因版本而异。
尝试不带 WHERE 的 UPDATE 来测试问题是否出在您的查询中。检查您的模式中的心跳是公共的还是库存的,并在查询中添加为前缀。
UPDATE inventory.heartbeat SET ts = NOW();
在您的tables.include
上为每个表添加一个带有架构的前缀。
"tables.include": "inventory.customers,inventory.heartbeat",
在tables.include
上尝试更改为tables.include.list
。来源:https://debezium.io/documentation/reference/1.6/connectors/mysql.html#:~:text=connector%20configuration%20property.-,table.include.list,-empty%20string
"tables.include.list": "inventory.customers,inventory.heartbeat",
【讨论】:
以上是关于Debezium 心跳表未更新的主要内容,如果未能解决你的问题,请参考以下文章
Debezium系列之:把多个数据库中多张表的数据发送到一个Kafka topic中