最详细且简单的kafka集群搭建教程(2.5.0)

355 阅读2分钟

环境准备

需要有三台 Centos7 服务器,并都需要完成下面的配置要求:

  • 关闭防火墙
  • 新建普通用户me
  • 阿里云时钟同步服务器
  • 配置免密登陆
  • 关闭selinux
  • 配置xsyncxcall同步脚本
  • 配置jdk8环境
  • 安装配置zookeeper集群,并启动zookeeper集群
  • 确保端口9092,9999端口没有被占用

环境准备可以参考我下面的博文:

centos防火墙常用命令

centos新建普通用户

centos系统时间同步

centos配置免密登录

centos关闭SElinux

centos配置xsync和xcall同步脚本

centos安装jdk8

centos安装zookeeper集群

集群规划

hostnameIP
master10.0.0.87
node110.0.0.81
node210.0.0.82

正式安装

安装说明:

  1. 除特别说明外,所有操作均在master节点、使用me这个非root用户执行
  2. 命令中出现的IP,均需要替换为自己集群中的IP【必须】
  3. 命令中出现的/home/lbs/software路径,可选择替换为自定义路径【可选】

1、下载安装包,并解压安装包到安装kafka的指定路径(这里设定为/home/lbs/software/kafka

wget https://archive.apache.org/dist/kafka/2.5.0/kafka_2.12-2.5.0.tgz
tar -zxvf kafka_2.12-2.5.0.tgz -C /home/lbs/software
mv /home/lbs/software/kafka_2.12-2.5.0 /home/lbs/software/kafka
  1. 创建存放 kafka 消息的目录
mkdir -p /home/lbs/software/kafka/kafka-logs
  1. 修改server.properties配置文件
vim /home/lbs/software/kafka/config/server.properties

# 修改如下参数
broker.id=0 
......
listeners=PLAINTEXT://:9092
......
advertised.listeners=PLAINTEXT://10.0.0.87:9092
......
log.dirs=/home/lbs/software/kafka/kafka-logs
......
zookeeper.connect=10.0.0.87:2181,10.0.0.81:2181,10.0.0.82:2181

# 新增如下参数
# 关闭自动创建topic
auto.create.topics.enable=false
# 开启topic删除
delete.topic.enable=true

参数说明:

1.broker.id : 集群内全局唯一标识;

2.每个节点上需要设置不同的值 listeners:这个IP地址也是与本机相关的,每个节点上设置为自己的IP地址;

3.log.dirs:存放kafka消息的

4.zookeeper.connect: 配置的是 zookeeper 集群地址

如果你内外网卡地址不一样,listeners就需要特殊的配置了,查看Kafka学习理解-listeners配置

  1. 分发kafka安装目录
# 分发kafka安装目录给其他集群节点
xsync /home/lbs/software/kafka
  1. 分别登录到其他两台机器,修改其server.properties的如下内容

    • broker.id: 各机器必须保持唯一,例如master1,那么node1node223
    • advertised.listeners: 各机器修改为自身的IP地址
  2. 编写 kafka 集群操作脚本

替换IP地址,然后直接执行下面命令即可

echo '#!/bin/bash
case $1 in
"start"){
        for i in 10.0.0.87 10.0.0.81 10.0.0.82
        do 
                 echo -------------------------------- $i kafka 启动 ---------------------------
                ssh $i "source /etc/profile;/home/lbs/software/kafka/bin/kafka-server-start.sh -daemon /home/lbs/software/kafka/config/server.properties"
        done
}
;;
"stop"){
        for i in 10.0.0.87 10.0.0.81 10.0.0.82
        do
                echo -------------------------------- $i kafka 停止 ---------------------------
                ssh $i "/home/lbs/software/kafka/bin/kafka-server-stop.sh"
        done
}
;;
"status"){
        for i in 10.0.0.87 10.0.0.81 10.0.0.82
        do
                echo -------------------------------- $i kafka 状态 ---------------------------
                status=$(ssh $i "source /etc/profile;jps | grep -i kafka")
                if [[ -z "$status" ]]
                then
                    echo "Kafka not running!"
                else
                    echo "$status"
                fi
        done
}
;;
esac' > /home/lbs/software/kafka/bin/kafka-cluster.sh
chmod +x /home/lbs/software/kafka/bin/kafka-cluster.sh

操作集群

# 启动集群
/home/lbs/software/kafka/bin/kafka-cluster.sh start

# 停止集群
/home/lbs/software/kafka/bin/kafka-cluster.sh stop

# 查看集群状态
/home/lbs/software/kafka/bin/kafka-cluster.sh status

更多kafka操作命令,请参考我的博文# Kafka集群管理:常用命令速览

验证集群

  1. 查看kafka进程情况

    [me@master bin]$ xcall jps
    ================current host is master=================
    --> execute command "jps"
    28340 QuorumPeerMain
    32121 Jps
    31770 Kafka
    Command executed successfully on master
    ================current host is node1=================
    --> execute command "jps"
    6435 QuorumPeerMain
    7331 Jps
    7177 Kafka
    Command executed successfully on node1
    ================current host is node2=================
    --> execute command "jps"
    6516 QuorumPeerMain
    7480 Jps
    7289 Kafka
    Command executed successfully on node2
    All commands executed successfully!
    
  2. 查看broker在线情况

    [admin@master kafka]$ ./bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids
    Connecting to localhost:2181
    
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null
    [0, 1, 2]