Kafka主题创建:等待节点分配超时

Mil*_*lan 11 scala apache-kafka docker

我使用以下docker-compose.yml运行了本地kafka

version: '2'
services:
  zookeeper:
    image: "confluentinc/cp-zookeeper:5.0.1"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: "confluentinc/cp-enterprise-kafka:5.0.1"
    ports:
      - '9092:9092'
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 100
Run Code Online (Sandbox Code Playgroud)

尝试在Scala中使用kafka-client 2.1.0运行基本的创建主题:

val props = new Properties()
props.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")

val adminClient: AdminClient = AdminClient.create(props)
val newTopic = new NewTopic("test", 1, 1.toShort)
val topicsF = adminClient.createTopics(List(newTopic).asJavaCollection)
val result = topicsF.all().get()
Run Code Online (Sandbox Code Playgroud)

但一段时间后,我得到:

org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
Run Code Online (Sandbox Code Playgroud)

我可以使用命令行创建主题:

kafka-topics --create \
    --zookeeper localhost:2181 \
    --replication-factor 1 \
    --partitions 1 \
    --topic test
Created topic "test".
Run Code Online (Sandbox Code Playgroud)

kafka AdminClient API超时等待节点分配使用Java描述了类似的问题,但注释表明系统重新启动解决了该问题,而我这不是这种情况。

Nak*_*oto 14

正如@suh指出的

一个更简单的方法是server.properties在 line 上取消注释 kafka :listeners=PLAINTEXT://localhost:9092,它应该可以工作。


小智 7

你要做的主要事情是

  • 首先从这个路径打开你的kafka server.properties

    Nano kafka-directory/config/server.properties

  • 现在去改变这条线。听众= PLAINTEXT://:9092 与此

    听众=PLAINTEXT://您的IP地址:9092

你的IP地址必须是与你尝试连接到kafka的机器同一网络的IP,我的意思是如果客户端机器的IP晚了,比如192.168.10.1,你的监听器IP配置必须是:

listeners=PLAINTEXT://192.168.10.*:9092
Run Code Online (Sandbox Code Playgroud)
  • 接下来修改这个配置advertisement.listeners=到这个

    Advertisingd.listeners=PLAINTEXT://您的 IP 地址:9092

这两个配置必须具有相同的 IP 和端口,最后你会得到类似的东西。

listeners=PLAINTEXT://192.168.10.10:9092
advertised.listeners=PLAINTEXT://192.168.10.10:9092
Run Code Online (Sandbox Code Playgroud)


Rob*_*att 6

如果您在Docker(或类似版本)中运行Kafka,则需要正确配置侦听器。本文详细介绍了它。

是Docker Compose 的示例,可用于从主机访问Kafka。

免责声明:我写了这篇文章:)