1. 环境准备:从零搭建Kafka单机环境
第一次接触Kafka的朋友可能会被它的分布式架构吓到,但其实单机部署非常简单。我在帮团队搭建测试环境时发现,只要掌握几个关键点,10分钟就能跑起来。先说说硬件要求,虽然官方文档列了一堆配置,但实测下来,我的老款MacBook Pro(16GB内存)跑单机版完全够用。
系统依赖这块需要特别注意版本匹配问题。上周有个同事在CentOS 7上装Kafka 3.6.0,死活启动不了,最后发现是JDK版本太旧。这里给个避坑指南:
- Kafka 2.8+必须用JDK11+
- 如果要用内置ZooKeeper(推荐新手使用),记得检查
/tmp目录权限 - 磁盘空间别看默认只保留7天日志,压力测试时1小时就能吃掉10GB
安装前的检查清单:
# 检查Java版本(关键步骤!) java -version # 检查防火墙状态(开发环境建议直接关闭) systemctl status firewalld # 创建专用用户(避免用root运行) useradd -m kafka passwd kafka我习惯把Kafka装在/opt目录下,这样多个版本并存时不会混乱。记得给目录赋权:
chown -R kafka:kafka /opt/kafka这个小细节能避免80%的权限报错,特别是日志写入失败的问题。
2. 安装与目录结构解析
下载Kafka时有个坑要注意:官网提供了Scala 2.12和2.13两个版本。我建议选2.13版本,因为新版本性能优化更充分。上次做压测时,2.13版本吞吐量比2.12高了15%左右。
解压后的目录看着有点复杂,其实日常只用关注三个文件夹:
bin/:这里面的脚本我基本都用过一遍,最常用的是带.sh后缀的config/:改配置前一定要备份!有次我把server.properties改崩了,幸好有备份logs/:出问题时第一个要看的地方
这里分享一个实用技巧:把bin目录加入PATH环境变量
echo 'export PATH=$PATH:/opt/kafka/bin' >> ~/.bashrc source ~/.bashrc这样以后就能直接运行kafka-topics.sh这种长命令了。我在团队内部文档里把这个列为必做步骤,新手反馈说方便了很多。
3. 关键配置调优实战
第一次配Kafka时,我被server.properties里上百个参数吓到了。其实单机环境只需要改这几个核心参数:
# 监听地址(改成实际IP,别用localhost!) listeners=PLAINTEXT://192.168.1.100:9092 # 这个参数新手最容易忽略 advertised.listeners=PLAINTEXT://192.168.1.100:9092 # 日志目录(多个路径用逗号分隔) log.dirs=/data/kafka-logs # 分区数(根据CPU核心数调整) num.partitions=4性能调优这块我踩过不少坑。最初以为线程数越多越好,结果把num.network.threads调到16,性能反而下降了。后来发现个经验公式:
- 网络线程数 = CPU核心数
- IO线程数 = CPU核心数 × 2
- 分区数 = CPU核心数 × 1.5
对于4核机器,我的推荐配置是:
num.network.threads=4 num.io.threads=8 num.partitions=64. 服务验证与压测技巧
启动服务时建议开两个终端窗口,先启动ZooKeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties看到"binding to port 2181"就说明成功了。再启动Kafka:
bin/kafka-server-start.sh config/server.properties验证服务是否正常,我有个私藏的命令组合:
# 创建topic kafka-topics.sh --create --topic test-topic --partitions 3 --replication-factor 1 # 实时监控消息量 kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test-topic --time -1压测推荐用自带的kafka-producer-perf-test.sh工具。这是我常用的参数组合:
bin/kafka-producer-perf-test.sh \ --topic test-topic \ --num-records 1000000 \ --record-size 1024 \ --throughput -1 \ --producer-props bootstrap.servers=localhost:9092 \ --print-metrics注意观察"records-per-second"和"mb/sec"两个指标,正常情况8核机器应该能达到10w+/s的写入速度。
5. 常见问题排查手册
问题1:生产者连不上症状:卡在"Connecting to bootstrap.servers" 解决方法:
- 检查
listeners和advertised.listeners配置 - 用telnet测试端口连通性
- 查看服务端日志有无报错
问题2:磁盘IO瓶颈症状:生产者延迟突然升高 解决方法:
# 监控磁盘IO iostat -x 1 # 如果有%util持续>90%,考虑: # 1. 增加log.dirs目录 # 2. 调整num.io.threads # 3. 换SSD硬盘问题3:消息堆积症状:消费者延迟严重 我的处理流程:
- 先用
kafka-consumer-groups.sh查看lag - 调整消费者并发度
- 考虑增加分区数(注意:这会触发rebalance)
最后分享个监控小技巧:定期清理__consumer_offsets这个内部topic。有次它涨到20GB,导致整个集群变慢。现在我会设置定时任务每月清理一次。