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-lat
est
容器正在运行,可以连接成功。
我在数据库级别和表级别启用了 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 初始快照