为何Kafka Connect分布式模式始终仅分配一个任务?
我来帮你捋一捋Confluent 3.1.2分布式模式下,tasks.max=4却只启动1个任务的常见原因:
源主题分区数不够:Kafka Connect的任务分配逻辑和源主题的分区数强绑定——每个任务负责处理一个或多个分区,但任务数量绝对不会超过主题的分区总数。如果你的源Kafka主题只有1个分区,那不管
tasks.max设成多少,最终只能启动1个任务。你可以用这个命令查看主题分区数:kafka-topics --zookeeper <zk-host>:2181 --describe --topic <your-source-topic>Elasticsearch连接器版本限制:Confluent 3.1.2对应的Elasticsearch连接器版本比较早,早期版本的连接器可能对多任务支持有限。有些旧版连接器默认单任务运行,需要特定配置才能开启并行处理,甚至部分场景下本身就不支持按分区拆分任务。你可以查阅对应版本的连接器文档,确认是否有开启多任务的必要配置项。
Connect Worker集群状态异常:虽然你提到4台设备共用一个
group.id,但得确认所有worker都正常加入了集群。可以通过Connect的REST API调用GET /workers查看在线节点数量,如果只有1个worker在线,那即使tasks.max=4,这个worker最多也只能运行自身承载范围内的任务(还要看worker的task.max配置,这个参数是单worker能运行的最大任务数,默认是10,但如果被改小也会受影响)。另外,如果worker之间网络不通、核心配置(比如bootstrap.servers)不一致,也会导致部分节点无法加入集群,任务只能分配到少数节点上。连接器配置未正确生效:先确认你的连接器配置里
tasks.max确实被设置为4。可以用GET /connectors/<your-connector-name>/config这个REST API获取当前配置,检查参数是否正确。有时候可能是拼写错误(比如写成task.max少了s),或者提交配置时出现错误导致参数未被应用。权限或资源限制:如果Connect Worker没有足够的权限访问源主题的所有分区,Kafka组协调器只会给它分配有权限的分区,任务数自然就少了。另外,如果worker所在机器的CPU、内存资源不足,Connect可能会自动限制任务数,避免资源耗尽。你可以查看worker的日志,看看有没有权限相关的报错或者资源不足的警告信息。
内容的提问来源于stack exchange,提问作者Dogil

