Kafka Connect with MSSQL 不适用于删除操作

Posted

技术标签:

【中文标题】Kafka Connect with MSSQL 不适用于删除操作【英文标题】:Kafka Connect with MSSQL doesn't work for delete operations 【发布时间】:2019-06-03 02:21:48 【问题描述】:

我在 SQL Server 2014 上使用带有 Confluent MSSQL connector 的 Kafka Connect。我尝试了插入和更新操作,它们工作正常,将正确的记录推送到 Kafka。如果我删除一条记录,我会收到有关 Kafka 主题的信息:

"schema":null,"payload":null

我希望得到已删除记录的详细信息。

我使用以下命令启用了 CDC:

ALTER DATABASE WebAppDb SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON) 
GO 
ALTER DATABASE WebAppDb SET ALLOW_SNAPSHOT_ISOLATION ON 
GO 
ALTER TABLE dbo.Users ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)
GO

【问题讨论】:

您使用的是哪个连接器?有几个连接器可以与 MS SQL 一起使用 【参考方案1】:

我会检查正在使用的连接器和 MSSQL Server 版本,因为根据 Confluent 网站的Kafka Connect Microsoft SQL Server Connector

变更数据捕获是一项仅在 SQL Server Enterprise 和 Developer 版本中可用的功能

然后检查question 的答案和Debezium Connector for SQL Server 的信息。 看起来这个问题可能仍然需要解决,因为它仍然是open on Github

【讨论】:

我使用的是 Express 版本。无论如何,我不明白为什么创建和更新操作正常工作。【参考方案2】:

这实际上表示一条删除消息,如果您的有效负载为空,则表示该记录已被删除,您现在可以做的是检查消息key 并在您的消费者中进行所需的删除。

您现在看到的有效负载确实是错误的,Kafka Connect 中存在一个错误,导致 Json 转换无法生成 tombstone 消息,这就是您看到它的原因“

"schema":null,"payload":null

当错误修复发布时,您的消息应该有一个null 正文,但在这两种情况下您可以采取相同的方式删除。

More about the bug here

More about tombstone messages here

【讨论】:

我更新到最新的 Kafka Confluent 版本 5.1.0 (Kafka 2.1.0-cp1),但我仍然在我的消费者中收到 "schema":null,"payload":null 作为删除操作的消息。 您好@AlessandroDionisi,因为 2.1.0 已经发布,我认为您必须等待 2.2.0,除非您想使用夜间构建进行测试(我不知道这些是否是可用,但您可以尝试检查)

以上是关于Kafka Connect with MSSQL 不适用于删除操作的主要内容,如果未能解决你的问题,请参考以下文章

Kafka:从启用更改跟踪的 SQL 服务器读取

使用 Windows 身份验证时要填写 mssql_connect 的哪些登录数据?

php mssql_connect 不工作

使用 Apache Kafka 将数据从 MSSQL 同步到 Elasticsearch

带有 MSSQL 的 Kafka JDBC 连接器仅流式传输 100 行

无法在 kafka connect docker 映像中运行 kafka connect datagen