Docker Compose 部署 Kafka的KRaft模式 不用依赖 Zookeeper

前言

从 Kafka 2.8 开始,KRaft 模式允许 Kafka 在没有 Zookeeper 的情况下运行。本文将部署单机模式

1.新建 docker-compose.yml

vim docker-compose.yml

bash 复制代码
services:
  kafka:
    image: bitnami/kafka:3.6
    container_name: kafka
    ports:
      - "19092:9092"
    environment:
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093
      - KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_LOG_DIRS=/opt/kafka-logs
      - KAFKA_CFG_NUM_PARTITIONS=1
      - KAFKA_CFG_DEFAULT_REPLICATION_FACTOR=1
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=1
      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=1
      - KAFKA_CFG_MIN_INSYNC_REPLICAS=1
      - ALLOW_PLAINTEXT_LISTENER=yes
    volumes:
      - kafka-data:/opt/kafka-logs
    networks:
      - kafka-network

networks:
  kafka-network:
    driver: bridge

volumes:
  kafka-data:
    name: my-kafka-data

2.启动 Kafka

bash 复制代码
docker compose -f docker-compose.yml up -d

首次运行会拉取镜像,耐心等待...

3.验证 Kafka 启动

3.1 查看 Kafka 的日志:

bash 复制代码
docker logs kafka

有以下报错(如果没有报错 则略过此步骤)

查看 宿主机 数据卷地址

bash 复制代码
docker inspect kafka |grep -i Mounts -A 10

确认宿主机上挂载的数据卷目录的权限

bash 复制代码
sudo ls -ld /var/lib/docker/volumes/my-kafka-data/_data

调整宿主机权限

bash 复制代码
sudo chown -R 1001:1001 /var/lib/docker/volumes/my-kafka-data/_data
sudo chmod -R 755       /var/lib/docker/volumes/my-kafka-data/_data

再次启动

bash 复制代码
docker compose -f docker-compose.yml up -d

3.2 查看容器

bash 复制代码
docker ps

4.测试

4.1 进入 Kafka 容器

bash 复制代码
docker exec -it --user root kafka bash

4.2 创建 Kafka 主题

使用 kafka-topics.sh 命令来创建主题。假设我们创建一个名为 test-topic 的主题:

bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic --partitions 1 --replication-factor 1

4.3 查看现有的 Kafka 主题

bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 --list

4.4 生产消息到 Kafka 主题

bash 复制代码
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic

4.5 消费 Kafka 主题

加一个新的终端,再进容器

bash 复制代码
docker exec -it --user root kafka bash
bash 复制代码
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning

切换之前的终端,输入比如

bash 复制代码
a
b
c
d

下图所示成功消费

至此 部署完成

相关推荐
源图客2 小时前
【AI向量数据库】Weaviate介绍与部署
运维·docker·容器
一勺菠萝丶4 小时前
宝塔 Docker 安装 Ubuntu 及启动失败解决流程
ubuntu·docker·eureka
码云骑士5 小时前
28-Docker部署Django(下)-docker-compose编排与静态文件处理
docker·容器·django
至乐活着6 小时前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose
木雷坞6 小时前
Firecrawl Docker Compose 自托管排查:镜像、Redis、队列和 Playwright
redis·docker·容器·firecrawl
whyfail7 小时前
Colima:把 Docker Desktop 从 Mac 上“瘦身”的那把刀
macos·docker·容器
大佐不会说日语~8 小时前
在 Windows 本地用 Docker 部署向量模型(bge-m3)
windows·docker·容器·llm·ollama
xsc-xyc9 小时前
CasaOS + Docker 挂载外接硬盘部署 Jellyfin 私人影院
运维·docker·容器
码云骑士9 小时前
27-Docker部署Django(上)-从2GB到180MB的镜像瘦身实战
docker·容器·django
日取其半万世不竭9 小时前
PostgreSQL 跑在 Docker 里怎么备份?恢复成功才算备份成功
数据库·docker·postgresql