wordpress做社交网站,合肥知名网站制作,零食电子商务网站建设策划书,网络运营管理前言
1、前面自己写了一篇关于各个环境各个模式的安装的文章#xff0c;大家可以去看看 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式
2、使用版本 kafka_2.13-3.4.1
3、kafka验证方式#xff0c;有两大类如下#xff0c;文档内容在 kafka官方文档的 第七节…前言
1、前面自己写了一篇关于各个环境各个模式的安装的文章大家可以去看看 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式
2、使用版本 kafka_2.13-3.4.1
3、kafka验证方式有两大类如下文档内容在 kafka官方文档的 第七节 security强烈建议大家去看下不想看英文的可以翻译中文后看
SSL 官方3.4.x SSL 文档链接SASL 官方3.4.x SASL 文档链接 4、而SASL 又细分如下 4 小类这四种都可以使用
类型说明官方文档链接SASL/GSSAPI (Kerberos)使用的Kerberos认证可以集成目录服务比如AD。从Kafka0.9版本开始支持KerberosSASL/PLAIN使用简单用户名和密码形式。从Kafka0.10版本开始支持不支持动态增加账户和密码SASL/PLAINSASL/SCRAM-SHA-256主要解决PLAIN动态更新问题以及安全机制从Kafka0.10.2开始支持SCRAMSASL/SCRAM-SHA-512主要解决PLAIN动态更新问题以及安全机制从Kafka0.10.2开始支持SCRAMSASL/OAUTHBEARER基于OAuth 2认证框架从Kafka2.0版本开始支持OAUTHBEARER
5、在后面指定java 实现的时候可以去源码里面找对应的如下
6、需要先明确的一点是用户认证和权限控制是两码事。用户认证是确认这个用户能否访问当前的系统而权限控制是控制用户对当前系统中各种资源的访问权限。用户认证就是今天要讲的内容而kafka的权限控制则是对应 bin/kafka-acls.sh 工具所提供的一系列功能这里不详细展开。
一、Linux 环境
在SASL/PLAIN 模式中 Kafka的SASL_SSL和SASL_PLAINTEXT是两种不同的安全协议用于保护Kafka集群中的通信。它们提供了不同级别的安全性和身份验证选项 SASL_SSL (Simple Authentication and Security Layer over SSL/TLS)这是Kafka的高度安全的传输协议。它结合了SSL/TLS用于加密通信和SASL用于身份验证来提供强大的安全性。使用SASL_SSLKafka客户端和服务器之间的通信将是加密的并且需要经过身份验证才能建立连接。常见的身份验证机制包括GSSAPIKerberos、PLAIN用户名和密码等。SASL_SSL是Kafka中最安全的选项适用于敏感数据和合规性要求高的场景。 SASL_PLAINTEXT (Simple Authentication and Security Layer over plaintext)这是Kafka的另一种SASL支持方式但不涉及加密。使用SASL_PLAINTEXT身份验证是必需的但通信不加密。这意味着数据在传输过程中是以明文形式传输的因此对于保护数据隐私要求较低的场景或在内部网络中使用时可以选择此选项。常见的身份验证机制也包括PLAIN用户名和密码等。
通常SASL_SSL是更安全的选项因为它不仅提供身份验证还提供数据的加密从而更好地保护了数据的隐私和完整性。但是它的配置相对复杂可能需要设置SSL/TLS证书和密钥以及身份验证机制。SASL_PLAINTEXT相对来说更容易配置但数据在传输过程中不加密可能不适用于对数据隐私有更高要求的场景。
你的选择应该根据你的具体安全需求来决定。在需要高度安全性的生产环境中通常会选择SASL_SSL而在开发和测试环境中SASL_PLAINTEXT可能更为方便。无论选择哪种方式都需要谨慎配置和管理Kafka的安全设置以确保系统的安全性。
所以下面文章中的 SASL_PLAINTEXT 可以替换为 SASL_SSL相应的配置可以改成如下可以看官网的 SASL/PLAIN这一节采用的就是这种 3、下载后解压
tar -xzf kafka_2.13-3.4.1.tgz
cd kafka_2.13-3.4.11.1、Kafka with KRaft 单节点 SASL/PLAIN 模式授权
1.1.1、服务端
1.1.1.1、编写服务端授权文件
1、编写授权文件 kafka_server_jaas.conf此配置定义了两个用户admin 和 client 。代理使用 KafkaServer 部分中的属性用户名和密码来启动与其他代理的连接。在此示例中admin 是代理间通信的用户。属性集 user_用户名定义 是连接到代理的所有用户的密码代理验证所有客户端连接。
# 因为我这里是使用 kraft 模式启动所以就把服务端的配置都放在这里了
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft# 创建文件内容如下
vim kafka_server_jaas.conf### 末尾 分号一定不能忘记
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernameadminpasswordadmin-secretuser_adminadmin-secretuser_clientclient-secret;
};1.1.1.2、编写服务端启动脚本
1、复制kafka服务端启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin/
cp kafka-server-start.sh kafka-server-start-sasl.sh2、修改我们copy的启动脚本将我们前面将要创建的配置文件kafka_jaas.conf给指定进去
cd /opt/kafka/kafka_2.13-3.4.1/bin
vim kafka-server-start-sasl.sh# 将export KAFKA_HEAP_OPTS-Xmx1G -Xms1G修改为
export KAFKA_HEAP_OPTS-Xmx1G -Xms1G -Djava.security.auth.login.config/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_server_jaas.conf1.1.1.3、修改服务端 配置文件 server.properties
1、我这边是启动的 kraft 模式所以我就修改对应的 kraft 目录下的配置文件即可
# 进入kraft/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft# copy并编辑server.properties文件
cp server.properties server-sasl.properties# 修改
vim server-sasl.properties# 修改以下内容
###
listenersSASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.nameSASL_PLAINTEXT
advertised.listenersSASL_PLAINTEXT://192.168.173.129:9092
sasl.enabled.mechanismsPLAIN
sasl.mechanism.inter.broker.protocolPLAIN
###1.1.2、客户端
1.1.2.1、编写客户端授权文件
# 因为我这里是使用 kraft 模式启动所以就把客户端的配置都放在这里了
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft# 创建文件内容如下
vim kafka_client_jaas.conf### 末尾 分号一定不能忘记
KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernameclientpasswordclient-secret;
};1.1.2.2、编写消费者启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin# copy 并修改
cp kafka-console-consumer.sh kafka-console-consumer-sasl.sh# 修改指定我们前面写的客户端配置文件
vim kafka-console-consumer-sasl.sh# ★ 将export KAFKA_HEAP_OPTS-Xmx1G -Xms1G修改为
export KAFKA_HEAP_OPTS-Xmx512M -Djava.security.auth.login.config/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_client_jaas.conf1.1.2.3、编写消费者启动脚本的配置文件 consumer.properties
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config# copy编辑consumer-sasl.properties内容
cp consumer.properties consumer-sasl.properties
vim consumer-sasl.properties###
security.protocolSASL_PLAINTEXT
sasl.mechanismPLAIN
###1.1.2.4、编写生产者启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin# copy 并修改
cp kafka-console-producer.sh kafka-console-producer-sasl.sh# 修改指定我们前面写的客户端配置文件
vim kafka-console-producer-sasl.sh# ★ 将export KAFKA_HEAP_OPTS-Xmx1G -Xms1G修改为
export KAFKA_HEAP_OPTS-Xmx512M -Djava.security.auth.login.config/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_client_jaas.conf1.1.2.3、编写生产者启动脚本的配置文件 producer.properties
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config# copy编辑consumer-sasl.properties内容
cp producer.properties producer-sasl.properties
vim producer-sasl.properties###
security.protocolSASL_PLAINTEXT
sasl.mechanismPLAIN
###1.1.1.5、修改通用命令脚本的配置文件
1、什么是通用命令脚本比如说创建topic的脚本它链接kafka也是需要认证的所以我们为这一类没有指定配置的脚本创建一个通用的
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft
# 创建command_config文件
touch command_config
# 编辑command_config内容
vim command_config### 千万注意 最后的分号 不能忘记了
security.protocolSASL_PLAINTEXT
sasl.mechanismPLAIN
sasl.jaas.configorg.apache.kafka.common.security.scram.ScramLoginModule required usernameclient passwordclient-secret;
###1.1.3、启动
1、完成上面的配置那么我们就可以启动了就是正常的 kraft 模式启动流程。
1.1.3.1、生成集群 UUID
# 进入到文件夹
cd /opt/kafka/kafka_2.13-3.4.1
# 创建 集群id
KAFKA_CLUSTER_ID$(bin/kafka-storage.sh random-uuid)
# 查看集群id是多少
echo $KAFKA_CLUSTER_ID1.1.3.2、格式化日志目录
1、使用上面的 KAFKA_CLUSTER_ID 参数默认存储目录是/tmp/kraft-combined-logs你可以修改配置文件的值 注意这里使用的是 config/kraft/sasl.properties, 你可以点进去看下配置可以看到当前的这个配置的角色是 brokercontroller了就不再需要zookeeper了. cd /opt/kafka/kafka_2.13-3.4.1
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server-sasl.properties2、可以看到了 /tmp/kraft-combined-logs 文件夹也存在了 1.1.3.3、启动kafka 服务
1、为了方便观察启动状态这里就直接前台启动了 记得这里一定要用我们修改过后的脚本来启动 kafka-server-start-sasl.sh这个脚本里面指定认证文件 cd /opt/kafka/kafka_2.13-3.4.1
# 启动
bin/kafka-server-start-sasl.sh config/kraft/server-sasl.properties# 如果希望后台启动则如下 加上 -daemon 即可 对应的日志文件在 /opt/kafka/kafka_2.13-3.4.1/logs 目录下最新的日志文件是 erver.log
bin/kafka-server-start-sasl.sh -daemon config/kraft/server-sasl.properties# 关闭kafka 如果是前台的直接 CTRL C 关闭当前进程就好如果是后台的可以执行命令
bin/kafka-server-stop.sh config/kraft/server-sasl.properties1.1.4、链接测试
1.1.3.1、不使用认证的方式脚本命令行服务端会提示无法链接
1、我们先不使用认证授权的文件链接试一下会发现下面这三个都是无法访问的可以看到对应的服务端输出的日志
2、通用脚本
# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 查看当前服务器中的所有 topic
bin/kafka-topics.sh --list --bootstrap-server localhost:90923、消费者脚本
# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 消费者链接
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning 4、生产者脚本
# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 生产者链接
bin/kafka-console-producer.sh --bootstrap-server 127.0.0.1:9092 --topic test 5、springBoot 项目具体配置这里就不再细说了链接之后只要对kafak执行操作就会如下错误超时 记得部署 kafka 的服务器开放 9092 端口或者关闭防火墙 1.1.3.2、使用认证的方式脚本命令行链接成功
1、通用脚本第一开始因为这里还未创建过topic 所以没有数据后面可以再运行一下。
# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 查看当前服务器中的所有 topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092 --command-config /opt/kafka/kafka_2.13-3.4.1/config/kraft/command_config# 创建topic
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 1 --topic test --command-config /opt/kafka/kafka_2.13-3.4.1/config/kraft/command_config3、消费者脚本执行完成后页面会等待队列消息
# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 消费者链接 --consumer.config 指定消费者配置文件
bin/kafka-console-consumer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning --consumer.config config/consumer-sasl.properties4、生产者脚本
# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 生产者链接 --producer.config 指定消费者配置文件
bin/kafka-console-producer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test --producer.config config/producer-sasl.properties此刻消费者控制台也收到消息了 5、springBoot 项目增加账号密码如下后面的分号一定不能忘记加上如下配置之后就可以了 consumer和producer可以统一配置也可以单独配置(Kafka stream SASL/PLANTEXT配置也一样统一配置对stream同样生效) 记得部署 kafka 的服务器开放 9092 端口或者关闭防火墙 properties:security.protocol: SASL_PLAINTEXTsasl.mechanism: PLAINsasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required usernameclient passwordclient-secret;1.2、Kafka with KRaft 单节点 SSL 模式授权
参考这篇文章写的很好 kafka SSL认证
二、kafka-ui 链接开启认证授权的kafka
连接带认证的kafka集群在kafka-ui的github上面也有但是文章写的不太全面。如果没有配置SASL_PLAINTEXT认证可以参考我之前写的这篇文章 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式
2.1、SASL_PLAINTEXT
1、连接SASL_PLAINTEXT认证的kafka需要添加如下三个环境变量KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG 变量指定的用户名密码需要与实际情况一致。 我这里因为镜像已经前提下载过了所以就没有显示下载镜像的步骤 docker run -d -p 1992:8080 --name kafka-ui \
--restartalways \
-v /data/docker/kafka/kafka-ui/config.yml:/etc/kafkaui/dynamic_config.yaml \
-e KAFKA_CLUSTERS_0_NAMElocal \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS192.168.173.129:9092 \
-e DYNAMIC_CONFIG_ENABLEDtrue \
-e AUTH_TYPELOGIN_FORM \
-e SPRING_SECURITY_USER_NAMEadmin \
-e SPRING_SECURITY_USER_PASSWORDadmin \
-e KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOLSASL_PLAINTEXT \
-e KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISMPLAIN \
-e KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIGorg.apache.kafka.common.security.plain.PlainLoginModule required usernameclient passwordclient-secret; \
provectuslabs/kafka-ui:latest2、如果报错查看 /data/docker/kafka/kafka-ui/config.yml 文件是否存在可以先提前创建参数含义大家也能看出来如果有不明白的大家可以参考我之前写的这篇文章 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式
3、登录 http://192.168.173.129:1992,密码就是我们在启动时配置的 -e SPRING_SECURITY_USER_NAME和 -e SPRING_SECURITY_USER_PASSWORD admin admin 4、登录进去如下如果能获取带信息就说明没有问题了
2.2、SSL认证
1、连接SSL认证的kafka需要额外添加如下四个环境变量其中KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_LOCATION 变量指定的配置文件需要时在配置ssl时候提前生成的。
2、另外注意 KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD 变量中指定的密码也是实际的密码。
docker run -p 1993:8080 \--name kafka-ui-pwd \-e KAFKA_CLUSTERS_0_NAMEkafka8082 \-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERSlocalhost:8082 \-e KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOLSSL \-e KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_LOCATION/cert/client.truststore.jks \-e KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORDadmin \-e KAFKA_CLUSTERS_0_PROPERTIES_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM \-e TZAsia/Shanghai \-e LANGC.UTF-8 \-v /data/users/yulei/ssl_cert:/cert \-d provectuslabs/kafka-ui:latest 结尾
1、kafka配置个账号密码… 确实有些麻烦
参考文章 Authentication using SASL/PLAIN 【保姆式通关宝典】使用Kraft快速搭建Kafka集群含服务鉴权 kafka服务端设置用户和密码登录及springboot访问实现 Kafka配置用户名密码访问