
我搭建了一个kafka集群,kafka+debezium增量抽取sql server,创建链接报错:
{"error_code":400,"message":"Connector configuration is invalid and contains the following 1 error(s):nUnable to connect. Check this and other connection properties. Error: Couldn't obtain database namenYou can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate`"}
配置如下:
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" 192.168.10.137:8083/connectors/ -d
'{
"name": "sqlserver-connector-test",
"config": {
"connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
"database.hostname": "121.***",
"database.port": "***",
"database.user": "yun***",
"database.password": "***",
"database.dbname": "***",
"database.server.name": "sqlserver-test",
"table.include.list": "dbo.cdc_test",
"snapshot.mode": "schema_only",
"decimal.handling.mode": "String",
"database.server.timezone": "UTC",
"database.history.kafka.bootstrap.servers": "192.168.10.137:9092",
"database.history.kafka.topic": "dbhistory.sqlserver-test"
}
}'
先看日志:
[2021-09-28 18:58:57,428] INFO Connection gracefully closed (io.debezium.jdbc.JdbcConnection:951) [2021-09-28 18:58:57,432] INFO AbstractConfig values: (org.apache.kafka.common.config.AbstractConfig:372)
就两句话,没啥有用信息...然后翻遍内外网社区,依然没啥有用信息!
好吧,那看看源码:
public String retrieveRealDatabaseName(String databaseName) {
try {
return prepareQueryAndMap(GET_DATAbase_NAME,
ps -> ps.setString(1, databaseName),
singleResultMapper(rs -> rs.getString(1), "Could not retrieve exactly one database name"));
}
catch (SQLException e) {
throw new RuntimeException("Couldn't obtain database name", e);
}
}
我的水平只能看出错误类型是SQLException...
于是我在本地搭了相同版本的sql server数据库,配置相同用户,成功连接!
所以问题一定在本地到华为云这个环节!
于是,我查看了所有kafka节点的公网ip,发现其中一台机器公网ip不对!
问题解决,特此记录!
泪目!