You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Spring Boot Kafka在Kafka集群创建SCRAM用户凭证

实现说明

你提到的KafkaConfig是Spring Kafka提供的客户端消费/生产配置类,不具备集群用户凭证管理的能力。对应命令行的SCRAM凭证配置操作,需要通过Spring Kafka封装的KafkaAdmin客户端实现,具体步骤如下:

目标等价命令:

kafka-configs --zookeeper zookeeper-1:22181 --alter --add-config \
'SCRAM-SHA-256=[iterations=4096,password=password],SCRAM-SHA-512=[iterations=4096,password=password]' \
--entity-type users --entity-name metricsreporter

前置依赖

确保项目已经引入Spring Kafka依赖,Spring Boot项目直接引入starter即可:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>3.2.0</version> <!-- 替换为实际使用的最新正式版本 -->
</dependency>

连接配置

在配置文件中配置Kafka集群连接信息,注意新版Kafka Admin API直连Broker即可,不需要连接ZooKeeper,你贴的--zookeeper参数是Kafka 2.8之前旧版本的用法:

spring:
  kafka:
    bootstrap-servers: your-kafka-broker:9092
    admin:
      properties:
        # 配置管理员账号认证信息,需拥有集群配置修改权限
        security.protocol: SASL_PLAINTEXT
        sasl.mechanism: SCRAM-SHA-256
        sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="your-admin-password";

凭证创建代码

通过KafkaAdmin获取原生AdminClient实例,调用SCRAM凭证修改API即可完成操作:

import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.ScramCredentialInfo;
import org.apache.kafka.clients.admin.ScramMechanism;
import org.apache.kafka.clients.admin.UserScramCredentialAlteration;
import org.apache.kafka.clients.admin.UserScramCredentialUpsertion;
import org.springframework.kafka.core.KafkaAdmin;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import java.util.List;

@Component
public class KafkaScramCredentialService {

    @Resource
    private KafkaAdmin kafkaAdmin;

    public void upsertMetricsReporterCredential() throws Exception {
        try (AdminClient adminClient = AdminClient.create(kafkaAdmin.getConfigurationProperties())) {
            // 配置SCRAM-SHA-256凭证,迭代次数、密码和原命令完全一致
            UserScramCredentialAlteration sha256Cred = new UserScramCredentialUpsertion(
                    "metricsreporter",
                    new ScramCredentialInfo(ScramMechanism.SCRAM_SHA_256, 4096),
                    "password".getBytes()
            );
            // 配置SCRAM-SHA-512凭证
            UserScramCredentialAlteration sha512Cred = new UserScramCredentialUpsertion(
                    "metricsreporter",
                    new ScramCredentialInfo(ScramMechanism.SCRAM_SHA_512, 4096),
                    "password".getBytes()
            );
            // 提交修改,等待执行完成
            adminClient.alterUserScramCredentials(List.of(sha256Cred, sha512Cred))
                    .all()
                    .get();
        }
    }
}
注意事项
  • 如果你的Kafka版本低于2.7,不存在alterUserScramCredentialsAPI,需要直接操作ZooKeeper下的/config/users节点写入凭证信息,建议升级到稳定新版Kafka,避免直接依赖ZooKeeper做集群管理。
  • 生产环境不要硬编码明文密码,通过配置中心、环境变量等方式注入敏感凭证。
  • 执行操作的账号必须拥有集群ALTER_CONFIGS权限,否则会抛出权限异常。

内容的提问来源于stack exchange,提问作者utkarsh saraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:33:11