Heycm

Heycm

Kafka+Zookeeper集群部署分享

MQ
357
2022-02-07

Kafka+Zookeeper集群部署分享

heycm.cn · 2022年1月21日 09点07分

Kafka+Zookeeper集群搭建

本文将搭建一个3+3的服务集群,即3节点zookeeper+3节点kafka

下表是服务器资源配置

zookeeper 节点配置

节点版本IP端口
zk13.7.0192.168.100.1912181,2888,3888
zk23.7.0192.168.100.1922181,2888,3888
zk33.7.0192.168.100.1932181,2888,3888

kafka 节点配置

节点版本IP端口
kfk12.12-3.0.0192.168.100.1919092,9999
kfk22.12-3.0.0192.168.100.1929092,9999
kfk32.12-3.0.0192.168.100.1939092,9999

备注:

  1. 以上所有服务器必须配备JDK1.8环境,并将开放所有涉及端口,否则将无法保证正常安装成功。

    [root@localhost /]# java -version
    java version "1.8.0_291"
    Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
    Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
    
  2. 数据盘挂载目录为/data目录,不强制要求,但需修改相应配置文件,否则可能会导致数据丢失。

    [root@localhost /]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/sdb1               50G  437M  47G  1%   /data
    

Zookeeper集群部署

zk1(192.168.100.191)

  1. zookeeper压缩包上传到服务器/data/soft目录下

    [root@localhost soft]# ll
    总用量 387188
    -rw-r--r--. 1 root root  12387614 1月  19 09:58 apache-zookeeper-3.7.0-bin.tar.gz
    
  2. 在当前目录下将zk解压缩到/opt目录下,将解压出来的zk目录重命名/opt/zookeeper,此目录即zk程序目录

    # 解压缩
    tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /opt
    # 重命名
    mv /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper
    
  3. 创建zk的数据目录/data/zookeeper/data和日志目录/data/zookeeper/logs,两个目录建议创建在服务器数据盘下

    mkdir -p /data/zookeeper/data /data/zookeeper/logs
    
  4. 进入目录/opt/zookeeper/conf修改配置文件

    [root@localhost conf]# pwd
    /opt/zookeeper/conf
    [root@localhost conf]# ll
    总用量 16
    -rw-r--r--. 1 1000 1000  535 3月  17 2021 configuration.xsl
    -rw-r--r--. 1 1000 1000 3435 3月  17 2021 log4j.properties
    -rw-r--r--. 1 1000 1000 1148 3月  17 2021 zoo_sample.cfg
    

    zoo.sample.cfg 为配置文件样例,真正的配置文件为 zoo.cfg ,所以要拷贝一份配置文件命名为 zoo.cfg

    # 拷贝配置文件
    cp zoo.sample.cfg zoo.cfg
    # 修改配置文件
    vi zoo.cfg
    
    # 基础配置如下内容,写入并保存
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper/data
    dataLogDir=/data/zookeeper/logs
    clientPort=2181
    server.1=192.168.100.191:2888:3888
    server.2=192.168.100.192:2888:3888
    server.3=192.168.100.193:2888:3888
    

    dataDirdataLogDir修改为相应的数据目录和日志目录,server.N配置集群节点信息

  5. 配置节点1标识

    echo "1" > /data/zookeeper/data/myid
    

此时当前节点配置完成,去配置节点2和节点3。

zk2(192.168.100.192)

  1. 重复zk1的步骤1-4

  2. 配置节点2标识

    echo "2" > /data/zookeeper/data/myid
    

zk3(192.168.100.193)

  1. 重复zk1的步骤1-4

  2. 配置节点3标识

    echo "3" > /data/zookeeper/data/myid
    

启动集群

三个节点依次启动

  1. 进入启动目录/opt/zookeeper

    cd /opt/zookeeper
    
  2. 启动命令

    ./bin/zkServer.sh start
    

    输出以下信息表示启动成功

    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED

  3. 查看状态

    ./bin/zkServer.sh status
    

    follwer表示跟随者节点,leader表示领导者节点

    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower

  4. 停止命令

    ./bin/zkServer.sh stop
    

    输出以下信息表示正常关闭

    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED

  5. 连接测试

    随机选择一个节点,测试连接其他节点,例如在节点2连接节点1:

    ./bin/zkCli.sh -server 192.168.100.191:2181
    

    出现如下命令行即表示可以正常进入zookeeper

    [zk: 192.168.100.191:2181(CONNECTING) 0] 
    

Kafka集群部署

kfk1(192.168.100.191)

  1. kafka压缩包上传到服务器/data/soft目录下

    [root@localhost soft]# ll
    总用量 387188
    -rw-r--r--. 1 root root  12387614 1月  19 09:58 apache-zookeeper-3.7.0-bin.tar.gz
    -rw-r--r--. 1 root root  86486610 1月  18 17:16 kafka_2.12-3.0.0.tgz
    
  2. 在当前目录下将kfk解压缩到/opt目录下,将解压缩出来的kfk目录重命名/opt/kafka,此目录即kfk程序目录

    # 解压缩
    tar -zxvf kafka_2.12-3.0.0.tgz -C /opt
    # 重命名
    mv /opt/kafka_2.12-3.0.0 /opt/kafka
    
  3. 成绩kfk的日志目录/data/kafka/logs,建议创建在服务器数据盘下

    这里的kafka日志,实际上是kafka的数据,而并非kafka的运行日志

    mkdir -p /data/kafka/logs
    
  4. 进入目录/opt/kafka/config修改配置文件server.properties

    忽略了其他配置文件

    [root@localhost config]# pwd
    /opt/kafka/config
    [root@localhost config]# ll
    总用量 72
    -rw-r--r--. 1 root root 6943 1月  20 15:16 server.properties
    

    PS:为了防止操作失误或其他异常而导致不可预知的问题,建议备份一个原原本本的配置文件

    cp server.properties server_sample.properties

    # 修改配置文件
    vi server.properties
    # 修改如下配置项,其他配置项默认,写入并保存
    broker.id=1
    listeners=PLAINTEXT://192.168.100.191:9092
    num.network.threads=8
    num.io.threads=8
    socket.send.buffer.bytes=2097152
    socket.receive.buffer.bytes=2097152
    socket.request.max.bytes=134217728
    log.dirs=/data/kafka/logs
    zookeeper.connect=192.168.100.191:2181,192.168.100.192:2182,192.168.100.193:2181
    

    参数说明

    不同的服务器资源条件不同,参数值需视具体情况做不同调整

    配置项默认值说明
    broker.id0Broker唯一标识
    listenersPLAINTEXT://:9092监听信息
    num.network.threads3处理网络请求的最大线程数
    num.io.threads8处理磁盘I/O的最大线程数
    socket.send.buffer.bytes102400socket的发送缓冲区
    socket.receive.buffer.bytes102400socket的接收缓冲区
    socket.request.max.bytes104857600socket请求的最大字节数
    log.dirs/tmp/kafka-logs日志存放目录,多个目录使用逗号分割
    zookeeper.connectlocalhost:2181ZooKeeper服务器地址,多台用","间隔
  5. 写启动/停止脚本

    a.切换目录到/opt/kafka

    cd /opt/kafka
    

    b.编辑启动脚本

    vi start.sh
    

    c.输入以下内容并保存

    #!/bin/bash
    JMX_PORT=9999 ./bin/kafka-server-start.sh -daemon ./config/server.properties
    

    d.新建停止脚本

    vi stop.sh
    

    e.输入以下内容并保存

    #!/bin/bash
    ./bin/kafka-server-stop.sh
    

    f.授权

    chmod +x start.sh
    chmod +x stop.sh
    

kfk2(192.168.100.192)

  1. 重复kfk1的所有步骤

  2. 修改步骤4部分配置,其他参照kfk1

    broker.id=2
    listeners=PLAINTEXT://192.168.100.192:9092
    

kfk3(192.168.100.193)

  1. 重复kfk1的所有步骤

  2. 修改步骤4部分配置,其他参照kfk1

    broker.id=3
    listeners=PLAINTEXT://192.168.100.193:9092
    

启动集群

三个节点依次启动

  1. 进入启动目录/opt/kafka

    cd /opt/kafka
    
  2. 启动节点

    ./start.sh
    
  3. 查看端口监听,正常监听说明启动成功

    [root@localhost kafka]# netstat -lnp | grep 9092
    tcp6   0    0  192.168.100.191:9092    :::*   LISTEN  5180/java 
    
  4. 停止节点

    ./stop.sh
    

附录

Zookeeper官网

[Zookeeper.Doc](ZooKeeper: Because Coordinating Distributed Systems is a Zoo)

[Zookeeper.Download](Apache ZooKeeper)

Kafka官网

Kafka.Doc

[Kafka.Download](Apache Kafka)