本文主要介绍 kafka + kraft 搭建过程,主要用途是为了日志采集,所以搭建相对比较简单暴力,不过也可以作为一个参考供大家学习,主打一个能用管跑(调优啊,参数解释啊,原理啊,太枯燥了,你自己搜吧)。
我们的日志采集架构比较传统,基于 filebeat -> kafka -> logstash -> local file -> nfs. 没有引入 ES 之类的流行的玩法,因为成本有限,人手有限,精力有限,哈哈,我是不会告诉你是因为研发习惯了 grep 日志文件的,咱也没啥动力去改变人家的习惯哈。
废话不多说,欢迎关注公&号:新质程序猿,可以获取到最新的资源哟。
kraft 协议是 kafka 自研的用于替代 zk 的分布式协调方案,因为可以少安装一个 zk,管理起来肯定方便不少,拥抱新东西呗!
机器规划
准备3台机器,我这里准备了 3 台 centos 系统,其他系统也可以,反正 java 是跨平台的。
-
10.100.8.201 nodeId=1 broker=9092 controller=9093
-
10.100.8.202 nodeId=2 broker=9092 controller=9093
-
10.100.8.203 nodeId=3 broker=9092 controller=9093
备注:controller 取代了之前的 zookeeper
内核优化
主要就是文件句柄啥的,不知道为啥操作系统把 ulimit 搞成 1024 那么小。
sysctl -a -r "^net.(ipv4|core)" > /tmp/sysctl_output.txt
cat << EOF > /etc/sysctl.d/custom.conf
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 30000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_tw_recycle = 0
EOF
sysctl -p /etc/sysctl.d/custom.conf
ulimit -a > /tmp/limits.conf
cat << EOF >> /etc/security/limits.conf
#### custom of file
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
EOF
ulimit -n 1000000
安装Java
如果公司对环境版本没啥要求,建议您直接上 OpenJDK, 免费又好用。Oracle 最后一个免费版本的JDK 是 8u202。
我这里直接安装 OpenJDK 11 了(yum源上已经有的),省却了配置环境变量的琐事。
yum makecache fast
yum list | grep openjdk
yum install -y java-11-openjdk
java -version
openjdk version "11.0.23" 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS, mixed mode, sharing)
如果你仍然想安装 Oracle JDK 可以看我之前写的一篇文章:
轻松一刻,来点不烧脑的 Linux 服务器 JDK 安装教程,附资源包分享-优快云博客
安装Kafka
kafka 官网:https://kafka.apache.org/
下载地址:https://kafka.apache.org/downloads
执行安装脚本
我把安装过程写成了一个 bash 脚本,可以直接执行,当然,你也可以分步手动执行。脚本关键流程是:
-
读取传入的 ip 参数,3 台机器的 ip, 按序号 1-3 逗号分隔(根据 localIp 自动匹配编号)
-
下载资源包,我脚本里 hard code 的 3.8.0 的版本,你可以自行更改
-
解压,重命名至
/usr/local/kafka
目录 -
调整配置文件(根据你自己的需求适当调整部分配置)
-
配置服务自启
-
可选 调整启动内存 大小(kafka 不太占内存,有个4G足够了,主要占网络及磁盘IO)
#!/bin/bash
IPS=$1
localIp=$(ip a |grep inet |awk '{print $2}'|grep ^1[0,7,9] |awk -F "/" '{print $1}' |head -n 1)
if [ "x$IPS" == "x" ]
then
echo "Usage: bash install_kafka.sh IP1,IP2,IP3"
exit 1
else
echo "IPS is ${IPS}"
fi
NODE_ID=1
IP1=
IP2=
IP3=
ipArray=($(echo ${IPS} | sed 's/,/ /g'))
length=${#ipArray[*]}
if [ "x$length" == "x3" ]
then
IP1=${ipArray[0]}
IP2=${ipArray[1]}
IP3=${ipArray[2]}
else
echo "Usage: bash install_kafka.sh IP1,IP2,IP3"
exit 1
fi
if [ "$localIp" == "$IP1" ]
then
NODE_ID=1
elif [ "$localIp" == "$IP2" ]
then
NODE_ID=2
elif [ "$localIp" == "$IP3" ]
then
NODE_ID=3
else
echo "localIp:$localIp not match $IPS"
exit 1
fi
echo "NODE_ID=$NODE_ID, IP1=$IP1,IP2=$IP2,IP3=$IP3"
cd /opt
[ ! -f kafka_2.13-3.8.0.tgz ] && wget https://downloads.apache.org/kafka/3.8.0/kafka_2.13-3.8.0.tgz -N
mkdir -p /data/kafka-data
# unzip
tar zxf