Kafka-集群布署
1、环境准备
1.1、主机准备
1.1.1、主机列表
kafka-01 192.168.10.30 kafka-02 192.168.10.31 kafka-03 192.168.10.32
1.1.2、同步主机时间
# 设置时区 timedatectl set-timezone Asia/Shanghai # 同步系统时间 apt install -y ntpdate cron systemctl start cron systemctl enable cron cat << 'CAT_END' > /var/spool/cron/crontabs/root #ntp Server update */5 * * * * /usr/sbin/ntpdate ntp5.aliyun.com 2>&1 > /dev/null #ntp end CAT_END ntpdate ntp5.aliyun.com
1.2、安装zookeeper软件集群
1.2.1、下载软件
# 切记需要看kafka是支持哪个版本的zookeeper下载对应版本安装即可 # cat /data/server/kafka_2.12-3.4.0/LICENSE | grep zookee zookeeper-3.6.3 zookeeper-jute-3.6.3 # 版本一定要对得上,否则kafka会启动失败 curl -O https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz tar xf apache-zookeeper-3.6.3-bin.tar.gz -C /data/server/ ln -s /data/server/apache-zookeeper-3.6.3-bin /usr/local/zookeeper cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg mkdir /usr/local/zookeeper/{data,/logs} kafka-01:~# echo "1" >/usr/local/zookeeper/data/myid kafka-02:~# echo "2" >/usr/local/zookeeper/data/myid kafka-03:~# echo "3" >/usr/local/zookeeper/data/myid
1.2.2、kafka-01 zoo.cfg配置
root@kafka-01:~# grep -i '^[a-Z]' /usr/local/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 clientPortAddress=192.168.10.30 maxClientCnxns=100 server.1=192.168.10.30:2182:2183 server.2=192.168.10.31:2182:2183 server.3=192.168.10.32:2182:2183
1.2.3、kafka-02 zoo.cfg配置
root@kafka-02:~# grep -i '^[a-Z]' /usr/local/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 clientPortAddress=192.168.10.31 maxClientCnxns=100 server.1=192.168.10.30:2182:2183 server.2=192.168.10.31:2182:2183 server.3=192.168.10.32:2182:2183
1.2.4、kafka-03 zoo.cfg配置
root@kafka-03:~# grep -i '^[a-Z]' /usr/local/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 clientPortAddress=192.168.10.32 maxClientCnxns=100 server.1=192.168.10.30:2182:2183 server.2=192.168.10.31:2182:2183 server.3=192.168.10.32:2182:2183
1.2.5、编写systemd服务
cat <<'CAT_END' > /lib/systemd/system/zk.service [Unit] Description=Apache zookeeper After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/local/java ExecStart=/usr/local/zookeeper/bin/zkServer.sh start ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop ExecRestart=/usr/local/zookeeper/bin/zkServer.sh restart Restart=always RestartSec=20 [Install] WantedBy=multi-user.target CAT_END systemctl daemon-reload systemctl start zk systemctl enable zk
1.2.6、查看角色状态
root@kafka-01:~# /usr/local/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: 192.168.10.30. Client SSL: false. Mode: follower root@kafka-02:~# /usr/local/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: 192.168.10.31. Client SSL: false. Mode: leader root@kafka-03:~# /usr/local/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: 192.168.10.32. Client SSL: false. Mode: follower
2、安装Kafka软件集群
2.1、下载软件
curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.4.0/kafka_2.13-3.4.0.tgz
2.2、安装软件
2.2.1、解压安装软件
tar xf kafka_2.12-3.4.0.tgz -C /data/server/
ln -s /data/server/kafka_2.12-3.4.0 /usr/local/kafka
2.2.2、配置环境变量
echo "export PATH=/usr/local/kafka/bin:$PATH" >/etc/profile.d/kafka.sh source /etc/profile.d/kafka.sh
2.3、配置解析
2.3.1、目录结构解析
# tree -L 1 /usr/local/kafka/ /usr/local/kafka/ ├── LICENSE ├── NOTICE ├── bin # kafka脚本文件 ├── config # 配置文件目录 ├── libs # 库文件 ├── licenses └── site-docs
2.3.2、配置文件目录解析
# tree /usr/local/kafka/config/ /usr/local/kafka/config/ ├── connect-console-sink.properties ├── connect-console-source.properties ├── connect-distributed.properties ├── connect-file-sink.properties ├── connect-file-source.properties ├── connect-log4j.properties ├── connect-mirror-maker.properties ├── connect-standalone.properties ├── consumer.properties ├── kraft │ ├── broker.properties │ ├── controller.properties │ └── server.properties ├── log4j.properties ├── producer.properties ├── server.properties # 核心的配置文件 ├── tools-log4j.properties ├── trogdor.conf └── zookeeper.properties # Kafka内带的zk集群配置,不推荐
2.3.3、配置server.properties属性解析
# grep -Ev '^#|^$' /usr/local/kafka/config/server.properties broker.id=0 # 主机唯一标识,如果有配套zk集群的话,推荐与myid一致 #listeners=PLAINTEXT://:9092 # kafka服务器监听的端口 num.network.threads=3 # borker进行网络处理的线程数 num.io.threads=8 # borker进行I/O处理的线程数 socket.send.buffer.bytes=102400 # 发送缓冲区buffer大小 socket.receive.buffer.bytes=102400 # 接收缓冲区buffer大小 socket.request.max.bytes=104857600 # kafka消息请求处理的最大数,不要超过java的堆栈大小 log.dirs=/tmp/kafka-logs # 消息存放的目录,多目录间用逗号隔开,小于num.io.threads num.partitions=1 # 默认的分区数,一个topic默认1个分区数 num.recovery.threads.per.data.dir=1 # 数据目录用来日志恢复的线程数目 offsets.topic.replication.factor=1 # 配置offset记录的topic的partition的副本个数 transaction.state.log.replication.factor=1 # 事务topic的复制个数 transaction.state.log.min.isr=1 # default.replication.factor=2 # 默认的备份的复制自动创建topics的个数 log.segment.bytes=1073741824 # 日志文件的最大容量,1G log.retention.hours=168 # 默认消息的最大持久化时间,168小时,7天 log.retention.check.interval.ms=300000 # 日志间隔检查的时间300000毫秒 zookeeper.connect=localhost:2181 # 设置zookeeper的连接端口,多个地址间使用逗号隔开 zookeeper.connection.timeout.ms=18000 # 设置zookeeper的连接超时时间 group.initial.rebalance.delay.ms=0
2.4、修改Kafka的配置
2.4.1、创建日志目录
mkdir /usr/local/kafka/logs
2.4.2、【kafka-01】修改配置server.properties
kafka-01:~# grep -i '^[a-Z]' /usr/local/kafka/config/server.properties broker.id=1 listeners=PLAINTEXT://192.168.10.30: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=/usr/local/kafka/logs num.partitions=3 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=3 transaction.state.log.replication.factor=3 transaction.state.log.min.isr=2 log.retention.hours=168 log.retention.check.interval.ms=300000 zookeeper.connect=192.168.10.32:2181,192.168.10.31:2181,192.168.10.30:2181 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0
2.4.3、【kafka-02】修改配置server.properties
kafka-02:~# grep -i '^[a-Z]' /usr/local/kafka/config/server.properties broker.id=2 listeners=PLAINTEXT://192.168.10.31: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=/usr/local/kafka/logs num.partitions=3 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=3 transaction.state.log.replication.factor=3 transaction.state.log.min.isr=2 log.retention.hours=168 log.retention.check.interval.ms=300000 zookeeper.connect=192.168.10.32:2181,192.168.10.31:2181,192.168.10.30:2181 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0
2.4.4、【kafka-03】修改配置server.properties
kafka-03:~# grep -i '^[a-Z]' /usr/local/kafka/config/server.properties broker.id=3 listeners=PLAINTEXT://192.168.10.32: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=/usr/local/kafka/logs num.partitions=3 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=3 transaction.state.log.replication.factor=3 transaction.state.log.min.isr=2 log.retention.hours=168 log.retention.check.interval.ms=300000 zookeeper.connect=192.168.10.32:2181,192.168.10.31:2181,192.168.10.30:2181 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0
2.5、启动kafka程序
2.5.1、前台启动
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
2.5.2、后台启动
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
2.5.3、关闭程序
/usr/local/kafka/bin/kafka-server-stop.sh /usr/local/kafka/config/server.properties
2.5.4、systemd编写
cat <<'CAT_END' > /lib/systemd/system/kafka.service [Unit] Description=Apache kafka After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/local/java ExecStart=/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh -daemon /usr/local/kafka/config/server.properties ExecRestart=/usr/local/kafka/bin/kafka-server-stop.sh -daemon /usr/local/kafka/config/server.properties && \ /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties Restart=always RestartSec=20 [Install] WantedBy=multi-user.target CAT_END systemctl daemon-reload systemctl start kafka systemctl enable kafka
2.6、检查效果
kafka-01:~# ss -tunlp | grep 9092 tcp LISTEN 0 50 [::ffff:192.168.10.30]:9092 *:* users:(("java",pid=107842,fd=134)) kafka-02:~# ss -tunlp | grep 9092 tcp LISTEN 0 50 [::ffff:192.168.10.31]:9092 *:* users:(("java",pid=570054,fd=134)) kafka-03:~# ss -tunlp | grep 9092 tcp LISTEN 0 50 [::ffff:192.168.10.32]:9092 *:* users:(("java",pid=569711,fd=134)) kafka-01:~# jps 107842 Kafka 106869 QuorumPeerMain 107928 Jps kafka-02:~# jps 569544 QuorumPeerMain 570148 Jps 570054 Kafka kafka-03:~# jps 569816 Jps 569711 Kafka 569252 QuorumPeerMain