Ubuntu系统下单机Kafka快速部署指南

一、环境准备与前置条件

在部署Kafka之前,需确保Ubuntu系统满足以下条件:

  1. 系统版本要求:推荐Ubuntu 20.04 LTS或更高版本,因其对Java 11+及Zookeeper的兼容性更优。可通过lsb_release -a命令验证系统版本。
  2. Java环境配置:Kafka依赖Java运行环境,需安装OpenJDK 11或更高版本。执行以下命令安装并验证:
    1. sudo apt update
    2. sudo apt install openjdk-11-jdk
    3. java -version # 应输出类似"openjdk version 11.0.20"
  3. 网络与端口配置:确保9092(Kafka默认端口)和2181(Zookeeper默认端口)未被占用。使用netstat -tuln | grep 9092检查端口状态。

二、Kafka与Zookeeper安装

1. 下载与解压

从Apache官方仓库获取最新稳定版Kafka(以3.6.1为例):

  1. wget https://dlcdn.apache.org/kafka/3.6.1/kafka-3.6.1-src.tgz
  2. tar -xzf kafka-3.6.1-src.tgz
  3. mv kafka-3.6.1-src /opt/kafka # 推荐解压至/opt目录

2. 配置Zookeeper(单机模式)

修改/opt/kafka/config/zookeeper.properties文件:

  1. dataDir=/tmp/zookeeper # 数据存储路径
  2. clientPort=2181 # 客户端连接端口
  3. maxClientCnxns=0 # 允许最大连接数(0表示无限制)

关键参数说明

  • dataDir:Zookeeper元数据存储目录,需确保目录存在且权限正确。
  • clientPort:默认2181,若被占用需修改并同步调整Kafka配置。

3. 配置Kafka服务端

编辑/opt/kafka/config/server.properties,重点修改以下参数:

  1. broker.id=0 # 唯一Broker ID(单机模式固定为0)
  2. listeners=PLAINTEXT://:9092 # 监听地址与端口
  3. advertised.listeners=PLAINTEXT://localhost:9092 # 对外暴露地址
  4. log.dirs=/tmp/kafka-logs # 日志存储路径
  5. zookeeper.connect=localhost:2181 # Zookeeper连接地址
  6. num.partitions=3 # 默认分区数(建议根据业务量调整)

配置优化建议

  • 若服务器有多个IP,需将advertised.listeners改为实际IP(如192.168.1.100:9092),避免客户端连接失败。
  • 生产环境建议启用SSL加密(修改listenersSSL://:9093并配置证书)。

三、启动与验证

1. 启动服务

按顺序执行以下命令(后台运行需添加&):

  1. # 启动Zookeeper
  2. /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
  3. # 启动Kafka
  4. /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

启动日志排查:若启动失败,检查/tmp/zookeeper.out/tmp/kafkaServer.out日志文件。

2. 创建测试Topic

  1. /opt/kafka/bin/kafka-topics.sh --create \
  2. --topic test-topic \
  3. --bootstrap-server localhost:9092 \
  4. --partitions 1 \
  5. --replication-factor 1

参数解释

  • --partitions:分区数,影响并行消费能力。
  • --replication-factor:副本数,单机模式只能为1。

3. 生产与消费测试

生产消息

  1. /opt/kafka/bin/kafka-console-producer.sh \
  2. --topic test-topic \
  3. --bootstrap-server localhost:9092

输入任意文本后按Ctrl+D结束。

消费消息

  1. /opt/kafka/bin/kafka-console-consumer.sh \
  2. --topic test-topic \
  3. --from-beginning \
  4. --bootstrap-server localhost:9092

若成功显示之前生产的消息,则部署验证通过。

四、常见问题与解决方案

1. 端口冲突

现象:启动时报错Address already in use
解决

  1. 使用netstat -tuln | grep 9092定位占用进程。
  2. 终止冲突进程或修改Kafka/Zookeeper端口。

2. Java版本不兼容

现象:启动日志显示UnsupportedClassVersionError
解决

  1. 确认Java版本:java -version
  2. 若版本低于11,卸载旧版并安装OpenJDK 11:
    1. sudo apt remove openjdk-8-jdk
    2. sudo apt install openjdk-11-jdk

3. 日志目录权限问题

现象:启动失败且日志显示Permission denied
解决

  1. 修改日志目录权限:
    1. sudo chown -R $(whoami):$(whoami) /tmp/kafka-logs
  2. 或更换有权限的目录(如/home/user/kafka-logs)。

五、生产环境建议

  1. 数据持久化:将log.dirsdataDir配置至独立磁盘,避免系统盘故障导致数据丢失。
  2. 监控集成:通过JMX暴露指标(修改kafka-run-class.sh添加JMX参数),接入Prometheus+Grafana监控。
  3. 备份策略:定期备份Zookeeper元数据(/tmp/zookeeper/version-2目录)和Kafka日志。

六、总结

本文通过分步骤讲解,完成了Ubuntu系统下单机Kafka的部署,涵盖环境准备、配置优化、启动验证及故障排查。开发者可基于此方案快速搭建测试环境,或进一步扩展为集群模式。实际生产中,需结合业务需求调整分区数、副本因子等参数,并完善监控与备份机制。