Kafka Connect JDBC Source拉取MySQL表返回0条记录排查求助
排查解决步骤
1. 基础连通性&权限验证
- 登录Kafka Connect运行节点,使用配置里的相同账号密码手动连接MySQL,执行
SELECT * FROM DATABASE.news LIMIT 10;,确认以下几点:- 网络连通、账号密码正确
- 该账号拥有
news表的SELECT权限 - 库名、表名大小写匹配(MySQL Linux实例默认表名大小写敏感)
- 确认MySQL JDBC驱动(mysql-connector-java.jar)已经放到Kafka Connect的插件或类加载路径下,缺失驱动会出现无报错但查询无返回的异常。
2. 修正JDBC连接URL参数
这是MySQL大表同步的高频问题:MySQL JDBC驱动默认会将全量结果集一次性加载到内存,6500万条数据的加载过程会远超连接器的默认超时时间,导致还没返回记录就触发了空提交。在connection.url末尾追加以下参数:
jdbc:mysql://MY-SERVER/DATABASE?useCursorFetch=true&useServerPrepStmts=true&fetchSize=10000&useSSL=false&serverTimezone=Asia/Shanghai
参数说明:
useCursorFetch=true开启MySQL服务端游标,避免全量结果集加载到内存fetchSize=10000指定每次从MySQL拉取的行数,可根据服务器性能调整serverTimezone时区参数,避免时区不匹配导致的异常数据过滤useSSL=false未开启SSL的实例必须关闭,避免连接异常
3. 补充连接器超时&批量配置
在现有配置中追加以下参数,适配大表同步的超时要求:
"batch.max.rows": "10000", "poll.interval.ms": "60000", "query.timeout.ms": "300000"
query.timeout.ms调大查询超时时间到5分钟,避免大表查询还未返回就被中断batch.max.rows指定每批次写入Kafka的记录数,和fetchSize对齐即可
4. 确认Topic名称&偏移量问题
- 你配置的
topic.prefix为news_,最终生成的Topic名称是news_news,不要误找newsTopic,可使用Kafka自带的控制台消费者消费确认:kafka-console-consumer.sh --bootstrap-server 你的kafka地址:9092 --topic news_news --from-beginning - 如果之前创建过同名连接器,已经提交了空偏移量,可删除旧连接器后换个名称重新创建,避免偏移量残留影响同步。
5. 排查隐藏异常
将Kafka Connect的日志级别调整为DEBUG,查看io.confluent.connect.jdbc包的日志,确认是否存在类型转换异常、序列化异常:比如news表包含JSON、BIT、超大TEXT等特殊字段,没有配置对应转换器会导致记录被静默丢弃。
内容的提问来源于stack exchange,提问作者user3640028
相关产品推荐
相关产品推荐

