Debezium:数据库中没有记录最大LSN;请确保 SQL Server 代理正在运行

J W*_*ezy 3 sql-server apache-kafka apache-kafka-connect debezium

这个问题与:Debezium 如何正确注册 SqlServer 连接器与 Kafka Connect - 连接被拒绝

在 Windows 10 中,我让 Debezium 在 Docker 容器外部的 Microsoft SQL Server 实例上运行。我每 390 毫秒收到以下警告:

数据库中没有记录最大 LSN;请确保 SQL Server 代理正在运行
[io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]

我在 Github 上检查了 Debezium 的代码,唯一能在代码注释中找到此警告的地方指出,只有在 Agent 未运行时才应抛出此警告。我已确认 SQL Server 代理正在运行。

为什么会出现此警告,我该如何解决?

笔记:

我当前的解决方案似乎只适用于非生产环境 - 根据 Docker 的文档。

Wil*_*pes 5

LSN 是与 SQL Server 更改相关的“片段”信息。如果您没有 LSN,则可能是您的 CDC 未运行或未正确配置。Debezium 使用 LSN 进行复制,因此您的 SQL Server 需要生成它。

一些方法:

  1. 您是否检查过您的表是否启用了 CDC?这将列出启用 CDC 的表:
SELECT s.name AS Schema_Name, tb.name AS Table_Name
, tb.object_id, tb.type, tb.type_desc, tb.is_tracked_by_cdc
FROM sys.tables tb
INNER JOIN sys.schemas s on s.schema_id = tb.schema_id
WHERE tb.is_tracked_by_cdc = 1
Run Code Online (Sandbox Code Playgroud)
  1. 您的 CDC 数据库已启用并运行?(见这里

检查是否启用

SELECT * 
FROM sys.change_tracking_databases 
WHERE database_id=DB_ID('MyDatabase')
Run Code Online (Sandbox Code Playgroud)

并检查是否正在运行:

EXECUTE sys.sp_cdc_enable_db;  
GO  
Run Code Online (Sandbox Code Playgroud)
  1. 您的 CDC 服务是否在 SQL Server 上运行?在文档中查看
EXEC sys.sp_cdc_start_job;  
GO  
Run Code Online (Sandbox Code Playgroud)
  1. 在 CDC 中启用表时,我遇到了一些角色名称问题。就我而言,配置 atnull解决了我的问题(更多细节在这里
    EXEC sys.sp_cdc_enable_table
        @source_schema=N'dbo',
        @source_name=N'AD6010',
        @capture_instance=N'ZZZZ_AD6010',
        @role_name = NULL,
        @filegroup_name=N'CDC_DATA',
        @supports_net_changes=1
     GO
Run Code Online (Sandbox Code Playgroud)

  • sys.change_tracking_databases 用于更改跟踪,与更改数据捕获不同。Debezium AFAIK 也不使用更改跟踪。当看到这个警告时,这个答案的其余部分似乎仍然是值得检查的好东西。 (5认同)