赞
踩
安装目录:/root/container/docker
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /root/container/docker
chmod +x/usr/local/bin/docker-compose
编辑配置文件docker-compose.yml
version: '3' services: zookeeper: image: wurstmeister/zookeeper volumes: - ./data:/data ports: - "2183:2181" kafka: image: wurstmeister/kafka depends_on: [ zookeeper ] // 依赖启动项,当zookeeper启动完成后,才启动kafka ports: - "9025:9092" // 025为宿主机对外端口,9092为docker内服务端口 environment: KAFKA_ADVERTISED_HOST_NAME: 172.16.3.1 KAFKA_CREATE_TOPICS: "appLogs:1:1" // kafka启动时自动创建topic,名为 appLogs KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" volumes: - ./kafka-logs:/kafka - /var/run/docker.sock:/var/run/docker.sock kafka-manager: image: sheepkiller/kafka-manager ports: - "9000:9000" environment: ZK_HOSTS: "zookeeper:2181" depends_on: - kafka // 依赖启动项,当kafka启动完成后,才启动kafka-manager
docker-compose up -d // 启动镜像 -d 表示后台静默启动
docker-compose down // 关闭镜像
docker-compose ps // 查看当前compose进程列表
lsof -i:9000 // 查看占用9000端口的进程
docker logs -f zookeeper // 查看启动日志,zookeeper是容器名
// docker_kafka_1是容器名,可以通过ps命令看到
docker exec -it docker_kafka_1 /bin/bash
查看topic列表
kafka-topics.sh --zookeeper 172.16.3.1:2183 --list
创建topic(tLog)
kafka-topics.sh --zookeeper 172.16.3.1:2183 --create --replication-factor 1 --partitions 1 --topic tLog
删除topic(tLog)
kafka-topics.sh --delete --zookeeper 172.16.3.1: 9025 --topic tLog
模拟生产者
kafka-console-producer.sh --broker-list 172.16.3.1:9025 --topic tLog
模拟消费者(新开终端)
kafka-console-consumer.sh --bootstrap-server 172.16.3.1:9025 --topic tLog --from-beginning
cd opt/kafka
查看kafka版本(需先进入kafka容器)
find / -name \*kafka_\* | head -1 | grep -o '\kafka[^\n]*'
前面为scala版本,后面为kafka版本。(2.7.0)
Docker Compose安装kafka和springboot整合kafka
spring.io - Spring for Apache Kafka
[root@localhost ~]# docker pull zookeeper:3.7.0
[root@localhost ~]# docker pull wurstmeister/kafka
开始用的zk镜像是wurstmeister/zookeeper:v3.4.13,单主机部署集群没问题,换到多主机的时候,集群组不上,好像是集群间的通信有问题。
[root@localhost ~]# vi /data/zookeeper/conf/zoo.cfg
# 数据目录
dataDir=/data
# 日志目录
dataLogDir=/datalog
tickTime=2000
initLimit=10
syncLimit=5
# 监听端口
clientPort=2181
# 集群列表
server.1=0.0.0.0:2888:3888;2181
server.2=10.1.2.102:2888:3888;2181
server.3=10.1.2.103:2888:3888;2181
数据目录 dataDir 和日志目录 dataLogDir 对后面的配置会有影响。
集群列表中,当前服务器的ip用0.0.0.0替换,避免zk找不到自己。
新建一个文件,用来指定当前服务器在集群中的id。myid文件中只写一个id值就行(2.1中集群列表的id)。
[root@localhost ~]# vi /data/zookeeper/data/myid
1
~
[root@localhost ~]# vi zookeeper-compose.yml version: '3.2' services: zoo: image: zookeeper:3.7.0 restart: always hostname: zoo1 container_name: zoo1 # 容器的网络模式 network_mode: "host" # 端口映射 ports: - 2181:2181 - 2888:2888 - 3888:3888 # 变量配置 volumes: - "/data/zookeeper/data:/data" # 数据目录 - "/data/zookeeper/log:/datalog" # 日志目录 - "/data/zookeeper/conf/zoo.cfg:/conf/zoo.cfg" # 配置文件
每台主机的配置大致都一样,network_mode 一定要配成 host 。
要注意的是,数据目录、日志目录和配置文件要根据 2.1 zoo.cfg 的配置调整一下。另外,我把myid放在数据目录 /data/zookeeper/data 里面了,如果myid文件不在数据目录中,需要额外再配一条变量。如:
- "/etc/myid:/data/myid" # myid文件位置
[root@localhost ~]# docker-compose -f zookeeper-compose.yml -d
依次把各个节点都启动起来。
看一下日志有没有问题:
[root@localhost ~]# docker logs zoo1
看一下节点的运行状态:
[root@localhost ~]# docker exec -it zookeeper /bin/bash
root@zookeeper:/opt/zookeeper# cd bin/
root@zookeeper:/opt/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader
zk集群没问题后,部署kafka集群。
[root@localhost ~]# vi kafka-compose.yml version: '3.2' services: kafka: image: wurstmeister/kafka:latest restart: always hostname: kafka1 container_name: kafka1 # 网络模式 network_mode: "host" ports: - "9092:9092" environment: KAFKA_BROKER_ID: 1 # 节点id KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.1.255.202:9092 KAFKA_ADVERTISED_HOST_NAME: 10.1.255.202 KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: 10.1.255.202:2181,10.1.255.203:2181,10.1.255.204:2181 volumes: - /data/kafka/logs:/kafka # 日志目录 - /data/kafka/data:/data/kafka-data # 数据目录
同样的网络模式 network_mode 一定要配成 host 。
不同的节点,要调整 KAFKA_BROKER_ID 和相关的IP地址。
[root@localhost ~]# docker-compose -f kafka-compose.yml -d
依次把各个节点都启动起来。
启动配置文件:
[root@localhost ~]# vi kafka-manager-compose.yml
version: '3.2'
services:
kafka-manager: # Kafka
image: sheepkiller/kafka-manager:latest
restart: unless-stopped
container_name: kafka-manager
hostname: kafka-manager
ports:
- "9090:9000"
environment:
ZK_HOSTS: 10.1.249.143:2181,10.1.249.144:2181,10.1.249.145:2181
KAFKA_BROKERS: 10.1.249.143:9092,10.1.249.144:9092,10.1.249.145:9092
替换一下zk和kafka集群的地址即可。启动容器:
[root@localhost ~]# docker-compose -f kafka-manager-compose.yml -d
启动之后,通过 http://localhost:9000 访问 kafka-manager。
添加zk集群,看一下kafka的broker数量是否正确。
docker-compose多主机部署zookeeper集群、kafka集群
docker-compose部署zk+kafka+storm集群的实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。