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 的文档。
LSN 是与 SQL Server 更改相关的“片段”信息。如果您没有 LSN,则可能是您的 CDC 未运行或未正确配置。Debezium 使用 LSN 进行复制,因此您的 SQL Server 需要生成它。
一些方法:
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)
检查是否启用:
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)
EXEC sys.sp_cdc_start_job;
GO
Run Code Online (Sandbox Code Playgroud)
null
解决了我的问题(更多细节在这里) 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)