一、基础环境准备
安装Java环境
Kafka依赖Java运行,推荐使用OpenJDK 11(兼容性更好),安装命令:
sudo apt update && sudo apt install openjdk-11-jdk -y
验证安装:java -version(需显示Java版本信息)。
下载并解压Kafka
从Apache官网下载最新稳定版本(如3.7.0),解压至/opt目录(便于系统管理):
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz -C /opt
sudo mv /opt/kafka_2.13-3.7.0 /opt/kafka
配置Zookeeper
Kafka 2.8+版本仍需Zookeeper管理元数据(后续可升级至Kafka Raft模式),配置步骤:
sudo mkdir -p /opt/zookeeper/data/opt/zookeeper/conf/zoo.cfg,添加:dataDir=/opt/zookeeper/data
clientPort=2181
tickTime=2000
initLimit=10
syncLimit=5
server.0=localhost:2888:3888 # 单机模式无需多节点,但需保留此配置
/opt/zookeeper/bin/zkServer.sh start/opt/zookeeper/bin/zkServer.sh status(需显示“Mode: standalone”)。二、Kafka Broker核心配置(server.properties)
编辑/opt/kafka/config/server.properties,调整以下关键参数:
broker.id=0(集群中唯一,单机模式设为0)。listeners=PLAINTEXT://:9092(本地测试用PLAINTEXT;生产环境建议用SSL/TLS加密)。log.dirs=/opt/kafka/logs(需提前创建,建议使用独立磁盘,提升I/O性能)。zookeeper.connect=localhost:2181(集群模式需填写所有Zookeeper节点地址,如host1:2181,host2:2181)。num.network.threads=8(网络线程数,建议设置为CPU核数的1~2倍)。num.io.threads=16(I/O线程数,建议设置为CPU核数的2~4倍,处理磁盘读写)。log.flush.interval.messages=10000(每累积1万条消息刷盘一次,平衡性能与数据安全性)。log.flush.interval.ms=1000(每1秒刷盘一次,避免频繁IO)。log.retention.hours=168(日志保留7天,根据业务需求调整,如168小时=7天)。default.replication.factor=1(单机模式设为1;生产环境建议设为3,保证数据冗余)。三、性能优化关键措施
操作系统层优化
/etc/fstab,为Kafka日志目录添加noatime(禁用访问时间更新,减少写操作):/dev/sdb1 /opt/kafka ext4 defaults,noatime 0 2
sudo mkfs.xfs /dev/sdb1。swappiness=1(减少内存交换,避免因swap导致的性能下降):echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo 'vm.dirty_ratio=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.dirty_background_ratio=5' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
JVM层优化
/opt/kafka/bin/kafka-server-start.sh,在exec前添加:export KAFKA_HEAP_OPTS="-Xms6G -Xmx6G"
export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"
Kafka Broker参数优化
num.network.threads=6 # 网络线程数=CPU核数+1
num.io.threads=12 # I/O线程数=CPU核数*2
num.partitions=8),提高并行处理能力;副本因子设为3(default.replication.factor=3),保证数据可靠性。batch.size=131072=128KB),减少网络请求次数;启用LZ4压缩(compression.type=lz4),降低带宽占用。四、开机自启配置
创建Systemd服务文件
编辑/etc/systemd/system/kafka.service:
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service
Requires=zookeeper.service
[Service]
Type=simple
Environment="KAFKA_HOME=/opt/kafka"
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
ExecStart=${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties
ExecStop=${KAFKA_HOME}/bin/kafka-server-stop.sh
User=kafka
Group=kafka
Restart=on-failure
[Install]
WantedBy=multi-user.target
创建Zookeeper Systemd服务文件
编辑/etc/systemd/system/zookeeper.service:
[Unit]
Description=Apache ZooKeeper Server
After=network.target
[Service]
Type=forking
Environment="ZOOKEEPER_HOME=/opt/zookeeper"
ExecStart=${ZOOKEEPER_HOME}/bin/zkServer.sh start
ExecStop=${ZOOKEEPER_HOME}/bin/zkServer.sh stop
User=zookeeper
Group=zookeeper
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable zookeeper kafka
sudo systemctl start zookeeper kafka
五、验证配置
创建Topic
/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 8 --replication-factor 1
测试生产与消费
/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092/opt/kafka/bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning