单机部署Kafka和开启SASL认证以及基础命令使用

该文详细介绍了如何在Linux环境中部署ApacheKafka3.3.2和Zookeeper3.7.1,并启用SASL认证。步骤包括下载安装包、解压、修改配置文件、启动服务、创建Jaas配置文件以及客户端验证。此外,还涉及了添加依赖jar包、修改启动脚本以加载认证信息等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本

操作系统:linux
kafka:kafka_2.13-3.3.2
zookeeper:apache-zookeeper-3.7.1-bin

部署

1.下载zookeeper和kafka安装包

cd /home
wget https://downloads.apache.org/kafka/3.3.2/kafka_2.12-3.3.2.tgz
wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz

2.解压

tar -zxvf kafka_2.12-3.3.2.tgz
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz

3.修改zookeeper配置文件并启动

cd apache-zookeeper-3.7.1-bin/config
cp zoo_sample.cfg zoo.cfg

修改zoo.cfg文件,增加以下命令

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000

创建zk_server_jaas.conf文件(开启kafka sasl认证使用),文件内容

Server {
	# 认证方式为DigestLoginModule
    org.apache.zookeeper.server.auth.DigestLoginModule required
    # zk集群使用的账号  		
    username="kafka"
    # zk集群使用的密码
    password="kafka"
    # kafka连接使用的账号和密码,写法为user_账号=“密码”
    user_kafka="kafka";
};

此外,认证过程需要导入kafka的依赖类,在下载的kafka/libs目录找到以下四个jar包,在zookeeper目录下创建zk_sasl_dependency目录(具体目录可根据实际情况进行修改,后续在配置文件中指定到实际目录就可以)

kafka-clients-3.3.2.jar
lz4-java-1.8.0.jar
slf4j-api-1.7.36.jar
slf4j-reload4j-1.7.36.jar
snappy-java-1.1.8.4.jar

修改bin/zkEnv.sh文件,将zk的sasl认证信息加载到jvm参数中,在zk服务启动时加载认证的jar包和认证信息

for i in /home/apache-zookeeper-3.7.1-bin/zk_sasl_dependency/*.jar; 
do 
    CLASSPATH="$i:$CLASSPATH"
done
SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/home/apache-zookeeper-3.7.1-bin/config/zk_server_jaas.conf "

进入bin目录启动zk

./zkServer.sh start

4.修改kafka配置并启动
新增kafka_server_jaas.conf文件

cd /home/kafka_2.13-3.3.2/config

创建kafka_server_jaas.conf

KafkaServer {
	# 指定认证方法为PLAIN
    org.apache.kafka.common.security.plain.PlainLoginModule required
    # kafka多个broker认证的账号
    username="admin"
    # kafka多个broker认证的密码
    password="admin"
    # 定义一个用户账号为admin,密码为admin
    user_admin="admin"
    # 定义一个用户账号为kafka,密码为kafka,需要和zk中定义的账号密码保持一致
    user_kafka="kafka";
};
# 猜测可能是集群环境下当前服务作为client的配置,但未进行实践,单机模式下可不用
Client {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="kafka"
    password="kafka";
};

开启SASL认证,修改server.properties配置文件,增加以下内容

# 允许外部端口连接
listeners=SASL_PLAINTEXT://192.168.0.106:9092
# 认证方式
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN 
sasl.enabled.mechanisms=PLAIN
allow.everyone.if.no.acl.found=true
# 对外提供服务的代理地址
advertised.listeners=SASL_PLAINTEXT://192.168.0.106:9092

修改bin目录下kafka启动脚本,在jvm参数中增加认证信息

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G“ 修改为
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/home/kafka_2.13-3.3.2/config/kafka_server_jaas.conf"

启动服务

./kafka-server-start.sh  ../config/server.properties

验证

使用kafka自带的客户端脚本进行测试验证
1.添加客户端认证信息
config目录下新建kafka_client_jaas.conf,添加以下内容

KafkaClient {
  # 指定连接方式
  org.apache.kafka.common.security.plain.PlainLoginModule required
  # 客户端用户名,与kafka_server_jaas.conf中账号密码保持一致
  username="kafka"
  # 客户端密码
  password="kafka";
};

2.修改config目录下producer.properties和consumer.properties,增加以下内容

security.protocol=SASL_PLAINTEXT 
sasl.mechanism=PLAIN

3.修改客户端和服务端的启动脚本kafka-console-producer.sh和kafka-console-consumer.sh,将kafka_client_jaas.conf认证信息添加至启动参数中

export KAFKA_HEAP_OPTS="-Xmx512M"
修改为
export KAFKA_HEAP_OPTS="-Xmx512M  -Djava.security.auth.login.config=/home/kafka_2.13-3.3.2/config/kafka_client_jaas.conf"

4.kafka-topics.sh添加认证信息,确保能使用命令行创建/删除topic
config目录下添加sasl_client.conf文件,指定命令执行时的认证方式,文件内容:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

修改kafka-topics.sh启动脚本,使用kafka_client_jaas.conf客户端文件中的验证参数

新增
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/home/kafka_2.13-3.3.2/config/kafka_client_jaas.conf"

创建名称为test、只有一个分区的topic

bin/kafka-topics.sh --create --topic test --partitions 1 --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

5.启动生产者和消费者服务

启动生产者
./bin/kafka-console-producer.sh --broker-list 192.168.0.106:9092 --topic test --producer.config config/producer.properties

启动消费者
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.106:9092 --topic test --from-beginning --consumer.config config/consumer.properties

生产者发送消息后消费者可正常收到,整体验证结束

常用命令

topic

1.查看所有topic

bin/kafka-topics.sh --list --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

2.查看名称为test的topic

bin/kafka-topics.sh --topic test --describe --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

3.创建test的topic,并且创建一个分区

bin/kafka-topics.sh --create --topic test --partitions 1 --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

4.删除名称为test的topic

bin/kafka-topics.sh --delete --topic test  --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

groups

使用kafka-consumer-groups.sh脚本之前,需要参照kafka-topics.sh脚本先进行修改,将kafka_client_jaas.conf文件中的配置信息导入到环境变量中
1.查看所有的groups信息

bin/kafka-consumer-groups.sh --list --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

2.查看指定的groups信息

bin/kafka-consumer-groups.sh --group test --describe --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

3.查看指定分组的offset和描述

bin/kafka-consumer-groups.sh --group 'test' --offsets --describe --bootstrap-server 192.168.0.106:9092 --command-config config/sasl_client.conf

producer

生产消息

bin/kafka-console-producer.sh --broker-list 192.168.0.106:9092 --topic test --producer.config config/producer.properties

consumer

消费消息

bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.106:9092 --topic test --from-beginning --consumer.config config/consumer.properties

相关网址

参考博客

https://www.cnblogs.com/ilovena/p/10123516.html
https://blog.csdn.net/small_tu/article/details/109534634

kafka官网

https://kafka.apache.org/

kafka中文文档

https://kafka.apachecn.org/

<think>嗯,用户的问题是关于在Kafka启用SASL认证时,如何配置ZooKeeper连接不使用SASL。我需要先理解他们的问题场景。可能的情况是,用户已经为Kafka配置了SASL认证,但希望ZooKeeper保持不启用SASL,或者两者使用不同的认证机制。这个时候需要确保Kafka与ZooKeeper之间的连接不需要SASL。 首先,我需要回忆一下KafkaZooKeeper的配置关系。Kafka作为分布式系统,通常依赖ZooKeeper来进行元数据管理协调。在配置Kafka的安全机制时,ZooKeeper的安全配置通常是独立的,也就是说,KafkaSASL配置不一定影响ZooKeeper的连接。但用户可能遇到了问题,比如Kafka尝试用SASL连接ZooKeeper,而ZooKeeper并没有配置SASL,导致连接失败。 接下来,我需要查阅相关的配置参数。Kafka的配置文件中,特别是server.properties,有关于ZooKeeper连接的参数,比如zookeeper.connect。如果用户希望禁用SASL,可能需要检查是否有与安全相关的参数被错误地应用到了ZooKeeper连接上。例如,是否在Kafka的配置中设置了ZooKeeper的SASL相关属性,如zookeeper.client.secure或者security相关的参数。 根据引用内容,引用[2]中提到了ZooKeeperKafkaSASL认证配置,其中Kafka的server.properties配置了SASL_PLAINTEXT监听器,但并没有提到ZooKeeper的配置是否需要同步修改。可能用户在这里误解了,认为KafkaSASL配置会自动应用到ZooKeeper,但实际上两者是分开的。 正确的做法应该是确保Kafka连接ZooKeeper时使用的是普通连接,而不是SASL。这时候需要检查Kafka的配置中是否有与ZooKeeper安全相关的参数被设置。例如,zookeeper.client.config参数指定了ZooKeeper客户端的配置文件,如果这个文件中有SASL配置,就需要将其移除或设置为不使用SASL。 另外,Kafka的ZooKeeper客户端默认是不使用SASL的,除非显式配置。所以用户可能的问题是,在配置KafkaSASL时,错误地配置了ZooKeeper的SASL参数,导致连接失败。解决方法就是检查这些配置,并确保ZooKeeper连接使用的是普通的无认证方式。 同时,需要提醒用户,如果ZooKeeper本身启用了SASL,那么Kafka必须配置相应的参数来连接。但用户的问题正好相反,希望ZooKeeper不启用SASL,所以只需确保Kafka的配置中没有为ZooKeeper启用SASL即可。 总结下来,步骤应该是:检查Kafka配置中的ZooKeeper相关参数,移除任何SASL设置,确保ZooKeeper连接使用普通协议,如PLAINTEXT,并且不需要SASL认证。同时,可能需要验证ZooKeeper本身的配置是否确实没有启用SASL,避免因为ZooKeeper服务端的问题导致连接失败。</think>在Kafka启用SASL认证时,若需要配置ZooKeeper连接不使用SASL,需通过以下步骤实现: ### 一、核心原理 Kafka与ZooKeeper的认证配置相互独立。KafkaSASL认证通过`server.properties`实现,而ZooKeeper连接的安全性需通过**独立的客户端配置**控制。默认情况下,若未显式配置ZooKeeper的SASL参数,Kafka将以普通明文协议连接ZooKeeper[^3]。 ### 二、具体配置步骤 1. **保持ZooKeeper未启用SASL** - 确保ZooKeeper的`zoo.cfg`配置文件中未添加SASL相关参数(如`authProvider.*`或`requireClientAuthScheme`) 2. **修改Kafka的ZooKeeper客户端配置** 在Kafka的`server.properties`中**显式指定非SASL协议**: ```properties zookeeper.connect=plaintext://zk_host1:2181,plaintext://zk_host2:2181 ``` 3. **隔离ZooKeeper客户端配置** 创建独立的ZooKeeper客户端配置文件(如`zookeeper-client.properties`),内容为: ```properties zookeeper.sasl.client=false zookeeper.client.secure=false ``` 4. **启动Kafka时指定配置文件** ```bash KAFKA_OPTS="-Dzookeeper.client.config=/path/to/zookeeper-client.properties" ./bin/kafka-server-start.sh config/server.properties ``` ### 三、验证方法 通过ZooKeeper四字命令验证连接类型: ```bash echo stat | nc localhost 2181 | grep Mode ``` 若输出显示`Mode: standalone`且无SASL相关字段,说明连接未使用SASL[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值