Debezium 心跳动作未触发

Debezium Heartbeat Action not firing

在使用 Debezium 和 Postgres 时,我们发现检测信号似乎不起作用的问题。我们在目标数据库中创建了一个虚拟 table 用于执行心跳操作,但我们从未看到 table.

中的数据发生任何变化

我们启用了心跳,因为我们看到了它旨在解决的相同行为,即 https://issues.redhat.com/browse/DBZ-1815

我们使用的是 Postgres 12 和 Debezium 1.3(或 1.5,两者均已试验)

配置为

{
  "name": "my-service-outbox",  
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector", 
    "plugin.name":"pgoutput",
    
    "database.hostname": "dbhostname", 
    "database.port": "5432", 
    "database.user": "user", 
    "database.password": "password", 
    "database.dbname" : "dbname", 
    "database.server.name": "dbservername", 
    
    "table.include.list": "public.outbox",
    "publication.autocreate.mode" : "filtered",
    "snapshot.mode":"exported",

    "heartbeat.interval.ms": 1000,
    "heartbeat.action​.query" :"INSERT INTO public.heartbeat (id, ts) VALUES (1, NOW()) ON CONFLICT(id) DO UPDATE SET ts=EXCLUDED.ts;"
  }
}

相关,但无解:

感觉好像我们错过了启用心跳的东西,但除了确保设置间隔之外什么也看不到。

编辑:心跳正在工作,因为我们可以在心跳主题中看到消息。但是没有执行数据库操作。

有什么建议吗?

文档中有一个零宽度 space,因此如果您复制它,字符串将包含它,这意味着它不是 Debezium 期望的选项名称。

我的心跳动作也不起作用,除非数据库中有动作,如果数据库中没有任何事情发生,除非我手动插入一些东西,否则心跳动作不会触发。这引起了麻烦,因为对于任何 empty/new 数据库,心跳操作不会触发

heartbeat.action.query 似乎也不适合我。 如果 table 中没有数据流动,则由于其他数据库中的 activity 而导致 wal 不断增长。 heartbeat.action.query 应该可以解决这个问题,我不应该等待另一个进入我正在流式传输的 table 来减少 Wal 大小,但情况似乎并非如此。

找到这个 google 小组讨论(https://groups.google.com/g/debezium/c/39mmGEHii_8),其中 Gunnar 提到了这个 -

核心心跳功能 [1] 定期向心跳主题发送消息,允许确认已处理的 WAL 偏移量,以防只有过滤的 tables 中的事件发生(这就是你观察)。心跳动作查询 [2](需要 table 并包含在发布中)对于解决多个数据库的情况很有用,在这种情况下,连接器从一个数据库接收更改,否则 no/low 流量,再次允许在这种情况下确认偏移量。 --冈纳尔 [1] https://debezium.io/documentation/reference/connectors/postgresql.html#postgresql-property-heartbeat-interval-ms [2] https://debezium.io/documentation/reference/connectors/postgresql.html#postgresql-property-heartbeat-action-query

在小组讨论中,他提到我们必须将此心跳 table 添加到出版物中才能使此功能正常工作。这应该有所帮助。

我会试一试并及时通知您。

编辑:更新:

已将心跳 table 添加到出版物中。没有任何区别。此问题仍未解决。

不管怎样,我刚刚遇到了一个类似的问题,虽然我认为它与你的问题不完全一样,但我在这里发帖以防它对任何人有用。简而言之,连接器状态为 运行,连接日志中没有错误(postgres 的日志中也没有),但心跳 table 为空 - 表明操作未触发。

在我的案例中,数据库模式似乎也是空的(这是一个新的产品数据库),但我仍然希望心跳动作能够触发。同一数据库中不同模式的类似设置正在运行 - table 中有节拍,尽管据我所知在模式 tables.

中没有任何内容

我发现心跳中没有行的模式没有心跳主题(有或没有 debezium 前缀)table;一切看起来都很好。所以我只是尝试手动插入心跳 table,这足以启动心跳,当然心跳主题也已创建。