小亦工单案例:kafka集群 KRaft 模式开启 SCRAM-SHA-256 SASL_PLAINTEXT 认证报错

135 阅读3分钟

这篇文章开始小亦平台会持续给大家带来一些小亦平台工单的实际案例,运维朋友们可以在小亦工单案例专栏查看更多案例

​1. 用户提问概述

环境背景:用户出于业务需要分配给其他人消费,在将未开启认证的Kafka集群(PLAINTEXT模式)切换为SCRAM-SHA-256 SASL_PLAINTEXT认证时报错。

关键操作疑问:

  • 创建SCRAM凭证是否需每台机器执行?

  • 更换磁盘后目录重建(格式化)是否需每台机器执行?若已创建SCRAM凭证是否需重复操作?

  •  客户端配置文件admin.conf的配置时机(服务启动前/后)及影响范围?

​2. 问题分析

问题原理

1.  SCRAM凭证创建机制:

SCRAM凭证是通过kafka-configs.sh --alter命令在ZooKeeper/Kafka内部存储用户凭证(如alice的密码和迭代次数)。SCRAM凭证信息全局集群共享,仅需在任一节点执行一次不需要每台机器分别执行。

2.  目录格式化操作范围:

kafka-storage.sh format用于初始化本地数据存储目录(如更换磁盘后)。同时因各节点存储路径独立,必须每台机器独立执行。与SCRAM凭证创建无冲突,因为凭证存储于集群元数据,而不是本地磁盘。

3.  客户端配置文件admin.conf:

admin.conf文件为客户端认证参数定义(如用户名、密码、安全协议)。admin.conf文件需在客户端启动前配置完成,服务端启动不受影响。客户端工具(如kafka-console-producer)需要通过--producer.config admin.conf显式引用。

​3. 解决方案与优化建议

  • 创建SCRAM凭证问题:

SCRAM 凭证创建 (kafka-configs.sh --alter): 这是一个全局集群操作,用于定义用户认证凭据。只需在集群中任意一个 Broker 节点上执行一次即可。该命令将用户凭证(如 SCRAM)写入 Kafka 集群的元数据(存储在 ZooKeeper 或 KRaft 元数据日志中),所有 Broker 都能访问这些信息。不需要在每个 Broker 节点上执行。后续新增或修改用户也只需执行此动态命令。

  • 格式化目录问题:

目录格式化 (kafka-storage.sh format): 这是一个节点本地的存储操作。它的唯一目的是初始化或重建该特定 Broker 节点的数据存储目录(例如在首次启动、更换磁盘或需要完全清理数据时)。因为每个 Broker 的存储路径是独立的,必须在需要格式化的那个 Broker 节点上单独执行。关键点:此操作仅影响该节点的本地磁盘数据,完全不影响存储在集群元数据中的 SCRAM 凭证、ACLs、Topic 配置等元数据。

后续新增用户可以通过动态命令完成:

kafka-configs --bootstrap-server localhost:9092 --alter
–add-config ‘SCRAM-SHA-256=[iterations=8192,password=alice-secret],SCRAM-SHA-512=[password=alice-secret]’
–entity-type users
–entity-name alice

避免再次格式化导致数据丢失。

  • Kafka客户端admin.conf配置问题:

admin.conf 文件用于定义客户端连接参数,其配置必须在Kafka服务启动后、客户端启动前完成,不影响broker服务启动。该文件只需要在客户端启动之前配置完成即可,确保客户端能正确建立认证连接。

技术支持专家背景:

徐杰老师,中亦科技三线技术专家,拥有超15年的中间件及开源软件运维开发经验,持有ITIL Foundation Certificate in IT Service Management资质认证,EXIN DevOps Master资质认证。 ​

运维专家坐镇,技术难题,一键提交,省心省力。 马上体验小亦工单支持:www.ces-xiaoyi.com.cn/#/workOrder…