当前位置:   article > 正文

docker-compose快速搭建kafka集群_docker-compose kafka集群

docker-compose kafka集群

前言

当前是在学习kafka3.0的教程,基于需求就进行搭建了kafka集群,kafka在2.8.0之前是需要zookeeper的,之后可以不需要依赖了,目前的部署方案是基于zookeeper集群的情况下进行的,若是你还没有搭建zookeeper集群,可见:docker-compose快速搭建Zookeeper集群

我自己搭建录制了个视频见:docker-compose快速搭建zookeeper集群以及kafka集群

所有博客文件目录索引:博客目录索引(持续更新)

docker-compose快速搭建kafka集群(较详细)

详细步骤如下:

1、拉取kafka3.0.0的镜像

docker pull bitnami/kafka:3.0.0
  • 1

2、编写docker compose的yaml配置文件

需要说明一下,当前的网络使用的是之前已经创建的网络【zk-net】,所以在下面的配置文件中只需要进行网络声明一下,之后的服务即可指定net-work了(若是不声明就会报错)。

在/home/dockerfiles目录中创建docker-compose-kafkas.yml文件:

version: '3.1'

# 外部网络声明(否则无法使用之前已经定义好的网络)
networks:
   zk-net:
        external: true

services:
  kafka1:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka1
    hostname: kafka1
    networks:
      - zk-net
    ports:
      - '9093:9092'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=1      
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka1:9092,EXTERNAL://kafka1:9093
      - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093
      - ALLOW_PLAINTEXT_LISTENER=yes
  kafka2:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka2
    hostname: kafka2
    networks:
      - zk-net
    ports:
      - '9094:9092'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=2   
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka2:9092,EXTERNAL://kafka2:9094
      - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9094
      - ALLOW_PLAINTEXT_LISTENER=yes
  kafka3:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka3
    hostname: kafka3
    networks:
      - zk-net
    ports:
      - '9095:9092'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=3  
      - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka3:9092,EXTERNAL://kafka3:9095
      - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9095
      - ALLOW_PLAINTEXT_LISTENER=yes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • KAFKA_CFG_ZOOKEEPER_CONNECT:zookeeper连接的ip地址可以有多个。
  • KAFKA_BROKER_ID:broker的全局唯一编号,不能重复
  • KAFKA_INTER_BROKER_LISTENER_NAME:kafka内部的broker监听名称。
  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP:监听的协议集合多个。(这里CLIENT指的是内部,EXTERNAL是外部,之后就不能够使用PLAINTEXT作为协议名了,只能够使用定义的CLIENT、EXTERNAL)。
  • KAFKA_CFG_ADVERTISED_LISTENERS:修改为服务器ip,在真实生产环境中不能是localhost,监听的服务端口有多个。
  • KAFKA_CFG_LISTENERS:监听地址。
  • ALLOW_PLAINTEXT_LISTENER:允许使用PLAINTEXT listener监听器。

注意点:①在KAFKA_CFG_ADVERTISED_LISTENERS配置多个监听者的时候端口是不能一样的。

3、启动kafka集群服务

# -f表示指定某个配置文件名   -d:表示后台启动
docker-compose -f docker-compose-kafkas.yml up -d 
  • 1
  • 2

image-20220824194830197

如何测试是否已经连接zookeeper呢?

# 进入zookeeper集群中的某一个服务
docker exec -it zoo2 /bin/bash

# 进入bin目录
cd bin

# 客户端工具连接到服务
./zkCli.sh -server 127.0.0.1:2181

# 查看对应的kafka结点信息
 ls /kafka/brokers/ids
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

搭建成功如下信息所示:

image-20220824195053333

搭建zookeeper集群以及kafka集群所需内存如下:

image-20220824200310698

若是你的集群中某个服务没有启动起来,可以使用如下查看指定服务日志:

docker logs 服务名
  • 1

**注意:**停止 Kafka 集群时,一定要等 Kafka 所有节点进程全部停止后再停止 Zookeeper集群。因为 Zookeeper 集群当中记录着 Kafka 集群相关信息,Zookeeper 集群一旦先停止,Kafka 集群就没有办法再获取停止进程的信息,只能手动杀死 Kafka 进程了。


docker-compose快速搭建Zookeeper集群+kafka集群

创建文件docker-compose-zookeepers-kafkas.yml

注意:为了能够Java连接到容器中的kafka,在每个kafka服务中我没有设置其他协议别名,就是单独使用了一个PLAINTEXT,并且每个服务都各自映射自己端口,而不是之前的8083:8082,8084:8082。

  • 我自己的话也试过定义多个协议名方案不过都不行,只能最终方案选择这个。

准备操作:查看你的公网ip地址或者你的虚拟机ip地址。

image-20220825152245466

拿到这个ip地址后去修改下面配置中对应的ip地址,只有这样你的java程序才能够发送消息成功并接收!

version: '3.1'

networks:
  zk-net:  # 网络名
    name: zk-net
    driver: bridge

services:
  # zookeeper集群
  zoo1:
    image: zookeeper:3.8.0
    container_name: zoo1   # 容器名称
    restart: always       # 开机自启
    hostname: zoo1        # 主机名
    ports:
      - 2181:2181         # 端口号
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    networks:
      - zk-net
  zoo2:
    image: zookeeper:3.8.0
    container_name: zoo2
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    networks:
      - zk-net
  zoo3:
    image: zookeeper:3.8.0
    container_name: zoo3
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    networks:
      - zk-net
  # kafka集群
  kafka1:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka1
    hostname: kafka1
    networks:
      - zk-net
    ports:
      - '9092:9092'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=1   
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.105:9092
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zoo1
      - zoo2
      - zoo3
  kafka2:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka2
    hostname: kafka2
    networks:
      - zk-net
    ports:
      - '9093:9093'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=2
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.105:9093
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zoo1
      - zoo2
      - zoo3
  kafka3:
    image: 'bitnami/kafka:3.0.0'
    container_name: kafka3
    hostname: kafka3
    networks:
      - zk-net
    ports:
      - '9094:9094'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka
      - KAFKA_BROKER_ID=3  
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9094
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.105:9094
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zoo1
      - zoo2
      - zoo3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100

启动服务命令:

# -f表示指定某个配置文件名   -d:表示后台启动
docker-compose -f docker-compose-zookeepers-kafkas.yml up -d 

# 查看当前服务
docker ps
  • 1
  • 2
  • 3
  • 4
  • 5

image-20220824201414277

参考资料

[1]. ERROR: SERVICE “CEREBRO“ USES AN UNDEFINED NETWORK

[2]. kafka报No security protocol defined for listener INTERNAL

[3]. kafka 外部无法连接进行生产消费(服务器docker搭建)

[4]. docker-compose 搭建 kafka 集群

[5]. 基于Docker-compose构建Kafka集群

[6]. docker-compose搭建Kafka集群,并应用代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/651983
推荐阅读
相关标签
  

闽ICP备14008679号