linux搭建kafka 并添加SASL/PLAIN
前言
生产环境需要用到kafka(集群),测试没有相对应的环境,所以在测试环境机器上搭建,话不多说,直接上货
准备安装包
使用zookeeper的版本是zookeeper-3.4.10
kafka 版本:kafka_2.12-2.1.1,当然,其他版本也都是适配,版本适配就好。
搭建的系统为:linux
百度网盘链接:链接:
链接: zookeeper3.4.10-kafka_2.12-2.1.1提取码: najr
搭建zookeeper
tar -xvf zookeeper-3.4.10.tar.gz
解压完成之后是这个目录
cd 进去
配置zookeeper的配置文件
1、如果是嵌入式zookeeper(kafka自带的zookeeper)
修改/usr/local/kafka/config/zookeeper.properties文件,添加如下配置
下面展示一些 内联代码片
。
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
zookeeper.sasl.client=true
2、如果是非嵌入式zookeeper(单机安装的zookeeper服务)
修改/usr/local/zookeeper/conf/zoo.cfg文件,添加和上面一样的配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
zookeeper.sasl.client=true
二、创建jaas文件
在zookeeper的安装目录下的conf目录下创建zk_jaas.conf文件,并编辑内容
嵌入式zookeeper目录:/usr/local/kafka/config/zk_jaas.conf
单机zookeeper目录:/usr/local/zookeeper/conf/zk_jaas.conf
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="admin"
user_admin="admin";
};
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="admin";
};
user_admin="admin"的含义是user_username=“password”,添加一个用户名为admin,密码为admin的认证用户,用户名和密码可以自己定义。
三、配置zookeeper客户端环境变量
因为如果要连接zookeeper的话是需要通过SASL认证的,所以需要配置环境变量,这里的环境变量主要是使用到了zk_jaas.conf文件中的Client配置,会在连接时使用用户名和密码。
然后启动zookeeper的服务:
然后验证一下:
/usr/local/zookeeper/bin/zkCli.sh -server {hostname}:{port}
链接成功!
安装kafka
解压安装包:tar -xvf kafka_2.12-2.1.1.tgz
1、config 目录下的 server.properties 文件 进行修改。 我的做法是保持 源文件不动 又复制了 一份
在复制上面进行改动 server-sasl.properties 修改文件
下面展示一些 内联代码片
。
# 添加下面的配置 ip和端口改成自己需要
listeners=SASL_PLAINTEXT://xx.xx.xx.xx:8123
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
2、
在config目录添加kafka_server_jaas.conf 文件 此文件是服务端 设置用户名 和密码
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin"
user_admin="admin";
};
其中 Kafka 定义了关键字KafkaServer字段用于指定服务端登录配置。该配置通过org.apache.
org.apache.kafka.common.security.plain.PlainLoginModule由指定采用PLAIN 机制, 定义了两个用户, 用户通
过usemame 和password 指定该代理与集群其他代理初始化连接的用户名和密码, 通过“ user_ "
为前缀后接用户名方式创建连接代理的用户名和密码,例如, user_admin = "admin” 是指
用户名为admin, 密码为admin
3、在config目录添加kafka_client_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin";
};
4、修改目录/kafka_2.12-1.1.1/bin 下的 kafka-server-start.sh文件 。 我的做法也是复制出来一份 ,然后进行修改
kafka-server-start-saal.sh 添加以下文件
if [ "x$KAFKA_OPTS" ]; then
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka_2.12-1.1.1/config/kafka_server_jaas.conf"
fi
5、修改目录kafka_2.12-1.1.1/bin 下的 kafka-console-producer.sh 和 kafka-console-consumer.sh 文件
也是 都各自复制一份 在复制上面进行修改
if [ "x$KAFKA_OPTS" ]; then
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka_2.12-1.1.1/config/kafka_client_jaas.conf"
fi
6、kafka中server.properties的配置
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
############################# Socket Server Settings #############################
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092
# 添加下面的配置 ip和端口改成自己需要
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://ip:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
#advertised.listeners=PLAINTEXT://your.host.name:9092
到此为止 kafka的 SASL/PLAIN 认证 就添加完成了
开始验证
我这里使用idea 来进行验证
idea 插件在这里就不过多阐述了,请大家自由搭建自己的环境吧!!!