分布式Kafka Connect集群不同节点查询connector任务状态结果不一致咨询
问题根因定位
最核心的诱因就是connect-statuses-0分区目录下.snapshot文件的权限异常:如果Kafka Connect进程使用非root用户启动,节点1上属主为root的.snapshot文件会被进程拒绝访问,导致节点无法加载最新的任务状态快照,只能返回空的tasks数组,和节点2的查询结果产生差异。
必做排查项
- 查看两个节点的Connect进程运行用户,执行命令:
确认节点1的进程启动用户是否和.snapshot文件的root属主不匹配,若存在不匹配则直接实锤权限问题。ps aux | grep ConnectDistributed - 拉取节点1的Connect服务运行日志,搜索
permission denied、snapshot、connect-statuses关键字,可直接找到读取状态主题快照失败的报错记录。 - 直接读取状态存储主题的全量数据,确认任务状态数据本身没有丢失:
正常情况下能查询到id=0的任务状态记录。kafka-console-consumer.sh --bootstrap-server <Kafka集群地址> --topic <你配置的status.storage.topic名称> --from-beginning
修复步骤
- 依次停掉所有Kafka Connect节点
- 递归修改所有节点上状态主题分区目录的属主为Connect进程的运行用户:
chown -R <运行Connect的用户名>:<对应用户组> <Kafka数据根目录>/connect-statuses-0 - 先重启Kafka Broker集群,再按顺序重启所有Kafka Connect节点,等待2分钟待集群状态完成同步后,再调用两个节点的REST接口查询,返回结果即可保持一致。
内容的提问来源于stack exchange,提问作者Niranjan R
相关产品推荐
相关产品推荐

