赞
踩
pip install docker-compose
/data/docker-compose/
中新建docker-compose.yml
文件。110.41.70.109
改为自己的虚拟机ip。ip:8989
进行访问。 (ip是自己虚拟机的ip,我这里的就是110.41.70.109:8989
) 下面同理。ip:9000
访问。version: "3" services: #kafka可视化工具 kafka-ui: container_name: kafka-ui image: provectuslabs/kafka-ui:latest ports: - 8989:8080 depends_on: - kafka1 - kafka2 - kafka3 environment: - KAFKA_CLUSTERS_0_NAME=kafkaCluster - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=110.41.70.109:9192,110.41.70.109:9292,110.41.70.109:9392 - DYNAMIC_CONFIG_ENABLED=true networks: - mynetwork # kafka集群 kafka1: image: 'bitnami/kafka:3.3.1' container_name: kafka1 user: root ports: - 9192:9092 - 9193:9093 environment: ### 通用配置 # 允许使用kraft,即Kafka替代Zookeeper - KAFKA_ENABLE_KRAFT=yes # kafka角色,做broker,也要做controller - KAFKA_CFG_PROCESS_ROLES=broker,controller # 指定供外部使用的控制类请求信息 - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER # 定义kafka服务端socket监听端口 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 # 定义安全协议 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT # 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可 - KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA # 集群地址 - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093 # 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用 - ALLOW_PLAINTEXT_LISTENER=yes # 设置broker最大内存,和初始内存 - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M # 允许自动创建主题 - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true # 消息保留时长(毫秒),保留7天 - KAFKA_LOG_RETENTION_MS=604800000 ### broker配置 # 定义外网访问地址(宿主机ip地址和端口) - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://110.41.70.109:9192 # broker.id,必须唯一 - KAFKA_BROKER_ID=1 volumes: - /data/bitnami/kafka1:/bitnami/kafka networks: - mynetwork kafka2: image: 'bitnami/kafka:3.3.1' container_name: kafka2 user: root ports: - 9292:9092 - 9293:9093 environment: ### 通用配置 # 允许使用kraft,即Kafka替代Zookeeper - KAFKA_ENABLE_KRAFT=yes # kafka角色,做broker,也要做controller - KAFKA_CFG_PROCESS_ROLES=broker,controller # 指定供外部使用的控制类请求信息 - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER # 定义kafka服务端socket监听端口 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 # 定义安全协议 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT # 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可 - KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA # 集群地址 - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093 # 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用 - ALLOW_PLAINTEXT_LISTENER=yes # 设置broker最大内存,和初始内存 - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M # 允许自动创建主题 - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true # 消息保留时长(毫秒),保留7天 - KAFKA_LOG_RETENTION_MS=604800000 ### broker配置 # 定义外网访问地址(宿主机ip地址和端口) - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://110.41.70.109:9292 # broker.id,必须唯一 - KAFKA_BROKER_ID=2 volumes: - /data/bitnami/kafka2:/bitnami/kafka networks: - mynetwork kafka3: image: 'bitnami/kafka:3.3.1' container_name: kafka3 user: root ports: - 9392:9092 - 9393:9093 environment: ### 通用配置 # 允许使用kraft,即Kafka替代Zookeeper - KAFKA_ENABLE_KRAFT=yes # kafka角色,做broker,也要做controller - KAFKA_CFG_PROCESS_ROLES=broker,controller # 指定供外部使用的控制类请求信息 - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER # 定义kafka服务端socket监听端口 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 # 定义安全协议 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT # 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可 - KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA # 集群地址 - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093,2@kafka2:9093,3@kafka3:9093 # 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用 - ALLOW_PLAINTEXT_LISTENER=yes # 设置broker最大内存,和初始内存 - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M # 允许自动创建主题 - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true # 消息保留时长(毫秒),保留7天 - KAFKA_LOG_RETENTION_MS=604800000 ### broker配置 # 定义外网访问地址(宿主机ip地址和端口) - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://110.41.70.109:9392 # broker.id,必须唯一 - KAFKA_BROKER_ID=3 volumes: - /data/bitnami/kafka3:/bitnami/kafka networks: - mynetwork portainer: container_name: portainer ports: - 9000:9000 restart: always volumes: - /etc/localtime:/etc/localtime - /var/run/docker.sock:/var/run/docker.sock - /home/mycontainers/portainer/data:/data:rw image: portainer/portainer networks: - mynetwork networks: mynetwork: driver: bridge
配置国内镜像
sudo vi /etc/docker/daemon.json
daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
切到目录 /data/docker-compose/
。
docker-compose up -d
接着等待下载,自动安装
完成后,docker ps
查看kafka状态。 如有自动重启等问题,说明有问题。没有的话就安装完成了。
在页面Topic中点击Add即可。如果kafka-ui显示为黄色或红色,且Broker和Topics点击后一直转圈,说明端口未开放。有防火墙将防火墙放开9192,9292,9392
三个端口。云服务器则在安全组中的入方向规则 添加端口即可。
docker exec -it kafka1 /bin/bash
kafka-topics.sh --create --topic test --partitions 3 --replication-factor 3 --bootstrap-server 110.41.70.109:9192,110.41.70.109:9292,110.41.70.109:9392
#查看所有Topic
kafka-topics.sh --list --bootstrap-server 110.41.70.109:9092
#查看topic详情
kafka-topics.sh --describe --bootstrap-server 110.41.70.109:9192
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' (errno=12)
遇到上面错误,执行以下命令。在容器内执行
dd if=/dev/zero of=swapfile bs=1024 count=1000000
mkswap swapfile
swapon swapfile
这样内存就不会不足了。
云服务器是2g的,一个kafka就占400m多,3个直接1.2g多,加上其他的,直接爆内存了,所以改成一个kafka了,2g内存跑3个kafka真的强人所难了,所以等有更大的内存了再来装KAFKA集群吧。
下面是新的docker-compose.yml。
注意:要将/data/bitnami
情况,不然会保留之前的数据,导致无法正常启动。
version: "3" services: #kafka可视化工具 kafka-ui: container_name: kafka-ui image: provectuslabs/kafka-ui:latest ports: - 8989:8080 depends_on: - kafka1 environment: - KAFKA_CLUSTERS_0_NAME=kafkaCluster - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=110.41.70.109:9192 - DYNAMIC_CONFIG_ENABLED=true networks: - mynetwork # kafka集群 kafka1: image: 'bitnami/kafka:3.3.1' container_name: kafka1 user: root ports: - 9192:9092 - 9193:9093 environment: ### 通用配置 # 允许使用kraft,即Kafka替代Zookeeper - KAFKA_ENABLE_KRAFT=yes # kafka角色,做broker,也要做controller - KAFKA_CFG_PROCESS_ROLES=broker,controller # 指定供外部使用的控制类请求信息 - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER # 定义kafka服务端socket监听端口 - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 # 定义安全协议 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT # 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可 - KAFKA_KRAFT_CLUSTER_ID=LelM2dIFQkiUFvXCEcqRWA # 集群地址 - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka1:9093 # 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用 - ALLOW_PLAINTEXT_LISTENER=yes # 设置broker最大内存,和初始内存 - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M # 允许自动创建主题 - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true # 消息保留时长(毫秒),保留7天 - KAFKA_LOG_RETENTION_MS=604800000 ### broker配置 # 定义外网访问地址(宿主机ip地址和端口) - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://110.41.70.109:9192 # broker.id,必须唯一 - KAFKA_BROKER_ID=1 volumes: - /data/bitnami/kafka1:/bitnami/kafka networks: - mynetwork portainer: container_name: portainer ports: - 9000:9000 restart: always volumes: - /etc/localtime:/etc/localtime - /var/run/docker.sock:/var/run/docker.sock - /home/mycontainers/portainer/data:/data:rw image: portainer/portainer networks: - mynetwork networks: mynetwork: driver: bridge
写在最后:
装了好久,希望能帮助上大家,kafka装起来太多坑了,网上找的照着装也会有各种各样的问题,所以这里写的算是比较详细了,之前的教程kafka-ui重定向了,没注意,一直用8080访问不到,重装了好几次,后面才发现。大家可以把docker-compose.yml配置文件好好看看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。