Ubuntu系统下单机Kafka部署全攻略

一、环境准备与前置条件

1.1 系统环境要求

Ubuntu系统建议选择LTS版本(如22.04或20.04),其稳定性经过长期验证。需确保系统已更新至最新状态:

  1. sudo apt update && sudo apt upgrade -y

系统资源方面,Kafka对内存和磁盘I/O敏感。单机环境建议配置4GB以上内存,推荐使用SSD存储。通过free -hdf -h命令可查看当前资源状态。

1.2 Java环境安装

Kafka依赖Java运行环境,推荐安装OpenJDK 11或17版本。安装命令如下:

  1. sudo apt install openjdk-11-jdk -y

验证安装结果:

  1. java -version
  2. # 应输出类似:openjdk version "11.0.20" 2023-07-18

配置JAVA_HOME环境变量(可选但推荐):

  1. echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc
  2. source ~/.bashrc

1.3 Zookeeper集成选择

Kafka 2.8.0起支持KRaft协议(无需Zookeeper),但生产环境建议仍使用Zookeeper。本指南采用传统Zookeeper模式部署。

二、Kafka核心组件安装

2.1 下载与解压

从Apache官网获取最新稳定版(如3.6.1):

  1. wget https://dlcdn.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
  2. tar -xzf kafka_*.tgz
  3. mv kafka_2.13-3.6.1 /opt/kafka

2.2 配置文件优化

编辑/opt/kafka/config/server.properties,关键参数调整:

  1. # 监听地址(0.0.0.0允许远程访问)
  2. listeners=PLAINTEXT://:9092
  3. advertised.listeners=PLAINTEXT://<服务器IP>:9092
  4. # 日志存储配置
  5. log.dirs=/var/lib/kafka/logs
  6. num.partitions=3
  7. # 内存优化(根据服务器内存调整)
  8. num.io.threads=8
  9. num.network.threads=3
  10. socket.send.buffer.bytes=102400
  11. socket.receive.buffer.bytes=102400
  12. socket.request.max.bytes=104857600

2.3 创建系统服务(可选)

创建/etc/systemd/system/kafka.service

  1. [Unit]
  2. Description=Apache Kafka Server
  3. After=network.target
  4. [Service]
  5. Type=simple
  6. User=root
  7. ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
  8. ExecStop=/opt/kafka/bin/kafka-server-stop.sh
  9. Restart=on-failure
  10. [Install]
  11. WantedBy=multi-user.target

启用服务:

  1. sudo systemctl daemon-reload
  2. sudo systemctl enable kafka
  3. sudo systemctl start kafka

三、验证部署与基础操作

3.1 基础命令测试

创建测试主题:

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

生产者测试:

  1. /opt/kafka/bin/kafka-console-producer.sh \
  2. --topic test-topic \
  3. --bootstrap-server localhost:9092
  4. # 输入测试消息

消费者测试:

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

3.2 性能调优建议

  • JVM调优:编辑/opt/kafka/bin/kafka-run-class.sh,调整KAFKA_HEAP_OPTS
    1. export KAFKA_HEAP_OPTS="-Xms1G -Xmx1G"
  • 日志保留策略
    1. log.retention.hours=168
    2. log.segment.bytes=1073741824
  • 网络优化:对于高并发场景,调整socket.request.max.bytesnum.network.threads

四、常见问题解决方案

4.1 端口冲突处理

若9092端口被占用,使用netstat -tulnp | grep 9092定位进程,修改server.properties中的listenersadvertised.listeners为其他端口(如9093)。

4.2 日志目录权限问题

确保Kafka进程用户有写入权限:

  1. sudo chown -R root:root /var/lib/kafka/
  2. sudo chmod -R 755 /var/lib/kafka/

4.3 内存不足错误

若出现java.lang.OutOfMemoryError,需:

  1. 增大JVM堆内存(如-Xmx2G
  2. 检查num.io.threads是否超过CPU核心数
  3. 优化log.segment.bytes减少磁盘I/O压力

五、运维管理最佳实践

5.1 监控指标收集

通过JMX暴露指标,配置Prometheus+Grafana监控:

  1. # 在server.properties中添加
  2. export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote \
  3. -Dcom.sun.management.jmxremote.port=9999 \
  4. -Dcom.sun.management.jmxremote.authenticate=false \
  5. -Dcom.sun.management.jmxremote.ssl=false"

5.2 定期维护任务

  • 日志滚动:设置log.retention.check.interval.ms=300000(5分钟检查一次)
  • 主题清理:使用kafka-topics.sh --delete删除无用主题
  • 备份策略:定期备份/var/lib/kafka/目录

5.3 安全加固建议

  • 启用SSL加密:
    1. listeners=SSL://:9093
    2. ssl.keystore.location=/path/to/keystore.jks
    3. ssl.keystore.password=yourpassword
  • 配置ACL权限控制
  • 限制客户端IP访问

六、升级与扩展指南

6.1 版本升级流程

  1. 下载新版本并解压至新目录
  2. 停止旧服务:systemctl stop kafka
  3. 备份配置文件和数据目录
  4. 启动新版本:systemctl start kafka
  5. 验证主题兼容性:kafka-topics.sh --describe --bootstrap-server localhost:9092

6.2 扩展为集群

若需扩展为集群,需:

  1. 修改broker.id为唯一值
  2. 配置zookeeper.connect指向Zookeeper集群
  3. 调整replication.factor为3(生产环境推荐)
  4. 使用kafka-reassign-partitions.sh重新分配分区

通过以上步骤,您可在Ubuntu系统上完成Kafka单机环境的完整部署。实际生产环境中,建议结合监控系统、备份策略和安全加固措施,构建高可用的消息中间件平台。