使用 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_ID | Kafka 节点 ID |
| KAFKA_CFG_PROCESS_ROLES | Kafka KRaft 角色,以逗号分隔,可选值:controller,broker, controller, broker |
| KAFKA_CFG_LISTENERS | Kafka Listener 列表。 如果 KRaft 角色包含 controller, 必须填写 CONTROLLER |
| KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP | 为每个 Listener 设置匹配的 Kafka 安全协议 |
| KAFKA_CFG_CONTROLLER_QUORUM_VOTERS | Controller 列表,以逗号分隔,格式为 host:port,host 含有节点 ID,如 1@kafka-1, 2@kafka-2 |
| KAFKA_CFG_CONTROLLER_LISTENER_NAMES | Controller 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