0


KAFKA集群 和kafka-ui docker-compose 一键安装

KAFKA集群 和kafka-ui docker-compose 一键安装

1.docker-compose 安装

pip install docker-compose

2.docker-compose 安装 kafka集群

  1. /data/docker-compose/中新建docker-compose.yml 文件。
  2. 其中110.41.70.109改为自己的虚拟机ip。
  3. kafka-ui 为可视化kafka页面。通过ip:8989进行访问。 (ip是自己虚拟机的ip,我这里的就是110.41.70.109:8989) 下面同理
  4. 这里不需要Zookeeper。
  5. portainer是docker-compose 可视化页面(可视化真的太好用了)。可以看容器内的日志,这个重定向的kafka日志一直有问题,显示乱码,这个页面可以正常浏览。通过 ip:9000 访问。
  6. 内存在2g及以下不建议安装集群,直接跳转到最后,参考那个单个kafka的docker-compose.yml。
version:"3"services:#kafka可视化工具kafka-ui:container_name: kafka-ui
    image: provectuslabs/kafka-ui:latest
    ports:- 8989:8080depends_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:9093environment:### 通用配置# 允许使用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:9093environment:### 通用配置# 允许使用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:9093environment:### 通用配置# 允许使用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:9000restart: 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

2.启动

  1. 配置国内镜像sudo vi /etc/docker/daemon.json
  2. 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"}
  3. 切到目录 /data/docker-compose/docker-compose up -d
  4. 接着等待下载,自动安装
  5. 完成后,docker ps 查看kafka状态。 如有自动重启等问题,说明有问题。没有的话就安装完成了。

3. 添加一个topic

方法一:kafka-ui添加

​ 在页面Topic中点击Add即可。如果kafka-ui显示为黄色或红色,且Broker和Topics点击后一直转圈,说明端口未开放。有防火墙将防火墙放开

9192,9292,9392

三个端口。云服务器则在安全组中的入方向规则 添加端口即可。

方法二:容器内添加
  1. 进入容器
 docker exec -it kafka1 /bin/bash
  1. 创建主题 (test) (ip换成自己的虚拟机ip)
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

4.查看topic

#查看所有Topic
kafka-topics.sh --list --bootstrap-server 110.41.70.109:9092
#查看topic详情
kafka-topics.sh --describe --bootstrap-server 110.41.70.109:9192

5.OpenJDK报错

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

这样内存就不会不足了。

6. 3个KAFKA集群 运行一段时间变成两个了?

​ 云服务器是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配置文件好好看看。

标签: kafka ui docker

本文转载自: https://blog.csdn.net/qq_46281780/article/details/137751958
版权归原作者 Altira 所有, 如有侵权,请联系我们删除。

“KAFKA集群 和kafka-ui docker-compose 一键安装”的评论:

还没有评论