docker部署kafka单机开启sasl_plain

1 docker部署kafka单机版

Kafka官网:https://kafka.apache.org/

1.1 部署环境准备

linux环境、docker环境

部署环境配置版本下载链接
ECSCentOS 7.6一台2vCPUs|4GiB
docker19.03.9脚本

1.2 脚本使用

保存下面脚本内容到文件:install-kafka.sh

vim install-kafka.sh
chmod +x install-kafka.sh
source install-kafka.sh
#一键安装完成后可输入docker ps -a查看

1.3 脚本内容

#!/bin/bash
##################### 准备工作 #####################
#1.镜像拉取速度慢的话加镜像加速器脚本
#2.镜像加速器地址https://console.huaweicloud.com/swr/?region=cn-north-4#/swr/mirror
#3.注意修改IP地址&&根据自己需要修改挂载文件和文件变量
#4.修改broker的配置文件
#5.开启下面表格里的端口
#6.可视化的账户密码和端口视情况修改
#IP
ip=172.16.20.200
​
#宿主机文件(可修改)与容器文件(不可修改)
file=/opt/zookeeper                              #可修改
file1=/opt/bitnami/kafka                         #不可修改
​
#更改brokerid=0.1.2
VAR='broker.id=0' #节点id修改
​
#########################################################################################
​
#创建网络
docker network create app-tier 
​
#拉取镜像
docker pull bitnami/kafka:latest
​
#启动zookeeper
docker run -d --name zookeeper \
--network app-tier \
-p 2181:2181 \
-e ALLOW_ANONYMOUS_LOGIN=yes \
bitnami/kafka:latest \
$file1/bin/zookeeper-server-start.sh $file1/config/zookeeper.properties
​
#启动kafka
docker run -d --name kafka \
--network app-tier \
-p 9092:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 \
-e KAFKA_CFG_BROKER_ID=0 \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092 \
-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://$ip:9092 \
bitnami/kafka:latest \
$file1/bin/kafka-server-start.sh $file1/config/server.properties
​
#复制kafka容器里的文件    
docker cp kafka:$file1 $file
​
#删除容器
docker stop zookeeper
docker rm zookeeper 
docker stop kafka
docker rm kafka 
​
#更换kafka配置文件名并添加sasl认证
mv $file/config/server.properties.original $file/config/server.properties
sed -i -e "s/broker.id=0/$VAR/g" $file/config/server.properties
sed -i -e '35a \listeners=PLAINTEXT://:9092' $file/config/server.properties
sed -i -e '39a \advertised.listeners=PLAINTEXT://'$ip':9092' $file/config/server.properties
sed -i -e 's|zookeeper.connect=.*|zookeeper.connect='$ip':2181|g' $file/config/server.properties
sed -i '$a \listeners=SASL_PLAINTEXT://:9092 \nadvertised.listeners=SASL_PLAINTEXT://'$ip':9092 \nsecurity.inter.broker.protocol=SASL_PLAINTEXT \nsasl.mechanism.inter.broker.protocol=PLAIN \nsasl.enabled.mechanisms=PLAIN \nauthorizer.class.name=kafka.security.authorizer.AclAuthorizer \nsuper.users=User:admin \nallow.everyone.if.no.acl.found=false' $file/config/server.properties
​
#部署zookeeper
sed -i -e '$a \server.1='$ip':2881:3881' $file/config/zookeeper.properties
​
#编辑kafka_server_jaas.conf
touch $file/config/kafka_server_jaas.conf
echo 'KafkaServer {' >> $file/config/kafka_server_jaas.conf
sed -i -e 'aorg.apache.kafka.common.security.plain.PlainLoginModule required \nusername="admin" \npassword="admin" \nuser_admin="admin" \nuser_kafka="kafka"; \n}; \nClient { \norg.apache.zookeeper.server.auth.DigestLoginModule required \nusername="kafka" \npassword="kafka"; \n};' $file/config/kafka_server_jaas.conf
​
#编辑kafka_client_jaas.conf
touch $file/config/kafka_client_jaas.conf
echo 'KafkaClient {' >> $file/config/kafka_client_jaas.conf
sed -i -e 'aorg.apache.kafka.common.security.plain.PlainLoginModule required \nusername="admin" \npassword="admin"; \n}; \nClient { \norg.apache.zookeeper.server.auth.DigestLoginModule required \nusername="admin" \npassword="admin"; \n};' $file/config/kafka_client_jaas.conf
​
#编辑zk_server_jaas.conf
touch $file/config/zk_server_jaas.conf
echo 'Server {' >> $file/config/zk_server_jaas.conf
sed -i -e '$a org.apache.zookeeper.server.auth.DigestLoginModule required \nusername="kafka" \npassword="kafka” \nuser_kafka="kafka"; \n};' $file/config/zk_server_jaas.conf
​
sed -i -e '29a \    export KAFKA_OPTS="-Djava.security.auth.login.config='$file1'/config/zk_server_jaas.conf -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider -Dzookeeper.requireClientAuthScheme=sasl"' $file/bin/zookeeper-server-start.sh
​
#编辑内部客户端工具
sed -i -e '$a security.protocol=SASL_PLAINTEXT \nsasl.mechanism=PLAIN' $file/config/consumer.properties
sed -i -e '$a security.protocol=SASL_PLAINTEXT \nsasl.mechanism=PLAIN' $file/config/producer.properties
​
#修改Broker启动脚本
sed -i -e '30a \    export KAFKA_OPTS=" -Djava.security.auth.login.config='$file1'/config/kafka_server_jaas.conf"' $file/bin/kafka-server-start.sh
sed -i -e '18a \    export KAFKA_OPTS=" -Djava.security.auth.login.config='$file1'/config/kafka_client_jaas.conf"' $file/bin/kafka-console-producer.sh
sed -i -e '18a \    export KAFKA_OPTS=" -Djava.security.auth.login.config='$file1'/config/kafka_client_jaas.conf"' $file/bin/kafka-console-consumer.sh
​
#Topic_JAAS 文件加载 SASL 凭证
touch $file/config/config.properties
echo 'sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";' >> $file/config/config.properties
sed -i -e '$a security.protocol=SASL_PLAINTEXT \nsasl.mechanism=PLAIN' $file/config/config.properties
​
#JMX监控
sed -i -e '214,220c JMX_PORT=9997 \nJMX_RMI_PORT=9996 \nISKAFKASERVER="false" \nif [[ "$*" =~ "kafka.Kafka" ]]; then \n        ISKAFKASERVER="true" \nfi \nif [  $JMX_PORT ] && [ "true" == "$ISKAFKASERVER" ]; then \n        KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT " \n        echo set KAFKA_JMX_PORT:$KAFKA_JMX_OPTS \nfi' $file/bin/kafka-run-class.sh
​
docker run -d --name zookeeper \
--network app-tier \
-p 2181:2181 \
-v $file:$file1 \
-e ALLOW_ANONYMOUS_LOGIN=yes \
-e KAFKA_OPTS="-Djava.security.auth.login.config=$file1/config/zk_server_jaas.conf" \
bitnami/kafka:latest \
$file1/bin/zookeeper-server-start.sh $file1/config/zookeeper.properties
​
docker run -d --name kafka \
--network app-tier \
-p 9092:9092 \
-p 9997:9997 \
-v $file:$file1 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e JMX_PORT=9997 \
-e KAFKA_OPTS="-Djava.security.auth.login.config=$file1/config/kafka_server_jaas.conf" \
-e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=$ip -Dcom.sun.management.jmxremote.port=9997" \
bitnami/kafka:latest \
$file1/bin/kafka-server-start.sh $file1/config/server.properties
​
#(注意更换主路径)
#启动生产者
#/opt/bitnami/kafka/bin/kafka-console-producer.sh --broker-list 172.16.20.142:9092 --topic test --producer.config /opt/bitnami/kafka/config/producer.properties
#创建消费者
#/opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server 172.16.20.142:9092 --topic test --from-beginning --consumer.config /opt/bitnami/kafka/config/consumer.properties
#创建topic
#/opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server 172.16.20.142:9092 --partitions 2  --replication-factor 1 --topic test --command-config /opt/bitnami/kafka/config/config.properties
#查看topic
#/opt/bitnami/kafka/bin/kafka-topics.sh --list --bootstrap-server 172.16.20.142:9092 --command-config /opt/bitnami/kafka/config/config.properties

1.4 参数说明

zookeeper容器启动参数
参数说明
-d以守护进程的方式启动
--name zookeeper把容器的名字设置为kafka
--network app-tier创建网络
-p 2181:2181把容器内的端口2181挂载到宿主机2181上面,宿主机端口:容器内部端口
-v /opt/zookeeper:/opt/bitnami/kafka挂载启动文件
-e KAFKA_OPTS="-Djava.security.auth.login.config=/opt/bitnami/kafka/config/zk_server_jaas.conf"sasl开启
bitnami/kafka:latest使用的镜像名称+版本
/opt/bitnami/kafka/bin/zookeeper-server-start.sh /opt/bitnami/kafka/config/zookeeper.properties启动zookeeper服务
kafka容器启动参数
参数说明
-d以守护进程的方式启动
--name kafka把容器的名字设置为kafka
--network app-tier创建网络
-p 9092:9092把容器内的端口9092 挂载到宿主机9092 上面,宿主机端口:容器内部端口
-v /opt/zookeeper:/opt/bitnami/kafka挂载启动配置文件
-e KAFKA_OPTS="-Djava.security.auth.login.config=/opt/bitnami/kafka/config/kafka_server_jaas.conf"sasl文件启动
-e JMX_PORT=9997 \监控端口
-e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=$ip -Dcom.sun.management.jmxremote.port=9997" \监控启动配置
bitnami/kafka:latest使用的镜像名称+版本
/opt/bitnami/kafka/bin/kafka-server-start.sh /opt/bitnami/kafka/config/server.properties启动kafka配置文件

1.5 部署完成和生产消费测试

docker logs 【容器名字】查看kafka的日志信息

查找Cluster ID

Topic创建

生产测试

消费测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker部署Kafka集群是一种利用容器化技术快速搭建并运行Kafka服务的方式。通过Docker,我们可以将Kafka以及所有依赖环境打包成一个容器镜像,使得Kafka集群的部署、复制、迁移变得非常便捷。 ### 步骤一:安装 Docker 首先需要在你的机器上安装 Docker,并确保它已成功安装并可以正常工作。访问 Docker 官方网站 (https://www.docker.com/) 下载适合你操作系统的 Docker 版本,并按照文档指导进行安装。 ### 步骤二:准备 Kafka 镜像 你可以从 Docker Hub 获取 Kafka 的官方镜像。命令如下: ```bash docker pull confluentinc/cp-kafka:latest ``` ### 步骤三:配置 Kafka 集群 创建一个 `config.properties` 文件,其中包含集群设置,如 zookeeper 和 broker 设置等。例如: ```properties # kafka configuration file example zookeeper.connect=192.168.0.1:2181,zookeeper.connect=192.168.0.2:2181 broker.id=0 listeners=SASL_PLAINTEXT://:9092 advertised.listeners=SASL_PLAINTEXT://host.example.com:9092 security.protocol=SASL_SSL sasl.mechanism=GSSAPI sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required username="<your-service-account>" password="$<your-password>"; bootstrap.servers=localhost:9092 ``` ### 步骤四:启动 Kafka Broker 使用 Docker 运行 Kafka Broker 镜像。为了便于管理多个实例,我们可以创建一个包含所有节点信息的文件 `docker-compose.yml`,内容如下: ```yaml version: '3' services: kafka_broker_1: image: confluentinc/cp-kafka:latest container_name: kafka_broker_1 environment: - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_ADVERTISED_LISTENERS=SASL_PLAINTEXT://host.example.com:9092 - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 - KAFKA_SECURITY_PROTOCOL=SASL_SSL - KAFKA_SASL_MECHANISM=GSSAPI - KAFKA_SASL_JAAS_CONFIG=com.sun.security.auth.module.Krb5LoginModule required username="<your-service-account>" password="$<your-password>"; ports: - "9092:9092" depends_on: - zookeeper zookeeper: image: confluentinc/cp-zookeeper:latest container_name: zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ports: - "2181:2181" ``` ### 步骤五:运行 Docker Compose 最后,在终端中运行以下命令以启动 Kafka 集群: ```bash cd path/to/docker-compose-file docker-compose up -d ``` 这将启动两个容器:一个 Kafka 协议提供者(Broker),一个 ZooKeeper 节点。然后,可以通过浏览器访问 Kafka 控制台或使用客户端工具(如 JMX 或 Kafka Connect)进行进一步的操作和监控。 ### 相关问题: 1. 在 Docker部署 Kafka 集群的优点是什么? 2. 如何配置安全认证在 Kafka 中? 3. 当遇到无法连接到 Kafka 集群时,应该检查哪些方面?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值