在当前微服务横行, 研发提速的大环境下, 除了单测对单个方法的逻辑做验证外, 在本机环境能正常运行, 减少三方环境的依赖也是提效的一个重要环节.
而对kafka的依赖更是常见, 本文就总结下本机docker环境下的kafka服务运行.
本文会介绍两种方式:
(一) 基于docker的kafka镜像服务
(二) 基于docker-compose的kafka镜像服务
一. 基于docker的kafka镜像服务
1. 启动zookeeper镜像, 并将镜像命名为zookeeper
代码语言:javascript复制docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
查看zookeeper启动状态
代码语言:javascript复制docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
569ba23c3038 zookeeper "/docker-entrypoint.…" 12 seconds ago Up 9 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zookeeper
2. 查看zookeeper 容器IP元数据:IPAddress, 为后面启动kafka时做准备.
代码语言:javascript复制docker inspect zookeeper
"NetworkSettings": {
...
"IPAddress": "172.17.0.2",
...
}
3. 启动kafka容器
需要配置一下两个环境变量
配置zookeeperIP地址, 值为zookeeper元数据IPAddress对应值
代码语言:javascript复制KAFKA_ZOOKEEPER_CONNECT
配置主机IP地址
代码语言:javascript复制KAFKA_ADVERTISED_HOST_NAME
启动kafka容器
代码语言:javascript复制docker run -d --name kafka -p 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=172.17.0.2:2181 --env KAFKA_ADVERTISED_HOST_NAME=192.168.3.201 --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka:latest
4. 测试
进入kafka容器, 需根据情况修改容器ID
代码语言:javascript复制docker exec -it 157 bash
进入Kafka bin所在目录
代码语言:javascript复制cd /opt/kafka/bin
查看topic列表
代码语言:javascript复制kafka-topics.sh --list --zookeeper 172.17.0.2:2181
创建topic
代码语言:javascript复制kafka-topics.sh --create --zookeeper 172.17.0.2:2181 --replication-factor 1 --partitions 1 --topic test1
生产消息
代码语言:javascript复制kafka-console-producer.sh --broker-list localhost:9092 --topic test1
消费消息
代码语言:javascript复制kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning
二.基于docker-compose的kafka镜像服务
docker-compose方式相对docker原生启动, 配置和启动都更加简单.
1. zookeeper和kafka服务docker-compose.yml
代码语言:javascript复制version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.1.7
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
修改配置文件中以下配置项为本机IP
代码语言:javascript复制KAFKA_ADVERTISED_HOST_NAME
2.进入文件所在目录, 执行命令启动服务集群
代码语言:javascript复制docker-compose up -d
查看集群状态
代码语言:javascript复制docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------
kafka-docker_kafka_1 start-kafka.sh Up 0.0.0.0:9092->9092/tcp
kafka-docker_zookeeper_1 /bin/sh -c /usr/sbin/sshd ... Up 0.0.0.0:2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
添加更多kafak brokers节点
代码语言:javascript复制docker-compose scale kafka=3
服务集群销毁
代码语言:javascript复制docker-compose stop
3. 测试
进入kafka容器, 需根据情况修改容器ID
代码语言:javascript复制docker exec -it 157 bash
进入Kafka bin所在目录
代码语言:javascript复制cd /opt/kafka/bin
topic查看
代码语言:javascript复制kafka-topics.sh --list --zookeeper zookeeper:2181
创建topic
代码语言:javascript复制kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test3
生产消息
代码语言:javascript复制kafka-console-producer.sh --broker-list localhost:9092 --topic test3
消费消息
代码语言:javascript复制kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic test3 --from-beginning