Docker 构建 Kafka 0.11.0.2 集群

1. 借鉴

2. 开始

我们的集群规划如下:

kafka01[172.173.16.19] kafka02[172.173.16.20] kafka03[172.173.16.21]

镜像准备

  1. docker hub 下载
  docker pull caiserkaiser/centos-ssh
  1. 构建
    caiser/centos-ssh:7.8 镜像

创建自定义网络

Docker 网络操作

docker network create -d bridge --subnet "172.173.16.0/24" --gateway "172.173.16.1"  datastore_net

启动容器

docker run -it -d --network datastore_net --ip 172.173.16.19 --name kafka01 caiser/centos-ssh:7.8

下载kafka

  1. 下载kafka

  2. 拷贝到容器内

    docker cp ~/Downloads/kafka_2.11-0.11.0.2.tgz df4410d638e8:/opt/envs
    
  3. 解压

    tar -zxvf kafka_2.11-0.11.0.2.tgz
    

配置

server.properties

  • a. 备份

    cp /opt/envs/kafka_2.11-0.11.0.2/config/server.properties /opt/envs/kafka_2.11-0.11.0.2/config/server.properties.bak
    
  • b. 编辑server.properties

     vi /opt/envs/kafka_2.11-0.11.0.2/config/server.properties
    
  • c. 配置

    ①. 打开下面这一行的注释,使可以删除topic

     # delete.topic.enable=true
    

    ②. 配置 log.dirs【指定目录时需要先创建】

     log.dirs=/opt/logs
    

    ③. 配置zookeeper

    zookeeper.connect=zookeeper01:2181,zookeeper02:2181,zookeeper03:2181
    

    ④. 配置listeners

    listeners=PLAINTEXT://kafka01:9092
    

kafka-节点配置

  1. 编辑/etc/hosts,并添加以下hostname

    172.173.16.13   zookeeper01
    172.173.16.14   zookeeper02
    172.173.16.15   zookeeper03
    172.173.16.19   kafka01
    172.173.16.20   kafka02
    172.173.16.21   kafka03
    

保存为镜像并移除容器

docker commit df4410d638e8 caiser/kafka:0.11.0.2
docker rm df4410d638e8

启动容器

docker run -it -d --network datastore_net --ip 172.173.16.19 --name kafka01 caiser/kafka:0.11.0.2 bin/bash

docker run -it -d --network datastore_net --ip 172.173.16.20 --name kafka02 caiser/kafka:0.11.0.2 bin/bash

docker run -it -d --network datastore_net --ip 172.173.16.21 --name kafka03 caiser/kafka:0.11.0.2 bin/bash

【重要】配置不同的broker.id

在config/server.properties下,不同的节点的broker.id必须不同,所以我们分配如下

节点 kafka01[172.173.16.19] kafka02[172.173.16.20] kafka03[172.173.16.21]
broker.id 0 1 2
vi /opt/envs/kafka_2.11-0.11.0.2/config/server.properties

【重要】配置不同的listeners

在config/server.properties下,不同的节点的listeners必须为本机hostname

节点 配置
kafka01[172.173.16.19] listeners=PLAINTEXT://kafka01:9092
kafka02[172.173.16.20] listeners=PLAINTEXT://kafka02:9092
kafka03[172.173.16.21] listeners=PLAINTEXT://kafka03:9092
vi /opt/envs/kafka_2.11-0.11.0.2/config/server.properties

配置ssh免密登录

  1. 进入容器

    docker exec -it kafka01 /bin/bash
    
  2. 到~/.ssh目录下生成秘钥

    ssh-keygen -t rsa
    
  3. 拷贝秘钥到kafka01,kafka03和kafka02

    a.[如果没开启]三个容器没有开启ssh服务[ps -ef | grep ssh],需要依次执行

    /usr/sbin/sshd -D &
    

    b. 拷贝秘钥

    ssh-copy-id kafka01
    ssh-copy-id kafka02
    ssh-copy-id kafka03
    
  4. kafka02和kafka03依次执行上述1-3步骤

启动kafka

依次到kafka01,kafka02,kafka03机器上执行以下命令

cd /opt/envs/kafka_2.11-0.11.0.2/
bin/kafka-server-start.sh config/server.properties &

配置 集群起/停 脚本

这样就不用到所有机器上依次启停了...

#! /bin/bash

case $1 in
"start") {
        for i in kafka01 kafka02 kafka03; do
            echo "----- start $i -----"
            ssh $i "export JMX_PORT=9988 && /opt/envs/kafka_2.11-0.11.0.2/bin/kafka-server-start.sh -daemon /opt/envs/kafka_2.11-0.11.0.2/config/server.properti
es"
        done
};;
"stop") {
        for i in kafka01 kafka02 kafka03; do
            echo "----- stop $i -----"
            ssh $i "/opt/envs/kafka_2.11-0.11.0.2/bin/kafka-server-stop.sh stop"
        done
};;
esac

3. 大功告成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容