Mac M1(ARM) Docker 部署 Kafka 环境

1,171 阅读2分钟

使用 Docker 镜像的方式部署,该方式较为简单,且容易清理

安装 Docker Desktop for Mac

首先,确保已经在 Mac 上安装了 Docker Desktop。可以从 Docker 官方网站下载并安装适用于 Mac 的最新版本

一、使用 Docker 直接部署

按照以下步骤进行操作

拉取镜像

docker pull bitnami/kafka:3.5

启动 Kafka 容器

从 Kafka 3.3.1 开始,可以在生产环境使用 KRaft,该模式不需要依赖 Zookeeper

一般而言,需要持久化数据,否则删除 Kafka 容器后,数据就丢失了,假设本地目录 ~/Working/my-data/kafka 挂载到 Bitnami 的指定位置 /bitnami/kafka

docker run -itd --name kafka -p 9092:9092 \
    -e KAFKA_CFG_NODE_ID=1 \
    -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
    -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
    -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
    -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \
    -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
    -v ~/Working/my-data/kafka:/bitnami/kafka \
    bitnami/kafka:3.5

环境变量说明

环境变量说明
KAFKA_CFG_NODE_IDKafka 节点 ID
KAFKA_CFG_PROCESS_ROLESKafka KRaft 角色,以逗号分隔,可选值:controller,broker, controller, broker
KAFKA_CFG_LISTENERSKafka Listener 列表。 如果 KRaft 角色包含 controller, 必须填写 CONTROLLER
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP为每个 Listener 设置匹配的 Kafka 安全协议
KAFKA_CFG_CONTROLLER_QUORUM_VOTERSController 列表,以逗号分隔,格式为 host:port,host 含有节点 ID,如 1@kafka-1, 2@kafka-2
KAFKA_CFG_CONTROLLER_LISTENER_NAMESController Listener 列表

测试 Kafka

# 一开始没有任何 Topic
docker exec -it kafka bash /opt/bitnami/kafka/bin/kafka-topics.sh \
    --bootstrap-server localhost:9092 --list
    
# 创建 Topic: test-topic
docker exec -it kafka bash /opt/bitnami/kafka/bin/kafka-topics.sh \
    --bootstrap-server localhost:9092 --create --topic test-topic

二、使用 Docker Compose 部署

按照以下步骤进行操作

拉取镜像

同上

编写 YAML

docker-compose.yaml

version: "2"

services:
  kafka:
    image: bitnami/kafka:3.5
    hostname: kafka
    container_name: kafka
    ports:
      - "9092:9092"
    volumes:
      # 挂载指定目录到容器内的 /bitnami/kafka
      - ~/Working/my-data/kafka:/bitnami/kafka
    environment:
      # KRaft settings
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
      # Listeners
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT

启动

docker-compose up kafka -d

测试 Kafka

同上

三、清理环境

执行如下命令

以 Docker 方式直接部署

docker stop kafka && docker rm kafka

# 如有必要,清理持久化数据
rm -rf ~/Working/my-data/kafka

以 Docker Compose 方式部署

docker-compose stop kafka

# 如有必要,清理持久化数据
rm -rf ~/Working/my-data/kafka

参考文档

Bitnami 官方文档

Bitnami Github Kafka README

Kafka KRaft 介绍

Kafka KRaft 生产环境可用