Debezium MS SQL Server 连接器问题

Posted

技术标签:

【中文标题】Debezium MS SQL Server 连接器问题【英文标题】:Debezium MS SQL Server connector issues 【发布时间】:2021-06-12 06:26:12 【问题描述】:

这里是卡夫卡新手。

环境设置

操作系统:Ubuntu 20.04

Kafka 安装在本地计算机上的主文件夹中。 Kafka 和 Zookeeper 服务都在运行。

我正在尝试将 Kafka 连接配置为连接到托管在我使用以下命令构建的 SQL Server 容器中的数据库

docker run --name SQL19 -p 1433:1433 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Password258*" -e "MSSQL_AGENT_ENABLED=True" -v ~/SqlDockerVol/userdatabase:/userdatabase -v ~/SqlDockerVol/sqlbackups:/sqlbackups -d mcr.microsoft.com/mssql/server:2019-latest

容器正在运行,可以连接成功。

我在数据库级别和表级别启用了 CDC。

EXEC sys.sp_cdc_enable_db
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'WorkQueue',
    @role_name     = NULL,
    @supports_net_changes = 1

连接器属性文件

name= DebeziumSQLServerconnector 
connector.class= io.debezium.connector.sqlserver.SqlServerConnector 
database.hostname=linuxdesktop 
database.port= 1433 
database.user= sa 
database.password= Password258* 
database.dbname= mydb 
database.server.name= linuxdesktop 
table.include.list= dbo.WorkQueue 
database.history.kafka.bootstrap.servers= linuxdesktop:9092 
database.history.kafka.topic= dbhistory.mydb 

connect-standalone.properties plugin.path

plugin.path=/home/vinu/kafka-server/connector

我将所有 .JAR 文件复制到 plugin.path 中

然后我尝试使用以下命令启动连接器

~/kafka-server/bin/connect-standalone.sh ~/kafka-server/config/connect-standalone.properties  DebeziumSQLServerconnector.properties

但是进程无法启动并得到以下错误信息

2021-03-15 13:36:36,752] 错误无法为 DebeziumSQLServerconnector.properties (org.apache.kafka.connect.cli.ConnectStandalone:110) [2021-03-15 13:36:36,753] 错误在连接器错误后停止 (org.apache.kafka.connect.cli.ConnectStandalone:121) java.util.concurrent.ExecutionException: org.apache.kafka.connect.errors.ConnectException:找不到任何 实现连接器且名称匹配的类 io.debezium.connector.sqlserver.SqlServerConnector ,可用 连接器是:PluginDescklass=class io.debezium.connector.sqlserver.SqlServerConnector, name='io.debezium.connector.sqlserver.SqlServerConnector', 版本='1.4.2.Final',编码版本=1.4.2.Final,类型=源, typeName='来源', location='file:/home/vinu/kafka-server/connector/debezium-connector-sqlserver/', PluginDesc类=类 org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', 版本='2.7.0',编码版本=2.7.0,类型=sink,typeName='sink', location='classpath',PluginDescklass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.mirror.MirrorCheckpointConnector, name='org.apache.kafka.connect.mirror.MirrorCheckpointConnector', 版本='1',编码版本=1,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.mirror.MirrorHeartbeatConnector, name='org.apache.kafka.connect.mirror.MirrorHeartbeatConnector', 版本='1',编码版本=1,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.mirror.MirrorSourceConnector, name='org.apache.kafka.connect.mirror.MirrorSourceConnector', 版本='1',编码版本=1,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.MockConnector, 名称='org.apache.kafka.connect.tools.MockConnector', 版本='2.7.0', 编码版本=2.7.0,类型=连接器,类型名称='连接器', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.MockSinkConnector, name='org.apache.kafka.connect.tools.MockSinkConnector', 版本='2.7.0',编码版本=2.7.0,类型=sink,typeName='sink', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.MockSourceConnector, name='org.apache.kafka.connect.tools.MockSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.SchemaSourceConnector, name='org.apache.kafka.connect.tools.SchemaSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.VerifiableSinkConnector, name='org.apache.kafka.connect.tools.VerifiableSinkConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.VerifiableSourceConnector, name='org.apache.kafka.connect.tools.VerifiableSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', 位置='classpath' 在 org.apache.kafka.connect.util.ConvertingFutureCallback.result(ConvertingFutureCallback.java:115) 在 org.apache.kafka.connect.util.ConvertingFutureCallback.get(ConvertingFutureCallback.java:99) 在 org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:118) 引起:org.apache.kafka.connect.errors.ConnectException:失败 查找任何实现 Connector 且名称匹配的类 io.debezium.connector.sqlserver.SqlServerConnector ,可用 连接器是:PluginDescklass=class io.debezium.connector.sqlserver.SqlServerConnector, name='io.debezium.connector.sqlserver.SqlServerConnector', 版本='1.4.2.Final',编码版本=1.4.2.Final,类型=源, typeName='来源', location='file:/home/vinu/kafka-server/connector/debezium-connector-sqlserver/', PluginDesc类=类 org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', 版本='2.7.0',编码版本=2.7.0,类型=sink,typeName='sink', location='classpath',PluginDescklass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.mirror.MirrorCheckpointConnector, name='org.apache.kafka.connect.mirror.MirrorCheckpointConnector', 版本='1',编码版本=1,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.mirror.MirrorHeartbeatConnector, name='org.apache.kafka.connect.mirror.MirrorHeartbeatConnector', 版本='1',编码版本=1,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.mirror.MirrorSourceConnector, name='org.apache.kafka.connect.mirror.MirrorSourceConnector', 版本='1',编码版本=1,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.MockConnector, 名称='org.apache.kafka.connect.tools.MockConnector', 版本='2.7.0', 编码版本=2.7.0,类型=连接器,类型名称='连接器', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.MockSinkConnector, name='org.apache.kafka.connect.tools.MockSinkConnector', 版本='2.7.0',编码版本=2.7.0,类型=sink,typeName='sink', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.MockSourceConnector, name='org.apache.kafka.connect.tools.MockSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.SchemaSourceConnector, name='org.apache.kafka.connect.tools.SchemaSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.VerifiableSinkConnector, name='org.apache.kafka.connect.tools.VerifiableSinkConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', location='classpath',PluginDescklass=class org.apache.kafka.connect.tools.VerifiableSourceConnector, name='org.apache.kafka.connect.tools.VerifiableSourceConnector', 版本='2.7.0',编码版本=2.7.0,类型=来源,类型名称='来源', 位置='classpath' 在 org.apache.kafka.connect.runtime.isolation.Plugins.connectorClass(Plugins.java:208) 在 org.apache.kafka.connect.runtime.isolation.Plugins.newConnector(Plugins.java:180) 在 org.apache.kafka.connect.runtime.AbstractHerder.getConnector(AbstractHerder.java:572) 在 org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:342) 在 org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$1(AbstractHerder.java:326) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)

可能是什么问题?

注意 所有 Kafka 组件都安装在机器本地。我的设置中唯一的容器是 SQL Server。

【问题讨论】:

根据输出,您的插件路径是/home/vinu/kafka-server/connector/,而不是/usr/share/java,并且属性文件不使用冒号作为键值对...。但是输出以@987654331开头@ 清楚地列出了您尝试使用的连接器...注意,kafka:9092 不会在 localhost:1433 是数据库连接字符串的主机上工作。我建议运行 Debezium docker 容器 谢谢。正确的插件路径并在属性文件中将 : 更改为 =。也 database.history.kafka.bootstrap.servers 到 localhost:9092 (database.history.kafka.bootstrap.servers:localhost:9092) 但仍然得到同样的错误。 【参考方案1】:

available connectors 列出了类,所以你的插件很好。

您有空间问题。注意日志输出逗号的位置

matches io.debezium.connector.sqlserver.SqlServerConnector ,

从整个属性文件中删除尾随空格和值之前的前导空格

【讨论】:

【参考方案2】:

您不得将连接器 JAR 放入 /home/vinu/kafka-server/connector 中,而应放入 /home/vinu/kafka-server/connector/debezium-sqlserver-connector 或任何其他名称中。 连接器没有放到plugin.path,而是每个连接器放到plugin.path 中的一个单独的目录。

【讨论】:

谢谢吉里。请查看添加到原帖中的图片... 我同意另一个答案

以上是关于Debezium MS SQL Server 连接器问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 的 Debezium 连接器,并希望在 debezium 层进行过滤

安装 Debezium SQL Server CDC 源连接器

如何将 Debezium SQL Server 连接器与 ksqlDB 嵌入式连接一起使用?

Debezium SQL Server 连接器 Kafka 初始快照

如何使用Debezium从MS SQL中将250张表导入Kafka

Debezium SQL Server Source Connector 设置 Kafka 代理