MacOS M1上的Docker kafka问题停留在配置上

Posted

技术标签:

【中文标题】MacOS M1上的Docker kafka问题停留在配置上【英文标题】:Docker kafka on MacOS M1 Issues stuck on configuring 【发布时间】:2021-07-14 19:34:32 【问题描述】:

我使用 macOS M1 Big Sur 11.2.3,但我的 kafka 无法正常运行并且无法创建/列出主题。我不知道是不是因为操作系统,但是kafka的日志只是这样的:

docker-compose logs

list the topics logs

这是我的 docker compose:

services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    hostname: zookeeper
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
    networks:
      - kafka_net
  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - 9092:9092
    expose:
      - 29092
    depends_on:
      - zookeeper
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_LISTENERS: INSIDE://0.0.0.0:29092,OUTSIDE://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:29092,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_BROKER_ID: 1
    restart: always
    networks:
      - kafka_net
networks:
  kafka_net:
    driver: bridge

我认为 kafka 尚未运行,因此我无法列出/创建主题。你们对此有什么想法吗?我已经搜索过这方面的可能性,但我仍然没有解决问题。谢谢

【问题讨论】:

【参考方案1】:

为了在 mac m1 上的 docker 中启动 kafka,我会做接下来的事情:

    克隆 kafka 存储库并在我的 macbook pro m1 上构建 (./gradlew clean releaseTarGz) 使用下一个结构创建 docker-compose 项目目录
根目录 kafka_m1 kafka(解压后的 kafka 发行版) Dockerfile docker-compose.yml
    配置 server.properties 文件(root dir/kafka_m1/kafka/config/server.properties)。主要参数:
   zookeeper.connect=zookeeper:2181
   listeners=PLAINTEXT://:9092
   advertised.listeners=PLAINTEXT://127.0.0.1:9092
   listener.security.protocol.map=PLAINTEXT:PLAINTEXT
    kafka 的 Dockerfileopenjdk:15.0.2-jdk 是为 m1 构建的):
    FROM openjdk:15.0.2-jdk
    
    WORKDIR /
    COPY . /
    
    EXPOSE 9092
    EXPOSE 8092
    EXPOSE 9092
    EXPOSE 10092
    EXPOSE 11092
    EXPOSE 12092
    
    ENTRYPOINT [ "/kafka/bin/kafka-server-start.sh", "/kafka/config/server.properties" ]
    docker-compose.yml(我选择 zookeeper:3.7.0 因为它有 arm build):
  version: "2"
  services:
  zookeeper:
    image: zookeeper:3.7.0
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
  kafka:
    build: ./kafka_m1
    ports:
      - "127.0.0.1:9092:9092"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    启动 docker-compose 并构建 kafka_m1 映像。

在 docker 中运行本地 kafka 的快速收据

【讨论】:

有没有人试过这个,我现在也有同样的情况?【参考方案2】:

docker-compose.yaml 文件没问题,你只需要在 kafka 容器中执行以下命令:

    kafka-topics.sh --zookeeper zookeeper:2181 --topic test --create --partitions 3 --replication-factor 1 kafka-topics.sh --zookeeper zookeeper:2181 --list

顺便说一句:您可以使用以下命令进入 kafka 容器:docker exec -it CONTAINER_ID bash

【讨论】:

以上是关于MacOS M1上的Docker kafka问题停留在配置上的主要内容,如果未能解决你的问题,请参考以下文章

带有 ARM CPU M1 的 macOS 上的 Android Studio/Emulator

M1 macOS Mojave 全局 bin 文件夹权限错误上的 npm

Docker-compose 在 M1 mac 上的 VM (Parallels) 中

无法连接到 macOS 上的 Docker 守护进程

本地 docker 服务的 Spring Boot Kafka 连接问题

来自 Electron 的 M1 mac 上的 Emacs 崩溃