Fly*_*eaf 4 java sql-server apache-camel apache-kafka spring-boot
我在尝试使用 Camel Debezium SQL 服务器连接器时遇到问题。我正在尝试使用camel Debezium SQL Server 连接器捕获SQL Server 数据库表中的数据更改,并将它们接收到消息代理。我知道 JDBC SQL 服务器连接可以选择将加密设置为 false 以防止出现此问题。但我在 Camel Debezium SQL 服务器连接器中找不到类似的方法。
要使用 Camel Debezium SQL 服务器连接器,我遵循了此文档:
https://camel.apache.org/components/3.18.x/debezium-sqlserver-component.html#_samples
当我运行该应用程序时,它显示以下错误:
错误 io.debezium.embedded.EmbeddedEngine - 尝试运行连接器类“io.debezium.connector.sqlserver.SqlServerConnector”时出错
原因:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接。错误:“PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”。
我的POM如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-parent</artifactId>
<version>3.18.1-SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-main</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-debezium-sqlserver</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>11.2.0.jre11</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-kafka</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我正在使用:
spring-boot:2.7.2
SQL Server:docker 图像:mcr.microsoft.com/mssql/server:2022-latest
Kafka 图像:confluenceinc/cp-zookeeper:latest
谁能帮我解决这个问题?
在处理 Debezium 连接器时,要注册新的 SQL Server 连接器,我们通常可能会 POST 如下所示的 JSON 配置:
curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:8083/connectors --data @- << EOF
{
"name": "local-hub-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "mssql-2019",
"database.port": 1433,
"database.user": "Debezium",
"database.password": "StrongPassw0rd",
"database.dbname": "DebeziumTest",
"database.server.name": "DebeziumTestServer",
"table.include.list": "dbo.tb_CDCTab1",
"database.history.kafka.bootstrap.servers": "broker:29092",
"database.history.kafka.topic": "dbhistory.DebeziumTestServer"
}
}
EOF
Run Code Online (Sandbox Code Playgroud)
当连接器使用 10.2 之前的 JDBC 版本时,此功能可以正常工作,但JDBC Driver 10.2 for SQL Server引入了重大更改,特别是:
重大更改 - 默认加密为 true
这通常是有问题的,因为默认情况下,SQL Server 是使用自签名 X.509 证书安装的,因此它不会出现在任何信任存储中。
如果您使用的是安装了 JDBC Driver 10.2 for SQL Server(或更高版本)的新连接器容器,则需要修改连接器配置:
encrypt=false使用连接字符串选项将其关闭。trustServerCertificate=true到连接字符串选项。我们可以通过传递配置属性来做到这一点,即:Debezium SQL Server 连接器传递数据库驱动程序配置属性:
Debezium 连接器提供数据库驱动程序的直通配置。传递数据库属性以前缀database.* 开头。例如,连接器将诸如database.foobar=false 之类的属性传递给 JDBC URL。
要关闭加密,我们将发布以下 JSON 配置:
curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:8083/connectors --data @- << EOF
{
"name": "local-hub-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "mssql-2019",
"database.port": 1433,
"database.user": "Debezium",
"database.password": "StrongPassw0rd",
"database.dbname": "DebeziumTest",
"database.server.name": "DebeziumTestServer",
"table.include.list": "dbo.tb_CDCTab1",
"database.history.kafka.bootstrap.servers": "broker:29092",
"database.history.kafka.topic": "dbhistory.DebeziumTestServer",
"database.encrypt": false
}
}
EOF
Run Code Online (Sandbox Code Playgroud)
为了保持加密并信任 SQL Server 的自签名证书,我们将发布以下 JSON 配置:
curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:8083/connectors --data @- << EOF
{
"name": "local-hub-connector",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "mssql-2019",
"database.port": 1433,
"database.user": "Debezium",
"database.password": "StrongPassw0rd",
"database.dbname": "DebeziumTest",
"database.server.name": "DebeziumTestServer",
"table.include.list": "dbo.tb_CDCTab1",
"database.history.kafka.bootstrap.servers": "broker:29092",
"database.history.kafka.topic": "dbhistory.DebeziumTestServer",
"database.encrypt": true,
"database.trustServerCertificate": true
}
}
EOF
Run Code Online (Sandbox Code Playgroud)
如果您无法发布配置更改,那么camel.component.debezium-sqlserver.additional-properties可能可以提供类似的功能。
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |