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,这足以启动心跳,当然心跳主题也已创建。
在使用 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,这足以启动心跳,当然心跳主题也已创建。