Franz-go Kafka客户端SASL认证失败:提示SASL缺失求助
Kafka SASL_PLAINTEXT(SCRAM-SHA-512)认证连接失败解决方案
错误日志
"re-updating metadata due to err: broker closed the connection immediately after a request was issued, which happens when SASL is required but not provided: is SASL missing?"
"read from broker errored, killing connection after 0 successful responses (is SASL missing?)"
当前实现代码
auth := scram.Auth{ User: "kafka_user", Pass: "kafka_pass", } cl, err := kgo.NewClient( kgo.SeedBrokers(seeds...), kgo.DialTLSConfig(tlsConfig), kgo.SASL(auth.AsSha512Mechanism()), kgo.ConsumerGroup(consumerGroupId), kgo.ConsumeTopics(topics...), kgo.WithLogger(kzap.New(logger.GetLogger())), )
认证要求
- SSL: false
- 安全协议: SASL_PLAINTEXT
- SASL机制: SCRAM-SHA-512
- 用户名: <>
- 密码: <>
核心问题与修复步骤
1. 移除冲突的TLS配置
当前代码中设置了kgo.DialTLSConfig(tlsConfig),但认证要求SSL为false、使用SASL_PLAINTEXT协议,该配置会强制客户端发起TLS连接,与broker配置完全不匹配,直接导致连接被关闭。必须删除该配置项。
2. 显式指定安全协议
虽然kgo库可能根据SASL配置自动推断协议,但显式指定SASL_PLAINTEXT可消除歧义,避免协议匹配错误。添加kgo.SecurityProtocol("SASL_PLAINTEXT")配置项。
3. 验证认证参数准确性
确保scram.Auth中的用户名、密码与Kafka broker端配置的SCRAM用户完全一致,包括大小写、特殊字符等细节。
修复后的代码
auth := scram.Auth{ User: "your-actual-username", // 替换为真实用户名 Pass: "your-actual-password", // 替换为真实密码 } cl, err := kgo.NewClient( kgo.SeedBrokers(seeds...), kgo.SecurityProtocol("SASL_PLAINTEXT"), kgo.SASL(auth.AsSha512Mechanism()), kgo.ConsumerGroup(consumerGroupId), kgo.ConsumeTopics(topics...), kgo.WithLogger(kzap.New(logger.GetLogger())), ) if err != nil { log.Fatalf("failed to initialize Kafka client: %v", err) }
额外排查方向
- 检查Kafka broker的listener配置,确认已开启
SASL_PLAINTEXT端口,且SCRAM-SHA-512机制已启用、用户已正确添加到broker的认证存储中。 - 排查客户端与broker之间的网络,确保对应端口没有被防火墙、安全组拦截。
- 查看Kafka broker的系统日志,获取更具体的拒绝原因(如用户不存在、密码校验失败等)。
内容的提问来源于stack exchange,提问作者Ujjwal Verma
相关产品推荐
相关产品推荐

