【问题标题】:Starting a Kafka topics using Docker Compose with spotify/kafka?使用 Docker Compose 和 spotify/kafka 启动 Kafka 主题?
【发布时间】:2018-01-14 21:23:06
【问题描述】:

我正在尝试将 Kafka 主题连接到我的前端 Java Spring 应用程序。我正在使用 Docker Compose,并尝试使用两个不同的 Kafka 映像进行连接。

使用wurstmeister/kafka,我已经能够在我的docker.compose.yml 文件中通过此服务启动并运行Kafka 主题。但是我无法将创建的主题连接到我的前端 Java Spring 应用程序。

kafka:
    image: wurstmeister/kafka:0.10.2.0
    ports:
      - "9092:9092"
    expose:
      - "9092"
      - "2181"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_CREATE_TOPICS: "test-topic1:1:1, test-topic2:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper

其次,对于spotify/kafka,我实际上很难用 Kafka 创建主题。在文档中,它正在寻找作为环境变量的主题,但以下docker-compose.yml 服务并未创建主题。我也尝试在test-topic 周围加上引号,但效果不佳。

kafka:
    image: spotify/kafka
    ports:
      - "9092:9092"
      - "2181:2181"
    hostname: kafka
    expose:
      - "9092"
      - "2181"
    environment:
      TOPICS: test-topic

不知道有没有必要,但是我整个docker-compose.yml文件如下,注意只有使用wurstmeister/kafka才需要zookeeper服务。

docker-compose.yml

version: '2'
services:
  # zookeeper:
  #   image: wurstmeister/zookeeper
  #   ports:
  #     - "2181:2181"
  kafka:
    image: spotify/kafka
    ports:
      - "9092:9092"
      - "2181:2181"
    hostname: kafka
    expose:
      - "9092"
      - "2181"
    environment:
      TOPICS: test-topic
  redis:
    image: redis
    ports:
      - "6379"
    restart: always
  kafka-websocket-connector:
    build: ./kafka-websocket-connector
    image: andrewterra/kafka-websocket-connector
    ports:
      - "8077:8077"
    #   - "9092:9092"
    depends_on:
      - kafka
      - redis
    #   - zookeeper
    links:
      - kafka
      - redis

【问题讨论】:

  • 为什么不用bin/kafka-topics --create 命令行工具创建主题? Docker-compose 不能完全替代 Chef、Puppet、Ansible 或自定义部署脚本。

标签: docker apache-kafka docker-compose


【解决方案1】:

有点晚了,但是您可以使用类似以下的内容来使用 shell 脚本来创建您的主题:

command: >
  bash -c
  "(sleep 15s &&
  /opt/kafka_2.11-0.10.1.0/bin/kafka-topics.sh
  --create
  --zookeeper
  localhost:2181 --replication-factor 1 --partitions 1
  --topic my_topic &) && (supervisord -n)"

【讨论】:

    【解决方案2】:

    容器运行命令创建主题

    使用容器命令docker run --net=host --rm。在以下示例中,zookeeper 在端口22181 上运行,请使用相应的主题名称端口。

    创建

    docker run   --net=host   --rm   confluentinc/cp-kafka:4.0.0   kafka-topics --create --topic customer --partitions 1 --replication-factor 1 --if-not-exists --zookeeper  localhost:22181
    

    描述

    docker run   --net=host   --rm   confluentinc/cp-kafka:4.0.0   kafka-topics --zookeeper localhost:22181 --topic customer --describe
    

    列表

    docker run   --net=host   --rm   confluentinc/cp-kafka:4.0.0   kafka-topics --list --zookeeper  localhost:22181
    

    删除

    docker run   --net=host   --rm   confluentinc/cp-kafka:4.0.0   kafka-topics  --delete --topic customer --zookeeper localhost:22181
    

    【讨论】:

      【解决方案3】:

      TOPICS 环境变量仅用于kafkaproxy 图像。 https://github.com/spotify/docker-kafka#running-the-proxy

      对于kafka 图像,您需要使用客户端创建主题。

      【讨论】:

      • 怎么样?请提供详细信息。
      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 2021-02-03
      • 2019-12-19
      • 2021-11-22
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多