Java “线程中的异常”;“主要”;org.I0Itec.zkclient.exception.ZkTimeoutException

Java “线程中的异常”;“主要”;org.I0Itec.zkclient.exception.ZkTimeoutException,java,apache-kafka,Java,Apache Kafka,我正在尝试经营卡夫卡消费品。 这是我的java代码: package com.consumer.demo; import kafka.consumer.ConsumerConfig; import kafka.consumer.KafkaStream; import kafka.javaapi.consumer.ConsumerConnector; import java.util.HashMap; import java.util.List; import java.util.Map; imp

我正在尝试经营卡夫卡消费品。 这是我的java代码:

package com.consumer.demo;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class KafkaConsumer 
{
  private final ConsumerConnector consumer;
  private final String topic;
  private ExecutorService executor;

  public KafkaConsumer(String a_zookeeper, String a_groupId, String a_topic) 
  {
    consumer = kafka.consumer.Consumer.createJavaConsumerConnector(
            createConsumerConfig(a_zookeeper, a_groupId));
    this.topic = a_topic;
  }

  public void shutdown() 
  {
    if (consumer != null) consumer.shutdown();
    if (executor != null) executor.shutdown();
  }

  public void run(int a_numThreads) 
  {
    Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
    topicCountMap.put(topic, new Integer(a_numThreads));
    Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
    List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic); // now launch all the threads //
    executor = Executors.newFixedThreadPool(a_numThreads); // now create an object to consume the messages //
    int threadNumber = 0;
    for (final KafkaStream stream : streams)
    {
      executor.submit(new ConsumerTest(stream, threadNumber));
      threadNumber++;
    }
  }

  private static ConsumerConfig createConsumerConfig(String a_zookeeper, String a_groupId)
  {
    Properties props = new Properties();
    props.put("zookeeper.connect", a_zookeeper);
    props.put("group.id", a_groupId);
    props.put("zookeeper.session.timeout.ms", "4000");
    props.put("zookeeper.sync.time.ms", "200");
    props.put("auto.commit.interval.ms", "1000");
    props.put("auto.offset.reset", "smallest");
    return new ConsumerConfig(props);
  }

  public static void main(String[] args)
  {
    String zooKeeper = args[0];
    String groupId = args[1];
    String topic = args[2];
    int threads = Integer.parseInt(args[3]);
    KafkaConsumer example = new KafkaConsumer(zooKeeper, groupId, topic);
    example.run(threads);
    try { 
      Thread.sleep(10000);
    } catch (InterruptedException ie)
    { }
    example.shutdown();
    }
  }
}
package com.consumer.demo;
导入kafka.consumer.ConsumerConfig;
进口kafka.consumer.KafkaStream;
导入kafka.javaapi.consumer.ConsumerConnector;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.Properties;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
公共类卡夫卡消费者
{
私人最终消费者连接消费者;
私有字符串主题;
私人遗嘱执行人;
公共卡夫卡消费者(字符串a_zookeeper、字符串a_groupId、字符串a_topic)
{
consumer=kafka.consumer.consumer.createJavaConsumerConnector(
createConsumerConfig(一个动物园管理员,一个群组ID));
this.topic=a_topic;
}
公共空间关闭()
{
如果(consumer!=null)consumer.shutdown();
如果(executor!=null)executor.shutdown();
}
公共无效运行(int a_numThreads)
{
Map topicCountMap=新HashMap();
put(主题,新整数(a_numThreads));
Map consumerMap=consumer.createMessageStreams(topicCountMap);
List streams=consumerMap.get(主题);//现在启动所有线程//
executor=Executors.newFixedThreadPool(a_numThreads);//现在创建一个对象来使用消息//
int threadNumber=0;
对于(最终卡夫卡斯特雷姆流:流)
{
提交(新的ConsumerTest(流、线程号));
threadNumber++;
}
}
私有静态ConsumerConfig CreateCummerConfig(字符串a\u zookeeper,字符串a\u groupId)
{
Properties props=新属性();
道具。放置(“zookeeper.connect”,a_zookeeper);
props.put(“group.id”,a_groupId);
props.put(“zookeeper.session.timeout.ms”,“4000”);
道具放置(“zookeeper.sync.time.ms”,“200”);
props.put(“auto.commit.interval.ms”,“1000”);
道具放置(“自动偏移重置”、“最小”);
返回新的消费者配置(道具);
}
公共静态void main(字符串[]args)
{
字符串zooKeeper=args[0];
字符串groupId=args[1];
字符串主题=args[2];
int threads=Integer.parseInt(args[3]);
卡夫卡消费者示例=新卡夫卡消费者(zooKeeper、groupId、topic);
运行(线程);
试试{
睡眠(10000);
}捕获(中断异常ie)
{ }
例如:shutdown();
}
}
}
使用者的运行时参数为: 10.25.3.207:2181 abc vulab123 1

我得到以下错误:

Exception in thread "main" org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 4000
at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:880)
at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:98)
at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:84)
at kafka.consumer.ZookeeperConsumerConnector.connectZk(ZookeeperConsumerConnector.scala:156)
at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:114)
at kafka.javaapi.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:65)
at kafka.javaapi.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:67)
at kafka.consumer.Consumer$.createJavaConsumerConnector(ConsumerConnector.scala:100)
at kafka.consumer.Consumer.createJavaConsumerConnector(ConsumerConnector.scala)
at com.consumer.demo.KafkaConsumer.<init>(KafkaConsumer.java:18)
at com.consumer.demo.KafkaConsumer.main(KafkaConsumer.java:58)
线程“main”org.I0Itec.zkclient.Exception.ZkTimeoutException中出现异常:无法在超时时间内连接到zookeeper服务器:4000 位于org.I0Itec.zkclient.zkclient.connect(zkclient.java:880) 在org.I0Itec.zkclient.zkclient.(zkclient.java:98) 位于org.I0Itec.zkclient.zkclient.(zkclient.java:84) 在kafka.consumer.ZookeeperConsumerConnector.connectZk(ZookeeperConsumerConnector.scala:156) 在卡夫卡。消费者。ZookeeperConsumerConnector。(ZookeeperConsumerConnector.scala:114) 位于kafka.javaapi.consumer.ZookeeperConsumerConnector.(ZookeeperConsumerConnector.scala:65) 位于kafka.javaapi.consumer.ZookeeperConsumerConnector。(ZookeeperConsumerConnector.scala:67) 在kafka.consumer.consumer$.createJavaConsumerConnector(ConsumerConnector.scala:100) 在kafka.consumer.consumer.createJavaConsumerConnector(ConsumerConnector.scala)中 在com.consumer.demo.KafkaConsumer.(KafkaConsumer.java:18) 位于com.consumer.demo.KafkaConsumer.main(KafkaConsumer.java:58)
关于如何解决此问题有何建议?

您的消费者似乎无法连接到Zookeeper。你的Zookeeper集群位于哪里?我假设您主要是从这里复制代码。当我在ConsumerConfig
props.put(“zookeer.connection.timeout.ms”,“10000”)
中添加以下行时,不会显示异常,但KafkaConsumer没有读取主题中的消息。