Skip to content

Kafka 安装

macOS

shell
# Homebrew
brew install kafka

# 启动(KRaft 模式,自动初始化 cluster ID)
kafka-server-start.sh /opt/homebrew/etc/kafka/server.properties

# 或使用 brew services
brew services start kafka

配置文件:/opt/homebrew/etc/kafka/server.properties(Apple Silicon)或 /usr/local/etc/kafka/server.properties(Intel)

Ubuntu / Debian

shell
# 安装 JDK 17+
sudo apt update
sudo apt install -y openjdk-17-jdk

# 下载 Kafka
wget https://dlcdn.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz
tar -xzf kafka_2.13-4.0.0.tgz
sudo mv kafka_2.13-4.0.0 /opt/kafka

# 创建数据目录
sudo mkdir -p /data/kafka
sudo chown -R $USER:$USER /data/kafka /opt/kafka

单节点 KRaft 模式

Kafka 4.0 默认使用 KRaft 模式,无需 ZooKeeper:

shell
# 1. 生成 Cluster UUID
KAFKA_CLUSTER_ID=$(kafka-storage.sh random-uuid)
echo $KAFKA_CLUSTER_ID

# 2. 格式化存储目录
kafka-storage.sh format -t $KAFKA_CLUSTER_ID \
  -c /opt/kafka/config/kraft/server.properties

# 3. 启动 Kafka
kafka-server-start.sh /opt/kafka/config/kraft/server.properties

单节点 KRaft 配置同时担当 Controller 和 Broker 双重角色,用于开发和测试。

Docker

shell
# KRaft 单机运行
docker run -d --name kafka \
  -p 9092:9092 \
  -e KAFKA_NODE_ID=1 \
  -e KAFKA_PROCESS_ROLES="broker,controller" \
  -e KAFKA_CONTROLLER_QUORUM_VOTERS="1@localhost:9093" \
  -e KAFKA_LISTENERS="PLAINTEXT://:9092,CONTROLLER://:9093" \
  -e KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://localhost:9092" \
  -e KAFKA_CONTROLLER_LISTENER_NAMES="CONTROLLER" \
  -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP="CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" \
  apache/kafka:4.0.0
yaml
# docker-compose.yml
version: '3.8'
services:
  kafka:
    image: apache/kafka:4.0.0
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: "broker,controller"
      KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093"
      KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093"
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://localhost:9092"
      KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
    volumes:
      - kafka-data:/var/lib/kafka/data

volumes:
  kafka-data:

验证安装

shell
# 检查 Broker 是否正常运行
kafka-broker-api-versions.sh --bootstrap-server localhost:9092

# 创建测试 Topic
kafka-topics.sh --create --topic test --partitions 3 --replication-factor 1 \
  --bootstrap-server localhost:9092

# 生产测试消息
echo "hello kafka" | kafka-console-producer.sh --topic test \
  --bootstrap-server localhost:9092

# 消费测试消息
kafka-console-consumer.sh --topic test --from-beginning --max-messages 1 \
  --bootstrap-server localhost:9092

参考