Kafka分布式消息隊(duì)列集群,kafka的三個(gè)節(jié)點(diǎn)分別坐落在三臺(tái)主機(jī)上。
主機(jī)
192.168.59.20
192.168.59.21
192.168.59.22
部署kafka集群 kraft模式
目前使用raft模式部署,不需要再依賴zookeeper;采用sasl認(rèn)證,傳輸不加密。(如果非敏感數(shù)據(jù)可以這樣用,如果敏感數(shù)據(jù)還是建議 sasl_ssl 傳輸也加密)
mkdir -p /data/kafka_raft
chmod g+w /data/kafka_raft
命令說明
docker run --detach \
--net=host \
--name kafka1 \
--restart always \
--volume /data/kafka_raft:/bitnami/kafka \
--env TZ=Asia/Shanghai \
--env KAFKA_CFG_PROCESS_ROLES=broker,controller \ #聲明角色 有了這個(gè)代表使用raft模式
--env BITNAMI_DEBUG=true \ #控制臺(tái)打印日志
--env ALLOW_PLAINTEXT_LISTENER=no \ #生產(chǎn)環(huán)境不允許
--env KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \ #控制器名稱 對(duì)應(yīng)下面CONTROLLER://:9093
--env KAFKA_CFG_NUM_PARTITIONS=1 \ #默認(rèn)分區(qū)數(shù)
--env KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093,EXTERNAL://:9092 \ #監(jiān)聽器的地址和端口
--env KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://192.168.59.20:9094,CLIENT://:9095,EXTERNAL://192.168.59.20:9092 \ #發(fā)布監(jiān)聽器的地址和端口
--env KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT \ #監(jiān)聽器的協(xié)議 這里sasl_plain表示 僅認(rèn)證加密 傳輸不加密
--env KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL \ #內(nèi)部broker名稱
--env KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN \ #協(xié)議
--env KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN \ #協(xié)議
--env KAFKA_CLIENT_USERS=vpn \ #加密客戶端賬號(hào)
--env KAFKA_CLIENT_PASSWORDS=BCfoV77N \ #加密客戶端密碼
--env KAFKA_INTER_BROKER_USER=vpn \ #內(nèi)部broker之間通信賬號(hào)
--env KAFKA_INTER_BROKER_PASSWORD=BCfoV77N \ #內(nèi)部broker之間通信密碼
--env KAFKA_CFG_NODE_ID=1 \ #節(jié)點(diǎn)ID 唯一不一樣
--env KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@192.168.59.20:9093,2@192.168.59.21:9093,3@192.168.59.22:9093 \ #投票選舉列表
--env KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \ #集群id 大家都一樣
--env KAFKA_HEAP_OPTS='-Xms512M -Xmx4G' \ #運(yùn)行內(nèi)存參數(shù)
bitnami/kafka:3.5.1
命令
docker run --detach \
--net=host \
--name kafka1 \
--restart always \
--volume /data/kafka_raft:/bitnami/kafka \
--env TZ=Asia/Shanghai \
--env KAFKA_CFG_PROCESS_ROLES=broker,controller \
--env BITNAMI_DEBUG=true \
--env ALLOW_PLAINTEXT_LISTENER=no \
--env KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
--env KAFKA_CFG_NUM_PARTITIONS=1 \
--env KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093,EXTERNAL://:9092 \
--env KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://192.168.59.20:9094,CLIENT://:9095,EXTERNAL://192.168.59.20:9092 \
--env KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT \
--env KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL \
--env KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN \
--env KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN \
--env KAFKA_CLIENT_USERS=vpn \
--env KAFKA_CLIENT_PASSWORDS=BCfoV77N \
--env KAFKA_INTER_BROKER_USER=vpn \
--env KAFKA_INTER_BROKER_PASSWORD=BCfoV77N \
--env KAFKA_CFG_NODE_ID=1 \
--env KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@192.168.59.20:9093,2@192.168.59.21:9093,3@192.168.59.22:9093 \
--env KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
--env KAFKA_HEAP_OPTS='-Xms512M -Xmx4G' \
bitnami/kafka:3.5.1
docker run --detach \
--net=host \
--name kafka2 \
--restart always \
--volume /data/kafka_raft:/bitnami/kafka \
--env TZ=Asia/Shanghai \
--env KAFKA_CFG_PROCESS_ROLES=broker,controller \
--env BITNAMI_DEBUG=true \
--env ALLOW_PLAINTEXT_LISTENER=no \
--env KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
--env KAFKA_CFG_NUM_PARTITIONS=1 \
--env KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093,EXTERNAL://:9092 \
--env KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://192.168.59.21:9094,CLIENT://:9095,EXTERNAL://192.168.59.21:9092 \
--env KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT \
--env KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL \
--env KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN \
--env KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN \
--env KAFKA_CLIENT_USERS=vpn \
--env KAFKA_CLIENT_PASSWORDS=BCfoV77N \
--env KAFKA_INTER_BROKER_USER=vpn \
--env KAFKA_INTER_BROKER_PASSWORD=BCfoV77N \
--env KAFKA_CFG_NODE_ID=2 \
--env KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@192.168.59.20:9093,2@192.168.59.21:9093,3@192.168.59.22:9093 \
--env KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
--env KAFKA_HEAP_OPTS='-Xms512M -Xmx4G' \
bitnami/kafka:3.5.1
docker run --detach \
--net=host \
--name kafka3 \
--restart always \
--volume /data/kafka_raft:/bitnami/kafka \
--env TZ=Asia/Shanghai \
--env KAFKA_CFG_PROCESS_ROLES=broker,controller \
--env BITNAMI_DEBUG=true \
--env ALLOW_PLAINTEXT_LISTENER=no \
--env KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
--env KAFKA_CFG_NUM_PARTITIONS=1 \
--env KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093,EXTERNAL://:9092 \
--env KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://192.168.59.22:9094,CLIENT://:9095,EXTERNAL://192.168.59.22:9092 \
--env KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT \
--env KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL \
--env KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN \
--env KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN \
--env KAFKA_CLIENT_USERS=vpn \
--env KAFKA_CLIENT_PASSWORDS=BCfoV77N \
--env KAFKA_INTER_BROKER_USER=vpn \
--env KAFKA_INTER_BROKER_PASSWORD=BCfoV77N \
--env KAFKA_CFG_NODE_ID=3 \
--env KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@192.168.59.20:9093,2@192.168.59.21:9093,3@192.168.59.22:9093 \
--env KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
--env KAFKA_HEAP_OPTS='-Xms512M -Xmx4G' \
bitnami/kafka:3.5.1
測試kafka消息隊(duì)列
創(chuàng)建一個(gè)新的topic
docker exec kafka1 /opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.59.20:9092 --topic test1 --create --partitions 1 --replication-factor 1 --command-config /opt/bitnami/kafka/config/producer.properties
列出所有的topic
docker exec kafka2 /opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server 192.168.59.21:9092 --list --command-config /opt/bitnami/kafka/config/producer.properties
打開一個(gè)消費(fèi)者會(huì)話
docker exec -it kafka1 /opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.59.20:9092 --topic test1 --from-beginning --consumer.config /opt/bitnami/kafka/config/consumer.properties
打開一個(gè)生產(chǎn)者會(huì)話
docker exec -it kafka3 /opt/bitnami/kafka/bin/kafka-console-producer.sh --broker-list 192.168.59.22:9092 --topic test1 --producer.config /opt/bitnami/kafka/config/producer.properties
在生產(chǎn)者會(huì)話窗口輸入信息,隨后在消費(fèi)者會(huì)話窗口查看成功收到信息,kafka集群部署成功。
部署kafka-ui
集群監(jiān)控系統(tǒng),可視化圖標(biāo)展示。
docker run --detach \
-p 8081:8080 \
--name kafka-ui \
--restart always \
--env KAFKA_CLUSTERS_0_NAME=local \
--env DYNAMIC_CONFIG_ENABLED=true \
--env AUTH_TYPE=LOGIN_FORM \
--env SPRING_SECURITY_USER_NAME=admin \
--env SPRING_SECURITY_USER_PASSWORD=admin \
provectuslabs/kafka-ui:master
瀏覽器訪問:http://ip:8081 ,默認(rèn)帳號(hào)密碼:admin admin
進(jìn)入之后添加kafka配置信息,sasl_plaintext plain 賬號(hào) 密碼
[圖片上傳失敗...(image-6af8c6-1709013738736)]
添加圖片注釋,不超過 140 字(可選)
[圖片上傳失敗...(image-9cf22d-1709013738736)]
添加圖片注釋,不超過 140 字(可選)