Ubuntu系统下单机Kafka的完整部署指南

一、环境准备与系统要求

1.1 操作系统兼容性验证

Kafka 3.6.0版本要求Ubuntu 20.04 LTS或更高版本,可通过lsb_release -a命令验证系统版本。建议使用LTS版本以获得长期支持,避免因系统更新导致的兼容性问题。

1.2 Java运行环境配置

Kafka依赖Java 11或更高版本,推荐使用OpenJDK。安装步骤如下:

  1. # 安装OpenJDK 17
  2. sudo apt update
  3. sudo apt install openjdk-17-jdk -y
  4. # 验证安装
  5. java -version
  6. # 应输出:openjdk version "17.0.x" 202x-xx-xx

设置JAVA_HOME环境变量,编辑~/.bashrc文件末尾添加:

  1. export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
  2. export PATH=$PATH:$JAVA_HOME/bin

执行source ~/.bashrc使配置生效。

1.3 依赖库安装

Kafka需要Zookeeper进行元数据管理,但3.6.0版本已内置Kraft模式(无需Zookeeper)。如需传统模式,需安装:

  1. sudo apt install zookeeperd -y

推荐使用Kraft模式简化部署,本文后续步骤均基于此模式。

二、Kafka二进制包安装与配置

2.1 下载与解压

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

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

2.2 Kraft模式配置

编辑/opt/kafka/config/kraft/server.properties,关键参数说明:

  1. # 监听地址与端口
  2. listeners=PLAINTEXT://:9092
  3. advertised.listeners=PLAINTEXT://localhost:9092
  4. # 存储目录(需存在)
  5. log.dirs=/tmp/kafka-logs
  6. # 进程ID文件路径
  7. process.roles=broker
  8. node.id=1
  9. controller.quorum.voters=1@localhost:9093

创建日志目录:

  1. sudo mkdir -p /tmp/kafka-logs
  2. sudo chown -R $(whoami):$(whoami) /tmp/kafka-logs

2.3 初始化集群ID(仅首次需要)

  1. cd /opt/kafka
  2. bin/kafka-storage.sh format --cluster-id kafka-cluster-1 --config config/kraft/server.properties

注意:集群ID需全局唯一,生产环境建议通过UUID生成。

三、服务启动与验证

3.1 启动Kafka服务

  1. # 后台启动(推荐)
  2. bin/kafka-server-start.sh -daemon config/kraft/server.properties
  3. # 前台启动(调试用)
  4. # bin/kafka-server-start.sh config/kraft/server.properties

验证进程状态:

  1. ps aux | grep kafka
  2. # 应显示kafka-server-start.sh进程

3.2 创建测试主题

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

3.3 生产消费测试

启动生产者发送消息:

  1. bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
  2. # 输入任意文本后按Ctrl+D退出

启动消费者接收消息:

  1. bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092

四、运维管理操作

4.1 服务状态检查

  1. # 检查端口监听
  2. netstat -tulnp | grep 9092
  3. # 查看日志
  4. tail -f /tmp/kafka-logs/controller.log

4.2 配置动态更新

部分参数支持动态修改,无需重启:

  1. bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --entity-name 1 --alter --add-config num.network.threads=4

4.3 安全加固建议

  • 修改默认端口(9092)
  • 启用SASL认证:
    1. # server.properties中添加
    2. sasl.enabled.mechanisms=SCRAM-SHA-256
    3. security.inter.broker.protocol=SASL_PLAINTEXT
  • 创建JAAS配置文件/opt/kafka/config/jaas.conf
    1. KafkaServer {
    2. org.apache.kafka.common.security.scram.ScramLoginModule required
    3. username="admin"
    4. password="admin-secret";
    5. };

    启动时指定配置:

    1. export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"
    2. bin/kafka-server-start.sh config/kraft/server.properties

五、常见问题解决方案

5.1 端口冲突处理

若9092端口被占用,修改server.properties中的listenersadvertised.listeners参数,例如:

  1. listeners=PLAINTEXT://:9093
  2. advertised.listeners=PLAINTEXT://localhost:9093

5.2 日志目录权限错误

出现Permission denied时,确保运行用户对日志目录有读写权限:

  1. sudo chown -R $(whoami):$(whoami) /tmp/kafka-logs

5.3 内存不足优化

默认JVM堆内存为1GB,如需调整编辑bin/kafka-server-start.sh

  1. export KAFKA_HEAP_OPTS="-Xms512m -Xmx1g"

生产环境建议根据服务器配置调整至4-8GB。

六、升级与维护

6.1 版本升级流程

  1. 停止服务:
    1. bin/kafka-server-stop.sh
  2. 备份配置文件和数据目录
  3. 下载新版本并解压
  4. 迁移配置文件
  5. 启动新版本服务

6.2 监控指标收集

启用JMX监控(端口9999):

  1. # server.properties中添加
  2. jmx.port=9999

使用Prometheus+Grafana监控方案:

  1. wget https://github.com/prometheus/jmx_exporter/releases/download/v0.18.0/jmx_prometheus_javaagent-0.18.0.jar
  2. # 创建配置文件kafka-metrics.yml
  3. # 启动时添加参数:
  4. export KAFKA_OPTS="-javaagent:/path/to/jmx_prometheus_javaagent-0.18.0.jar=9999:/path/to/kafka-metrics.yml"

通过以上步骤,您已在Ubuntu系统上成功部署了单机版Kafka服务。该配置适用于开发测试环境,生产环境需考虑集群部署、高可用配置及更严格的安全策略。建议定期备份元数据(/tmp/kafka-logs/meta.properties)并监控磁盘空间使用情况。