使用docker-compose创建Kafka主题

问题描述

我正在启动我的第一个docker proyect,试图设置zookeeper和Kafka。

我有以下docker-compose.yml:

version: "3.8"

networks:
    mynet:

services:

  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
   networks:
      - mynet
      
  kafka:
    image: wurstmeister/kafka:2.12-2.4.0
    ports:
      - "9092:9092"
    expose:
      - "9093"
    environment:
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_Security_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_broKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      # Create a topic NAME:PARTITION:REPLICAS
      KAFKA_CREATE_TOPICS: "example-topic:1:1"
   networks:
      - mynet
      
  kafka-manager:
    image: sheepkiller/kafka-manager:latest
    environment:
      ZK_HOSTS: "zookeeper:2181"
    ports:
      - 9000:9000
    networks:
      - mynet

我执行docker-compose.yml: sudo docker-compose up -d

要检查是否已创建主题,请通过以下方式访问Kafka shell: sudo docker exec -it <<CONTAINER ID>> sh

在此外壳中,我转到: cd opt/kafka

并执行: bin/kafka-topics.sh --list --zookeeper localhost:2181

输出是超时错误

Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
    at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:259)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
    at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:255)
    at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:113)
    at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1858)
    at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:321)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:54)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)

解决方法

Zookeeper不在Kafka容器中运行。

由于不建议使用Zookeeper参数,因此无论如何都应使用--bootstrap-server localhost:9092