加载JDBC Sink连接器失败:Kafka流数据至MySQL遇阻
嘿,我看了你遇到的问题——Source连接器能正常从MySQL同步数据到Kafka,但反向的Sink连接器加载失败了。结合你给出的配置和错误提示,我整理了几个关键的排查和修复点:
1. 先修复数据库连接URL的转义问题
你的sink-mysql.properties里,connection.url用了&来分隔用户和密码,但在.properties配置文件里不需要XML转义字符,直接用&就行。这个错误的转义会让JDBC无法正确解析连接参数,大概率是导致连接器加载失败的核心原因。
修改后的连接URL应该是这样:
connection.url=jdbc:mysql://127.0.0.1:3306/demo?user=user1&password=user1pass
2. 一定要查看完整的错误堆栈
你贴的错误日志只显示了开头部分,完整的日志里肯定有Caused by:这类关键行,里面会明确告诉你具体的异常原因——比如数据库权限不足、找不到MySQL驱动、Avro schema与表结构不匹配等等。先找出完整的错误信息,能帮你精准定位问题。
3. 检查MySQL JDBC驱动是否存在
Confluent的JDBC连接器默认不带MySQL驱动,你得手动把MySQL的JDBC驱动包(比如mysql-connector-java-8.0.x.jar)放到Connect的libs目录里,或者通过plugin.path配置项指定驱动所在的路径。如果驱动缺失,连接器会因为找不到驱动类直接启动失败。
4. 验证数据库账号的权限
你设置了auto.create=true,这意味着连接器需要能在demo数据库里自动创建表,所以得确保user1账号拥有demo数据库的写入权限,包括建表权限。可以登录MySQL执行下面的命令授权:
GRANT ALL PRIVILEGES ON demo.* TO 'user1'@'localhost'; FLUSH PRIVILEGES;
5. 确认Topic里的Avro数据格式兼容
因为你用的是connect-avro-standalone.properties,说明Topic里的数据是Avro格式的。要确保Avro的schema和MySQL表的结构匹配——比如Avro的int对应MySQL的INT,Avro的string对应MySQL的VARCHAR,如果类型不兼容也会导致Sink任务失败。
内容的提问来源于stack exchange,提问作者Giorgos Myrianthous

