使用docker-compose安装,这个是单机版的。
一:建立
直接亮compose文件.
version: '3.6'
services:
kafka:
image: 'bitnami/kafka:4.0.0' # KRaft模式支持版本
container_name: kafka
ports:
- "9092:9092" # 客户端访问端口
- "9093:9093" # 控制器通信端口
environment:
TZ: Asia/Shanghai
# KRaft核心配置
KAFKA_CFG_PROCESS_ROLES: broker,controller
KAFKA_CFG_NODE_ID: 1
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@127.0.0.1:9093 # 改为服务器IP
# 监听配置(允许外部访问的核心修改)
# 1. 监听所有网络接口(0.0.0.0),而不仅是本地(127.0.0.1)
KAFKA_CFG_LISTENERS: SASL_PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# 2. 告知外部客户端连接的地址(服务器公网IP)
KAFKA_CFG_ADVERTISED_LISTENERS: SASL_PLAINTEXT://(你的公网ip):9092
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
# SASL认证配置
KAFKA_CFG_SASL_ENABLED_MECHANISMS: PLAIN
KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
KAFKA_CFG_SECURITY_INTER_BROKER_PROTOCOL: SASL_PLAINTEXT
KAFKA_CFG_CREDENTIALS_PROVIDER: FILE
KAFKA_CLIENT_USERS: admin
KAFKA_CLIENT_PASSWORDS: admin123
KAFKA_INTER_BROKER_USER: admin
KAFKA_INTER_BROKER_PASSWORD: admin123
# 集群ID(首次启动会自动生成,可固定)
# KAFKA_KRAFT_CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk"
volumes:
- ./data/kafka:/bitnami/kafka/data # 数据持久化
network_mode: "host"
restart: unless-stopped
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
ports:
- "19092:19092" # 将容器内服务端口也改为19092,避免冲突
environment:
TZ: Asia/Shanghai
# 配置Kafka集群连接
KAFKA_CLUSTERS_0_NAME: kraft-cluster # 集群显示名称
KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS: 127.0.0.1:9092 # 连接地址
# 配置SASL认证(与Kafka配置对应)
KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL: SASL_PLAINTEXT
KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM: PLAIN
KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin123";
# 启用Kafka UI认证(可选)
AUTH_TYPE: LOGIN_FORM
SPRING_SECURITY_USER_NAME: admin
SPRING_SECURITY_USER_PASSWORD: admin123
# 修改容器内Kafka UI监听端口为19092
SERVER_PORT: 19092
depends_on:
- kafka
network_mode: "host"
restart: unless-stopped
启动命令:
docker-compose up -d
查看命令:
docker ps -a
停止命令:
docker-compose down
二:开放端口
去服务器后台放开端口,外部可以访问:
9092 和 19092
三:测试
要开两个终端
1.客户端(终端一)
#进入:
docker exec -it kafka /bin/bash
#创建主题:
/opt/bitnami/kafka/bin/kafka-topics.sh \
--create \
--topic test_topic \
--bootstrap-server 127.0.0.1:9092 \
--partitions 1 \
--replication-factor 1 \
--command-config <(echo "security.protocol=SASL_PLAINTEXT\nsasl.mechanism=PLAIN\nsasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin123\";")
#启动生产者:
/opt/bitnami/kafka/bin/kafka-console-producer.sh \
--topic test_topic \
--bootstrap-server 127.0.0.1:9092 \
--producer-property security.protocol=SASL_PLAINTEXT \
--producer-property sasl.mechanism=PLAIN \
--producer-property sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin123\";"
2.服务端(终端二)
进入:
docker exec -it kafka /bin/bash
启动消费者:
/opt/bitnami/kafka/bin/kafka-console-consumer.sh \
--topic test_topic \
--from-beginning \
--bootstrap-server 127.0.0.1:9092 \
--consumer-property security.protocol=SASL_PLAINTEXT \
--consumer-property sasl.mechanism=PLAIN \
--consumer-property sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin123\";"
四:页面