Java “线程中的异常”;“主要”;org.I0Itec.zkclient.exception.ZkTimeoutException
我正在尝试经营卡夫卡消费品。 这是我的java代码: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
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没有读取主题中的消息。