kafka AdminClient API 等待节点分配超时

Posted

技术标签:

【中文标题】kafka AdminClient API 等待节点分配超时【英文标题】:kafka AdminClient API Timed out waiting for node assignment 【发布时间】:2018-12-21 19:58:15 【问题描述】:

我是 Kafka 新手,正在尝试使用 AdminClient API 来管理在我的本地计算机上运行的 Kafka 服务器。我的设置与 Kafka 文档的 quick start 部分完全相同。唯一的区别是我没有创建任何主题。

我在此设置中运行任何 shell 脚本都没有问题,但是当我尝试运行以下 java 代码时:

public class ProducerMain

    public static void main(String[] args) 
        Properties props = new Properties();
        props.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, 
            "localhost:9092");


        try(final AdminClient adminClient = 
              KafkaAdminClient.create(props))

            try 
                final NewTopic newTopic = new NewTopic("test", 1, 
                    (short)1);

                final CreateTopicsResult createTopicsResult = 
                    adminClient.createTopics( 
                         Collections.singleton(newTopic));

                createTopicsResult.all().get();

            catch (InterruptedException | ExecutionException e) 
                e.printStackTrace();
            
        
    

错误:TimeoutException: Timed out waiting for a node assignment

Exception in thread "main" java.lang.RuntimeException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
at ProducerMain.main(ProducerMain.java:41)
    <br>Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:89)
at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:258)
at ProducerMain.main(ProducerMain.java:38)
<br>Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.

我已经在网上搜索了有关问题可能是什么的迹象,但到目前为止一无所获。欢迎任何建议,因为我已经走到了尽头。

【问题讨论】:

您找到解决问题的方法了吗?当我对已部署的集群代理运行 KafkaReadyCommand 时,我遇到了同样的错误,并且无法弄清楚会发生什么。 @Gaetan 系统重启最终解决了我的问题,因为我在本地机器上运行 Kafka。但是,我仍然不知道问题的根源是什么。抱歉,我不能提供更多帮助。 【参考方案1】:

听起来你的经纪人不健康……

这段代码运行良好

public class Main 

    static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) 
        Properties properties = new Properties();
        properties.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        properties.setProperty(AdminClientConfig.CLIENT_ID_CONFIG, "local-test");
        properties.setProperty(AdminClientConfig.RETRIES_CONFIG, "3");

        try (AdminClient client = AdminClient.create(properties)) 
            final CreateTopicsResult res = client.createTopics(
                    Collections.singletonList(
                            new NewTopic("foo", 1, (short) 1)
                    )
            );
            res.all().get(5, TimeUnit.SECONDS);
         catch (InterruptedException | ExecutionException | TimeoutException e) 
            logger.error("unable to create topic", e);
        
    

我可以在代理日志中看到该主题已创建

【讨论】:

【参考方案2】:

我用 bitnami/kafka 启动了 kafka 服务,得到了完全相同的错误。 尝试通过这个版本启动kafka,它可以工作: https://hub.docker.com/r/wurstmeister/kafka

$ docker run -d --name zookeeper-server --network app-tier \
  -e ALLOW_ANONYMOUS_LOGIN=yes  -p 2181:2181 zookeeper:3.6.2

$ docker run -d --name kafka-server --network app-tier --publish 9092:9092 \
  --env KAFKA_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
  --env KAFKA_ADVERTISED_HOST_NAME=30.225.51.235 \
  --env KAFKA_ADVERTISED_PORT=9092  \
  wurstmeister/kafka

30.225.51.235 是主机的 IP 地址。

【讨论】:

以上是关于kafka AdminClient API 等待节点分配超时的主要内容,如果未能解决你的问题,请参考以下文章

Kafka核心API——AdminClient API

kafka AdminClient 闲时关闭连接

Kafka 0.11客户端集群管理工具AdminClient

Kafka 0.11客户端集群管理工具AdminClient

kafka AdminClient 获取kafka版本

kafka AdminClient无法在已部署的环境中工作