一、环境准备
本地安装测试:三台主机:192.168.10.110,192.168.10.120,192.168.10.130
1、下载安装包
这里使用的是3.7.1版本的Kafka安装包,以及jdk-17的环境配置
kafka安装包:https://downloads.apache.org/kafka/3.7.1/kafka_2.13-3.7.1.tgz
jdk-17安装包:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
2、安装jdk-17
这里定义的Kafka以及jdk的安装位置统一为 /root/chen
创建路径并解压缩安装包,所有节点相同操作。
tar -xf jdk-17_linux-x64_bin.tar.gz -C chen
配置环境,使其生效
vim .bash_profile
JAVA_HOME=/root/chen/jdk-17.0.12
PATH=$PATH:$JAVA_HOME/bin:$HOME/.local/bin:$HOME/bin
export PATH
运行并验证
source .bash_profile
java -version
3、调整系统参数
vim /etc/sysctl.conf
设置为系统支持的最大容量
vm.max_map_count=655360
启动生效
sysctl -p
二、安装Kafka集群
kraft模式中,controller角色替代了zookeeper的功能。正常是使用多台主机作为controller角色,这里方便测验,使用一台节点。
1、安装controller节点
(1)解压安装包到指定的位置
tar -xf kafka_2.13-3.7.1.tgz -C chen/
(2)创建目录
创建数据文件目录
mkdir -p chen/kafka-data
创建日志目录
mkdir -p chen/kafka-logs
(3)修改配置文件部署
#controller节点,修改controller.properties配置文件,broker节点,修改broker.properties文件
vim chen/kafka_2.13-3.7.1/config/kraft/controller.properties
修改以下配置项
#controller节点,broker节点,修改为broker
process.roles=controller
#集群id号,同一个集群中,不同机器的id号不同
node.id=1
#contrler节点的IP+端口
controller.quorum.voters=1@192.168.10.130:9093
controller.listener.names=CONTROLLER
#处理服务进出网络通信的线程数,一般设置为CPU的一半
num.network.threads=3
num.io.threads=8
log.dirs=/root/chen/kafka-data
#分片为2,一般依据broker节点数据进行设计的
num.partitions=2
#日志恢复线程数量,broker启动或者分片重新分片时,需要对存储的日志进行恢复以确保数据的一致性。这个过程可能包括检查日志文件、重建索引等操作。
num.recovery.threads.per.data.dir=2
#设置为1意味着这个主题只有一个副本。这会提高写入性能,因为不需要等待其他副本确认,但同时也会降低容错性,如果唯一的副本丢失,那么所有消费者的偏移量信息也将丢失。
offsets.topic.replication.factor=1
#禁止了自动领导者的再平衡过程。
auto.leader.rebalance.enable=false
#不允许非干净的领导人选举,避免在某些极端情况下出现数据丢失的情况。但是,这也可能导致在没有合适候选者的情况下分区变得不可用。
unclean.leader.election.enable=false
#允许通过命令行工具或API删除主题。
delete.topic.enable=true
#允许Kafka自动创建主题。
auto.create.topics.enable=true
#日志数据存储时间(小时)
log.retention.hours=168
(4)修改JVM参数
vim chen/kafka_2.13-3.7.1/bin/kafka-server-start.sh
# 定位到 KAFKA_HEAP_OPTS,添加if中的两行,依据服务性能进行设置相应的JVM参数
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
export JMX_PORT="9999"
fi
(5)修改Kafka日志目录
vim chen/kafka_2.13-3.7.1/bin/kafka-run-class.sh
# 定位到LOG_DIR,添加一行配置 第187行添加
LOG_DIR=/root/chen/kafka-logs
# 修改日志级别,都设置为WARN
vim chen/kafka_2.13-3.7.1/config/log4j.properties
log4j.rootLogger=WARN, stdout, kafkaAppender
(5)生成UUID
只需要在一台机器上执行就可以了
cd chen/kafka_2.13-3.7.1/bin/
./kafka-storage.sh random-uuid
(6)格式化存储路径(所有节点)
#controller节点
./kafka-storage.sh format -t tr36QtmQQySGKnA9HDRbDA -c ../config/kraft/controller.properties
#broker节点
./kafka-storage.sh format -t tr36QtmQQySGKnA9HDRbDA -c ../config/kraft/broker.properties
(7)服务启动
#controller节点
./kafka-server-start.sh -daemon ../config/kraft/controller.properties
#broker节点
./kafka-server-start.sh -daemon ../config/kraft/broker.properties
(8)查看集群信息
在controller节点上进行查看
./kafka-metadata-quorum.sh --bootstrap-controller 192.168.10.130:9093 describe --status
创建topic,生产数据并进行消费测试
./kafka-console-producer.sh --broker-list 192.168.10.120:9092 --topic test
消费测试
./kafka-console-consumer.sh --bootstrap-server 192.168.10.120:9092 --topic test
./kafka-topics.sh --bootstrap-server 192.168.10.120:9092 --describe --topic test