声明:本文不介绍Kerberos认证相关理论知识,想了解的可自行查阅相关资料。
醉春风~我醉春风~喔喔……伤她心,我是万万不能。
指令:
mkdir -p /var/local/kafka/jaas
执行效果如图:
指令:
vim /var/local/kafka/jaas/kafka_zookeeper_jaas.conf
内容:
Server {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="zkadmin"
password="zkadmin-pwd";
};
执行效果如图:
说明:此步骤在此处配置了一个新的用户:zkadmin/zkadmin-pwd。
注:除了username的值与password的值可以自定义外,其他地方最好不要乱改。
指令:
vim /var/local/kafka/jaas/kafka_server_jaas.conf
内容:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="zkadmin"
password="zkadmin-pwd"
user_zkadmin="zkadmin-pwd"
user_alice="alice-pwd"
user_bob="bob-pwd";
};
执行效果如图:
注:添加Kafka用户的格式为:user_用户名=密码。
注:此步骤中的username项的值、password项的值必须与第二步设置的账号密码一样,这样kafka访问zookeeper时
才能通过Kerberos认证;且必须有一个Kafka用户的用户名、密码是与第二步时设置的用户名密码一样,这样
zookeeper访问kafka才能通过Kerberos认证。
注:在此步骤中,除了配置了一个必须的Kafka账户zkadmin/zkadmin-pwd外,还配置了两个用户:
alice/alice-pwd、bob/bob-pwd。
追注:准备多个用户的目的,是为了方便后面演示给不同的用户授不同的权限,虽然本人不打算
将ACL相关部分从《程序猿成长笔记(第四部)》中分享至CSDN。
说明:如果要想正常去使用kerberos认证处理,必须由用户自己去指派jaas的访问路径,也就是说kafka本身依赖
于JDK,那么这个时候必须通过JDK中的初始化参数去定义好jaas访问路径之后才可以进行处理。
第一小步:修改zookeeper服务启动命令
指令:
vim /var/local/kafka/bin/zookeeper-server-start.sh
内容:
export KAFKA_OPTS="-Djava.security.auth.login.config=/var/local/kafka/jaas/kafka_zookeeper_jaas.conf"
执行效果如图:
第二小步:修改kafka服务启动命令
指令:
vim /var/local/kafka/bin/kafka-server-start.sh
内容:
export KAFKA_OPTS="-Djava.security.auth.login.config=/var/local/kafka/jaas/kafka_server_jaas.conf"
执行效果如图:
指令:
vim /var/local/kafka/config/server.properties
内容:
############################# Server Basics #############################
# Kerberos认证配置
# 编写内部的通讯连接
listeners=SASL_PLAINTEXT://kafka-single:9095
# 设置外部的通讯连接
advertised.listeners=SASL_PLAINTEXT://kafka-single:9095
# 设置使用的通讯协议
security.inter.broker.protocol=SASL_PLAINTEXT
# 启用SASL处理机制间的通讯
sasl.enabled.mechanisms=PLAIN
#设置broker之间的传输机制
sasl.mechanism.inter.broker.protocol=PLAIN
broker.id=0
############################# Socket Server Settings #############################
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
############################# Log Basics #############################
log.dirs=/usr/data/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
############################# Internal Topic Settings #############################
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0
# 后台启动zookeeper
/var/local/kafka/bin/zookeeper-server-start.sh /var/local/kafka/config/zookeeper.properties > /usr/data/zookeeper.log 2>&1 &
# 前台启动kafak
/var/local/kafka/bin/kafka-server-start.sh /var/local/kafka/config/server.properties
注:启动kafka时最好使用进程独占一个shell的方式前台启动,这样能非常直观得查看启动kafka是否成功。
提示:前台启动kafka时,如果成功启动,说明之前配置的Kerberos没有问题;如果配置的Kerberos有问题,那么
会启动失败,并且会打印出一堆错误信息。