超实用的Kafka集群搭建(有zk版)

前言

本文讲述超实用的 Kafka 集群搭建流程,Kafka 2.8 以前的集群时依赖于 ZooKeeper 做服务协调,而 2.8 开始移除了 Zookeeper 的依赖 (后续会出文章讲解这块的功能情况)。

本文搭建的 Kafka 版本是 2.6.0 版本,因此也就是依赖 ZooKeeper 做服务协调,如果您已经有相关的 ZooKeeper 环境,可以进入正式部署环节,如果您只想搭建一个简单的 ZooKeeper 单体实例,可以自行 Google 学习;如果您想了解并搭建一个高可用的 ZooKeeper 集群,可以参考下列文章进一步学习:

  • 小白必须知道的 ZooKeeper 知识
  • zookeeper 集群搭建

机器准备

my_middleware-dev_10.12.3.40
my_middleware-dev_10.12.3.41
my_middleware-dev_10.12.3.42

创建 kafka 专属用户组和用户

groupadd -g 1013 kafka
useradd -M -g kafka -u 1013 kafka -s /sbin/nologin 

# 创建 redis 需要的一些目录
mkdir -p /usr/local/kafka/script
mkdir -p /data/logs/kafka/
mkdir -p /data/database/kafka/
ln -snf /data/logs/kafka /usr/local/kafka/logs

# 创建需要的配置文件


# 授权文件和目录
chown -R kafka:kafka /data/logs/kafka/
chown -R kafka:kafka /data/database/kafka/
chown -R kafka:kafka /usr/local/kafka/script

下载安装

# 此处为了保持和服务器一样的版本,使用了 kafka 2.6.0 的 scala 2.12 版本
cd /data/downloads && wget https://archive.apache.org/dist/kafka/2.6.0/kafka_2.12-2.6.0.tgz
tar zxvf kafka_2.12-2.6.0.tgz
mv kafka_2.12-2.6.0 /usr/local/
ln -snf /usr/local/kafka_2.12-2.6.0 /usr/local/kafka

配置 zookeeper 的 hosts 地址

# 下面使用了内网 IP 的形式访问构建
192.168.3.35 zk01-dev.middle.com
192.168.3.34 zk02-dev.middle.com
192.168.3.33 zk03-dev.middle.com

# 你也可以使用外网IP构建
10.12.3.40 zk01-dev.middle.com
10.12.3.41 zk01-dev.middle.com
10.12.3.42 zk01-dev.middle.com

调整机器的 kafka 配置文件

cd  /usr/local/kafka/config

# vim server.properties 修改服务的配置内容如下

# broker.id 改成你服务器对应需要的 id,此处我用服务器ip最后的来代替,你可以设置成1 2 3这种
broker.id=40 
listeners=PLAINTEXT://0.0.0.0:9092
# 启用内网的情况下可以使用如下,替换IP为你的内网IP
listeners.internal=PLAINTEXT://192.168.3.35:9092
# 代表公网访问的情况;替换IP为你的公网IP
advertised.listeners=PLAINTEXT://10.12.3.40:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/logs/kafka
data.dirs=/data/database/kafka
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# 替换成你设置的 ip 或者 hosts 地址
zookeeper.connect=zk01-dev.middle.com:2181,zk02-dev.middle.com:2181,zk03-dev.middle.com:2181
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=500
auto.leader.rebalance.enable=true
unclean.leader.election.enable=false
default.replication.factor=2
delete.topic.enable=true

放行服务器之间的通讯

iptables -A INPUT -s 10.12.3.0/24 -p tcp -i eth0 -m multiport --dports 9092,9998 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -p tcp -i eth0 -m multiport --dports 9092,9998 -j ACCEPT

# 办公网段开放
iptables -A INPUT -s 10.4.0.0/16 -p tcp -i eth0 -m multiport --dports 9092 -j ACCEPT
iptables -A INPUT -s 10.3.0.0/16 -p tcp -i eth0 -m multiport --dports 9092 -j ACCEPT
# 放行 VPN 网段
iptables -A INPUT -s 192.168.41.0/16 -p tcp -i eth0 -m multiport --dports 9092 -j ACCEPT

创建启动脚本

# 创建启动脚本
touch /usr/local/kafka/script/start-cluster.sh && chmod +x  /usr/local/kafka/script/start-cluster.sh

# vim /usr/local/kafka/script/start-cluster.sh 

#!/bin/sh

export JMX_PORT="9998"
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
export KAFKA_LOG_DIR="/data/logs/kafka"
export KAFKA_HOME="/usr/local/kafka"

nohup $KAFKA_HOME/bin/kafka-server-start.sh -daemon  $KAFKA_HOME/config/server.properties >> /data/logs/kafka/startup.log 2>&1 &

# 创建快捷停止脚本
touch /usr/local/kafka/script/stop-cluster.sh && chmod +x  /usr/local/kafka/script/stop-cluster.sh

# vim /usr/local/kafka/script/stop-cluster.sh 

#!/bin/sh

export JMX_PORT="9998"
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
export KAFKA_LOG_DIR="/data/logs/kafka"
export KAFKA_HOME="/usr/local/kafka"

$KAFKA_HOME/bin/kafka-server-stop.sh  $KAFKA_HOME/config/server.properties


# 指定启动用户启动的脚本
touch /usr/local/kafka/start.sh && chmod +x  /usr/local/kafka/start.sh
# vim /usr/local/kafka/start.sh
#!/bin/sh
sudo -u kafka /bin/sh /usr/local/kafka/script/start-cluster.sh

# 指定启动用户关闭的脚本
touch /usr/local/kafka/stop.sh && chmod +x  /usr/local/kafka/stop.sh
# vim /usr/local/kafka/stop.sh
#!/bin/sh
sudo -u kafka /bin/sh /usr/local/kafka/script/stop-cluster.sh

你可能感兴趣的:(分布式,中间件,高可用,kafka,分布式)