一、单机Kafka部署的适用场景与优势
单机Kafka部署通常适用于开发测试环境、小型项目或资源受限的边缘计算场景。相比集群部署,单机模式具有以下显著优势:
- 资源占用低:无需多节点协调,仅需单台服务器即可运行,特别适合预算有限的团队或个人开发者。
- 部署简单:省去ZooKeeper集群配置、Broker间通信等复杂环节,安装配置时间可缩短至10分钟内。
- 故障排查容易:所有组件集中在一台机器,日志和监控数据集中,便于快速定位问题。
- 开发效率高:开发者可在本地环境模拟生产环境行为,无需依赖远程集群。
典型应用场景包括:本地开发测试、CI/CD流水线集成测试、小型数据采集系统、物联网设备数据暂存等。但需注意,单机模式不具备高可用性,不适合生产环境的关键业务。
二、环境准备与依赖安装
2.1 硬件要求
- CPU:建议4核及以上(开发环境2核可满足基本需求)
- 内存:8GB以上(Kafka进程默认占用1GB,需预留内存给操作系统和OS缓存)
- 磁盘:SSD优先,容量根据数据量规划(建议至少100GB)
- 网络:千兆网卡,确保本地回环网络稳定
2.2 软件依赖
Java环境
Kafka依赖Java运行环境,推荐使用OpenJDK 11或Oracle JDK 11:
# Ubuntu示例sudo apt updatesudo apt install openjdk-11-jdkjava -version # 应输出11.x版本
ZooKeeper(可选)
Kafka 2.8+版本支持KRaft模式(无需ZooKeeper),但传统模式仍需ZooKeeper:
# 下载ZooKeeper 3.7.0wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gztar -xzf apache-zookeeper-3.7.0-bin.tar.gzcd apache-zookeeper-3.7.0-bincp conf/zoo_sample.cfg conf/zoo.cfgbin/zkServer.sh start # 启动ZooKeeper
三、Kafka安装与配置
3.1 下载与解压
# 下载Kafka 3.6.0wget https://archive.apache.org/dist/kafka/3.6.0/kafka-3.6.0-src.tgztar -xzf kafka-3.6.0-src.tgzcd kafka-3.6.0
3.2 核心配置文件修改
编辑config/server.properties,关键配置项如下:
# 基础配置broker.id=0 # 单机模式必须为0listeners=PLAINTEXT://:9092 # 监听地址advertised.listeners=PLAINTEXT://localhost:9092 # 对外暴露地址# 日志存储配置log.dirs=/tmp/kafka-logs # 日志目录(建议修改为持久化路径)num.partitions=3 # 默认分区数log.retention.hours=168 # 消息保留时间(7天)# 内存配置(根据机器调整)num.io.threads=8 # I/O线程数num.network.threads=3 # 网络线程数socket.send.buffer.bytes=102400socket.receive.buffer.bytes=102400socket.request.max.bytes=104857600# KRaft模式配置(可选)process.roles=broker # 启用KRaft时设置node.id=1 # KRaft节点IDcontroller.quorum.voters=1@localhost:9093 # KRaft控制器选举配置
3.3 启动服务
传统模式(依赖ZooKeeper)
bin/zookeeper-server-start.sh config/zookeeper.properties & # 启动ZooKeeper(如未单独安装)bin/kafka-server-start.sh config/server.properties
KRaft模式(无ZooKeeper)
# 初始化KRaft元数据bin/kafka-storage.sh format --config config/kraft/server.properties --cluster-id kafka-cluster-1# 启动Brokerbin/kafka-server-start.sh config/kraft/server.properties
四、功能验证与测试
4.1 创建测试Topic
bin/kafka-topics.sh --create \--topic test-topic \--bootstrap-server localhost:9092 \--partitions 3 \--replication-factor 1
4.2 生产者/消费者测试
生产消息
bin/kafka-console-producer.sh \--topic test-topic \--bootstrap-server localhost:9092
输入任意文本后按Ctrl+D结束。
消费消息
bin/kafka-console-consumer.sh \--topic test-topic \--from-beginning \--bootstrap-server localhost:9092
4.3 性能测试(可选)
使用Kafka自带的性能测试工具:
# 生产者性能测试bin/kafka-producer-perf-test.sh \--topic perf-test \--num-records 1000000 \--record-size 1000 \--throughput -1 \--producer-props bootstrap.servers=localhost:9092 \--print-metric# 消费者性能测试bin/kafka-consumer-perf-test.sh \--topic perf-test \--bootstrap-server localhost:9092 \--messages 1000000 \--show-detailed-stats
五、生产环境优化建议
5.1 配置调优
- 内存调整:修改
kafka-server-start.sh中的KAFKA_HEAP_OPTS:export KAFKA_HEAP_OPTS="-Xms4g -Xmx4g" # 根据机器内存调整
- 日志保留策略:按时间或大小保留:
log.retention.bytes=1073741824 # 1GBlog.retention.minutes=1440 # 24小时
- GC优化:使用G1垃圾收集器:
kafka.opts=-XX:+UseG1GC -XX:MaxGCPauseMillis=20
5.2 监控集成
-
JMX监控:启动时添加JMX参数:
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
使用JConsole或VisualVM连接9999端口监控。
-
Prometheus+Grafana:通过JMX Exporter暴露指标,配置Grafana看板。
5.3 备份与恢复
- 日志备份:定期备份
log.dirs目录。 -
Topic数据导出:
bin/kafka-run-class.sh kafka.tools.ExportZkOffsets \--zkconnect localhost:2181 \--output-file offsets.txt # 传统模式# KRaft模式使用kafka-dump-log工具bin/kafka-dump-log.sh --files /tmp/kafka-logs/test-topic-0/00000000000000000000.log
六、常见问题解决
-
端口冲突:检查9092端口是否被占用:
netstat -tulnp | grep 9092
-
日志写入失败:检查磁盘空间和权限:
df -h /tmp/kafka-logschmod -R 755 /tmp/kafka-logs
-
KRaft模式启动失败:确保
cluster-id一致,删除/tmp/kraft-combined-logs目录后重新格式化。 -
消费者滞后:监控
consumer-lag指标,调整fetch.min.bytes和fetch.max.wait.ms参数。
通过以上步骤,您可完成单机Kafka的完整部署并确保其稳定运行。对于生产环境,建议后续迁移至集群模式以获得高可用性保障。