Kafka 2.13-2.80使用JDBC连接器同步MySQL数据消费失败求助
可能存在的异常原因
- Kafka日志目录异常:Windows Server环境下,
server.properties中log.dirs配置的路径存在权限不足、被其他进程占用、或之前Kafka异常退出导致目录文件损坏的情况,会导致Broker无法加载分区副本,触发offline log directory报错。 - ZooKeeper会话超时配置不合理:默认的ZK会话超时阈值较低,Windows环境IO性能波动较大时容易触发会话过期,导致Broker与ZK连接中断,Controller选举异常,最终分区无法选举出可用Leader(即报错中的
new leader -1)。 - 主题自动创建开关未开启:若
server.properties中auto.create.topics.enable设置为false,JDBC连接器首次写入数据时无法自动创建目标主题,也会导致数据无法写入。 - JDBC连接器配置错误:
mysql.properties中配置的数据库账号无对应表的查询权限、自增列id配置与实际表结构不符、库名/表名拼写错误,也会导致数据无法同步到Kafka。
排查思路
- 修复Kafka日志目录异常
- 停止Kafka、ZooKeeper服务,打开
server.properties找到log.dirs配置的路径,清空该目录下所有文件;同时打开zookeeper.properties找到dataDir配置的路径,清空该目录下所有文件(操作会清除所有历史数据,可根据需要备份),之后重启ZK和Kafka服务测试。 - 检查
log.dirs、dataDir对应的目录权限,给运行服务的Windows账号开放完全控制权限,避免权限不足导致写入失败。
- 停止Kafka、ZooKeeper服务,打开
- 调整ZooKeeper会话超时配置
- 修改
zookeeper.properties中的maxSessionTimeout参数,调大到60000(单位为毫秒,即60秒)。 - 修改
server.properties中的zookeeper.session.timeout.ms参数,调大到30000以上,避免IO波动导致会话意外过期。
- 修改
- 验证Broker与主题状态
- 服务启动完成后,运行命令
kafka-topics.bat --list --bootstrap-server localhost:9092确认test-mysql-jdbc-groups主题是否存在。 - 运行命令
kafka-topics.bat --describe --topic test-mysql-jdbc-groups --bootstrap-server localhost:9092查看主题分区状态,若Leader列显示为-1说明分区仍然异常,重复第一步的目录清理操作即可。 - 若主题不存在,可手动创建:
kafka-topics.bat --create --topic test-mysql-jdbc-groups --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1,之后重启连接器测试。
- 服务启动完成后,运行命令
- 验证JDBC连接器配置
- 登录MySQL数据库,确认配置的账号拥有
groups表的查询权限,确认groups表的id字段为自增非空字段,插入数据后id值为递增状态,符合incrementing同步模式的要求。
- 登录MySQL数据库,确认配置的账号拥有
内容的提问来源于stack exchange,提问作者Abdul Mohammed
相关产品推荐
相关产品推荐

