Docker安装Kafka——基于docker-compose工具
1. 编写docker-compose文件
zookeeper的docker-compose.yml
version: '3.7'
services:
zookeeper:
image: zookeeper:3.4.14
container_name: zookeeper_3.4.14
ports:
- "2181:2181"
volumes:
- /data/zookeeper/logs:/datalog
- /data/zookeeper/data:/data
kafka的docker-compose.yml
version: '3.7'
services:
kafka:
image: wurstmeister/kafka:0.10.2.0
container_name: kafka_0.10.2.0
ports:
- "9092:9092"
restart: "no"
network_mode: "host"
volumes:
- /etc/localtime:/etc/localtime
- /data/kafka/logs:/kafka/logs
environment:
- KAFKA_ADVERTISED_HOST_NAME=127.0.0.1
- KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181
- KAFKA_BROKER_ID=0
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_HEAP_OPTS=-Xms128m -Xmx256m
- KAFKA_LOG_DIRS=/kafka/logs
2. 启动容器
docker-compose up -d
附1 kafka环境变量说明
# client 要访问的 broker 地址
KAFKA_ADVERTISED_HOST_NAME: 118.25.215.105
# 通过端口连接 zookeeper
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
# 每个容器就是一个 broker,设置其对应的 ID
KAFKA_BROKER_ID: 0
# 外部网络只能获取到容器名称,在内外网络隔离情况下
# 通过名称是无法成功访问 kafka 的
# 因此需要通过绑定这个监听器能够让外部获取到的是 IP
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://118.25.215.105:9092
# kafka 监听器,告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
# Kafka默认使用-Xmx1G -Xms1G的JVM内存配置,由于服务器小,调整下启动配置
# 这个看自己的现状做调整,如果资源充足,可以不用配置这个
KAFKA_HEAP_OPTS: "-Xmx256M -Xms128M"
# 设置 kafka 日志位置
KAFKA_LOG_DIRS: "/kafka/logs"
# kafka 自动创建 topic,对于生成者与消费者连接的 TOPIC 不存在自动创建
KAFKA_AUTO_CREATE_TOPICS_ENABLE: true
# kafka 开启删除 topic,开了自动创建,删除的也要开,否则删除后还会自动创建
KAFKA_DELETE_TOPIC_ENABLE: true