安装Java环境
Kafka依赖Java运行,推荐使用OpenJDK 11及以上版本:
sudo apt update && sudo apt install openjdk-11-jdk -y
java -version # 验证安装(需显示11.x版本)
安装Zookeeper
Kafka需Zookeeper管理集群元数据,建议使用独立节点或Kafka内置的KRaft模式(新版本推荐):
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xzvf apache-zookeeper-3.7.0-bin.tar.gz
sudo mv apache-zookeeper-3.7.0 /opt/zookeeper
# 配置zoo.cfg(/opt/zookeeper/conf/zoo.cfg)
echo "dataDir=/opt/zookeeper/data
clientPort=2181" | sudo tee /opt/zookeeper/conf/zoo.cfg
/opt/zookeeper/bin/zkServer.sh start # 启动Zookeeper
下载并解压Kafka
从官网下载最新稳定版(如3.7.0),解压至指定目录:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzvf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 /opt/kafka
分区与并行处理
增加分区数(num.partitions)以提升并行处理能力,建议设置为消费者线程数的1.5~2倍:
num.partitions=8 # 根据业务需求调整
线程池优化
调整网络I/O线程(num.network.threads)和磁盘I/O线程(num.io.threads),匹配服务器CPU核心数:
num.network.threads=8 # 建议为CPU核心数的1~1.5倍
num.io.threads=16 # 建议为CPU核心数的2倍(Kafka依赖顺序I/O)
日志管理
log.segment.bytes)以减少分段数量,降低索引开销:log.segment.bytes=1073741824 # 1GB(默认1GB,可根据磁盘容量调整)
log.retention.hours),避免磁盘空间浪费:log.retention.hours=168 # 7天(根据数据重要性调整)
压缩与批量处理
启用压缩(compression.type)减少网络传输量,调整生产者批处理参数(batch.size、linger.ms)提升吞吐量:
compression.type=lz4 # 推荐LZ4(低延迟)或Snappy(高吞吐)
batch.size=1048576 # 1MB(增大批处理大小,减少请求次数)
linger.ms=100 # 等待100ms再发送,合并更多消息
compression.type=lz4 # 启用压缩
acks=all # 确保数据可靠性(所有副本确认)
buffer.memory=33554432 # 32MB(增加生产者缓冲区大小)
fetch.min.bytes=1048576 # 1MB(每次拉取最小数据量,减少请求次数)
fetch.max.wait.ms=1000 # 最多等待1秒,平衡延迟与吞吐
max.poll.records=200 # 每次poll最多拉取200条(避免内存溢出)
group.initial.rebalance.delay.ms=3000 # 消费者组初始再平衡延迟3秒
文件描述符限制
Kafka需处理大量并发连接,需增大文件描述符限制:
echo "* soft nofile 100000
* hard nofile 100000" | sudo tee -a /etc/security/limits.conf
ulimit -n 100000 # 立即生效
内核参数优化
调整TCP/IP堆栈和虚拟内存参数,提升网络与I/O性能:
# 增加TCP缓冲区大小
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
# 启用TCP快速回收
sysctl -w net.ipv4.tcp_tw_reuse=1
# 减少SWAP使用(Kafka依赖内存)
sysctl -w vm.swappiness=1
# 增加系统最大映射地址空间
sysctl -w vm.max_map_count=262144
# 永久生效:将上述命令添加至/etc/sysctl.conf
挂载选项优化
若使用SSD,修改挂载选项以提升性能(如noatime禁用访问时间更新):
sudo mount -o remount,noatime /opt/kafka/logs # 替换为实际日志目录
-Xms8G -Xmx8G,避免超过物理内存的70%)。监控工具
使用Prometheus+Grafana监控Kafka集群的关键指标(如UnderReplicatedPartitions未同步分区数、RequestQueueTimeMs请求队列时间、BytesInPerSec网络入流量),及时发现性能瓶颈。
日志管理
配置日志轮转(如logrotate),避免日志文件过大占用磁盘空间:
sudo nano /etc/logrotate.d/kafka
# 添加以下内容
/opt/kafka/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
}
定期维护
df -h),确保剩余空间大于20%。kafka-log-dirs工具或调整log.retention.hours)。通过以上配置,可在Ubuntu环境下充分发挥Kafka的高吞吐、低延迟特性,满足大规模分布式数据处理需求。需根据实际业务场景(如数据量、并发量)调整参数,并通过监控工具持续优化。