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

前言

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

1.新建 docker-compose.yml

vim docker-compose.yml

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

docker compose -f docker-compose.yml up -d

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

3.验证 Kafka 启动

3.1 查看 Kafka 的日志:

docker logs kafka

有以下报错(如果没有报错 则略过此步骤)
在这里插入图片描述
查看 宿主机 数据卷地址

docker inspect kafka |grep -i Mounts -A 10

在这里插入图片描述

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

sudo ls -ld /var/lib/docker/volumes/my-kafka-data/_data

调整宿主机权限

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

再次启动

docker compose -f docker-compose.yml up -d

3.2 查看容器

docker ps

在这里插入图片描述

4.测试

4.1 进入 Kafka 容器

docker exec -it --user root kafka bash

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

kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic --partitions 1 --replication-factor 1

4.3 查看现有的 Kafka 主题

kafka-topics.sh --bootstrap-server localhost:9092 --list

在这里插入图片描述
4.4 生产消息到 Kafka 主题

kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic

4.5 消费 Kafka 主题
加一个新的终端,再进容器

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

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

a
b
c
d

下图所示成功消费
在这里插入图片描述

至此 部署完成

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!如果您想使用 Docker Compose 部署 Kafka,并使用 Kafka 2.8.0+ 版本引入的 KRaft 模式,可以按照以下步骤进行操作: 1. 创建一个名为 `docker-compose.yml` 的文件,并在其中定义 Kafka 服务。示例内容如下: ```yaml version: '3' services: kafka: image: confluentinc/cp-kafka:latest hostname: kafka container_name: kafka ports: - "9092:9092" environment: KAFKA_KRAFT_MODE: "true" KAFKA_LISTENERS: "PLAINTEXT://:9092" KAFKA_LOG_MESSAGE_FORMAT_VERSION: "2.8" KAFKA_KRAFT_CONTROLLER_QUORUM_VOTERS: "1@kafka:9092" KAFKA_KRAFT_BROKER_ADDRESS_RESOLUTION: "broker" KAFKA_KRAFT_BROKER_ID_GENERATION_METHOD: "ROUND_ROBIN" KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" volumes: - ./data/kafka:/var/lib/kafka/data depends_on: - zookeeper zookeeper: image: confluentinc/cp-zookeeper:latest hostname: zookeeper container_name: zookeeper ports: - "2181:2181" ``` 在上面的示例中,我们使用了 Confluent 提供的 Kafka 镜像,并将 Kafka 服务映射到主机的 9092 端口。同时,我们也定义了一个名为 `zookeeper` 的服务,用于支持 Kafka。 2. 运行以下命令启动 Kafka 服务: ```bash docker-compose up -d ``` 这将在后台启动 KafkaZooKeeper 服务,并使用 KRaft 模式进行配置。 请注意,KRaft 模式Kafka 2.8.0+ 引入的新模式,用于提供一个高可用的分布式 Kafka 集群,不再依赖于外部的 ZooKeeper。在 KRaft 模式下,Kafka 中的控制器角色会被多个 broker 共享,从而实现了高可用性。 希望以上信息能对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值