kafka 单机部署
使用docker-compose安装,这个是单机版的。
一:建立
直接亮compose文件.
version: '3.6'
services:kafka:image: 'bitnami/kafka:4.0.0' # KRaft模式支持版本container_name: kafkaports:- "9092:9092" # 客户端访问端口- "9093:9093" # 控制器通信端口environment:TZ: Asia/Shanghai# KRaft核心配置KAFKA_CFG_PROCESS_ROLES: broker,controllerKAFKA_CFG_NODE_ID: 1KAFKA_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):9092KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXTKAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER# SASL认证配置KAFKA_CFG_SASL_ENABLED_MECHANISMS: PLAINKAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAINKAFKA_CFG_SECURITY_INTER_BROKER_PROTOCOL: SASL_PLAINTEXTKAFKA_CFG_CREDENTIALS_PROVIDER: FILEKAFKA_CLIENT_USERS: adminKAFKA_CLIENT_PASSWORDS: admin123KAFKA_INTER_BROKER_USER: adminKAFKA_INTER_BROKER_PASSWORD: admin123# 集群ID(首次启动会自动生成,可固定)# KAFKA_KRAFT_CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk"volumes:- ./data/kafka:/bitnami/kafka/data # 数据持久化network_mode: "host"restart: unless-stoppedkafka-ui:image: provectuslabs/kafka-ui:latestcontainer_name: kafka-uiports:- "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_PLAINTEXTKAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM: PLAINKAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin123";# 启用Kafka UI认证(可选)AUTH_TYPE: LOGIN_FORMSPRING_SECURITY_USER_NAME: adminSPRING_SECURITY_USER_PASSWORD: admin123# 修改容器内Kafka UI监听端口为19092SERVER_PORT: 19092 depends_on:- kafkanetwork_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\";"
四:页面