docker-compose搭建kafka

1、单节点docker-compose.yml

version: '3'
services:
  zookeeper:
    image: zookeeper:3.8
    container_name: zookeeper
    ports:
      - "2181:2181"
    volumes:
      - ./data/zookeeper:/data
    environment:
      ZOO_MY_ID: 1
      ZOO_MAX_CLIENT_CNXNS: 100

  kafka:
    image: bitnami/kafka:3.7
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"  # 自动创建主题
      KAFKA_CFG_NUM_PARTITIONS: "3"  # 默认分区数
    volumes:
      - ./data/kafka:/bitnami/kafka
    depends_on:
      - zookeeper

2、在启动容器前,确保宿主机目录对 Docker 有写权限

# 创建数据目录
mkdir -p ./data/kafka
# 授予容器用户权限(1001是bitnami镜像的默认用户ID)
sudo chown -R 1001:1001 ./data/kafka
# 重新启动服务
docker-compose up -d

3、运行kafka 查看成功日志

# 后台运行
docker-compose up -d  

# 查看运行日志
docker-compose logs -f kafka

在这里插入图片描述

<think>嗯,用户想在单机环境下使用docker-compose部署Kafka。我需要回忆一下相关的步骤。首先,我记得Kafka依赖Zookeeper,所以需要同时部署这两个服务。用户提供的引用中有提到使用wurstmeister的镜像,比如引用5提到拉取这两个镜像,然后启动服务。还有引用3提到docker-compose部署kafka集群,但用户只需要单机,所以可能需要调整配置。 用户的问题是如何用docker-compose在单机上部署Kafka。根据引用1中的示例,启动命令是docker-compose up -d kafka,但可能需要先确保Zookeeper和Kafka的配置正确。引用4提到启动后生成zk和kafka文件夹,可能涉及到卷的映射。 接下来,我需要整理步骤。首先创建一个docker-compose.yml文件,定义两个服务:zookeeper和kafka。Zookeeper使用wurstmeister/zookeeper镜像,端口2181。Kafka使用wurstmeister/kafka,依赖Zookeeper,需要设置环境变量如KAFKA_ADVERTISED_LISTENERS,端口9092。还要挂载卷到/tmp/kafka-logs,并设置KAFKA_ZOOKEEPER_CONNECT指向Zookeeper。 需要注意环境变量的配置是否正确,特别是广告监听器,确保Kafka能被外部访问。另外,单机部署可能不需要集群配置,所以副本数设为1。然后启动命令是docker-compose up -d,测试的话可以用一个生产者消费者示例,比如用kafka-console-producer.sh和consumer.sh。 用户可能遇到的问题包括端口是否正确开放,环境变量配置错误导致连接不上,或者docker-compose版本问题,如引用3提到的赋予执行权限。另外,数据持久化也是需要考虑的,挂载卷到本地目录。 总结下来,步骤是编写docker-compose.yml,启动服务,验证。可能还需要检查防火墙设置,或者Docker的网络配置是否正确。如果用户是单机测试,可能不需要复杂的网络设置,但广告地址要设为宿主机的IP或localhost。</think>### 单机环境下使用 Docker Compose 部署 Kafka 的步骤 #### 1. 创建 `docker-compose.yml` 文件 新建一个目录(例如 `kafka-single`),并在其中创建 `docker-compose.yml` 文件,内容如下: ```yaml version: '3' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" networks: - kafka-net kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" volumes: - /tmp/kafka-logs:/kafka depends_on: - zookeeper networks: - kafka-net networks: kafka-net: driver: bridge ``` #### 2. 启动服务 在包含 `docker-compose.yml` 的目录下执行: ```bash docker-compose up -d ``` 此命令会启动 Zookeeper 和 Kafka 容器,日志文件将映射到 `/tmp/kafka-logs`(通过 `volumes` 配置)[^4]。 #### 3. 验证服务 - **检查容器状态**: ```bash docker-compose ps ``` 应显示 `zookeeper` 和 `kafka` 容器状态为 `Up`。 - **测试 Kafka 生产者/消费者**: ```bash # 进入 Kafka 容器 docker exec -it kafka-single_kafka_1 bash # 创建主题 kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 # 启动生产者 kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092 # 另开终端启动消费者 kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning ``` #### 关键配置说明 - **`KAFKA_ADVERTISED_LISTENERS`**:声明 Kafka 对外暴露的地址(需与客户端访问地址一致)[^1] - **`KAFKA_ZOOKEEPER_CONNECT`**:指定 Zookeeper 服务地址 - **`volumes`**:持久化 Kafka 数据到宿主机目录 - **`networks`**:自定义网络确保容器间通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值