docker 部署kafka,包含单节点多节点,保姆级教程

2,045 阅读2分钟

本文介绍如何使用docker-compose一键部署kafka环境及对应的管理系统

docker及docker-compose的安装本文不做过多介绍

镜像

本文选取的镜像是wurstmeister/kafka
镜像地址:hub.docker.com/r/wurstmeis…

注意:kafka启动必须配合zookeeper一起使用,所以docker-compose中必须编排好zookeeper

docker-compose.yml 如下:

version: '3'
services:
  zookeeper:
    image: zookeeper
    ports:
      - 2181:2181


  kafka1:
    image: wurstmeister/kafka
    container_name: kafka1
    expose:
      - "9999"       # JMX-PORT   用于监控kafka集群
    ports:
      - "9093:9093"
      - "9999:9999"
    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_NUM_PARTITIONS: 1
      KAFKA_DEFAULT_REPLICATION_FACTOR: 1
      KAFKA_ZOOKEEPER_CONNECT: 192.168.47.211:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.47.211:9093
      JMX_PORT: 9999
    volumes:
      - /home/ubuntu/kafka_data:/kafka
      - /var/run/docker.sock:/var/run/docker.sock

请注意:jmx-port是用于监控kafka集群的,可以开启可以不开启,开启时,kafka管理工具能够检测到kafka处理数据的一些指标数据 kafka的数据存在于镜像内/kafka下

wurstmeister/kafka 镜像内基本信息

请添加图片描述 使用docker run -it wurstmeister/kafka /bin/bash 指令进入kafka镜像内部观察 kafka数据存在/kafka目录下,kafka相关配置以及可执行脚本存在/opt/kafka目录下。 当我们需要修改配置时,可以将配置文件映射至opt/kafka/config下 请添加图片描述 当我们需要将数据保存下次启动数据还在时,需要将镜像内/kafka文件夹映射出来。千万注意,如果你的kafka数据量巨大,一定要将数据映射到磁盘上,否则使用docker运行的kafka没有将数据映射则会保留在docker默认存储路径下,消耗系统盘空间。

kafka管理工具

kafka-manager用于管理kafka集群,同样也可以使用docker-compose直接启动kafka-manager环境,docker-compose文件如下

version: '3'
services:
  kafka-manager:
    image: sheepkiller/kafka-manager
    container_name: kafka-manager
    environment:
      ZK_HOSTS: 192.168.47.211:2181
      KAFKA_MANAGER_AUTH_ENABLED: "true"
      KAFKA_MANAGER_USERNAME: admin
      KAFKA_MANAGER_PASSWORD: meiyoumima
    ports:
      - 9000:9000
    command: -Dpidfile.path=/dev/null

启动完毕可在浏览器9000端口访问,如下图所示: 请添加图片描述查看某个topic相关信息 在这里插入图片描述

单机部署多个kafka节点

将注释部分放开即可

version: '3'
services:
  zookeeper:
    image: zookeeper
    ports:
      - 2181:2181
     
  kafka1:
    image: wurstmeister/kafka
    container_name: kafka1
    expose:
      - "9999"
    ports:
      - "9093:9093"
      - "9999:9999"
    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_NUM_PARTITIONS: 1
      KAFKA_DEFAULT_REPLICATION_FACTOR: 1
      KAFKA_ZOOKEEPER_CONNECT: 192.168.47.211:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.47.211:9093
      JMX_PORT: 9999
    volumes:
      - /media/yklab/2529aef8-5d05-4b05-9213-3eedbc132894/k_data:/kafka
     
      - /var/run/docker.sock:/var/run/docker.sock
  # kafka2:
  #   image: wurstmeister/kafka
  #   container_name: kafka2
  #   ports:
  #     - "9094:9094"
  #   environment:
  #     KAFKA_BROKER_ID: 1
  #     KAFKA_NUM_PARTITIONS: 1
  #     KAFKA_DEFAULT_REPLICATION_FACTOR: 1
  #     KAFKA_ZOOKEEPER_CONNECT: 192.168.47.211:2181
  #     KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
  #     KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.47.211:9094
  #   volumes:
  #     - /home/yklab/myraid0/kafka_data:/kafka
  #     - /var/run/docker.sock:/var/run/docker.sock

  # kafka3:
  #   image: wurstmeister/kafka
  #   container_name: kafka3
  #   ports:
  #     - "9095:9095"
  #   environment:
  #     KAFKA_BROKER_ID: 2
  #     KAFKA_NUM_PARTITIONS: 1
  #     KAFKA_DEFAULT_REPLICATION_FACTOR: 1
  #     KAFKA_ZOOKEEPER_CONNECT: 192.168.47.211:2181
  #     KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9095
  #     KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.47.211:9095
  #   volumes:
  #     - /home/yklab/myraid0/kafka_data:/kafka
  #     - /var/run/docker.sock:/var/run/docker.sock

创作不易,踩坑不易,如果您觉得对您有帮助,请打赏一丢丢植发钱 爱你哟~