importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Properties;importkafka.consumer.ConsumerConfig;importkafka.consumer.ConsumerIterator;importkafka.consumer.KafkaStream;importkafka.javaapi.consumer.ConsumerConnector;public class MyConsumer extendsThread{//消费者连接
private finalConsumerConnector consumer;//要消费的话题
private finalString topic;publicMyConsumer(String topic) {
consumer=kafka.consumer.Consumer
.createJavaConsumerConnector(createConsumerConfig());this.topic =topic;
}//配置相关信息
private staticConsumerConfig createConsumerConfig() {
Properties props= newProperties();//props.put("zookeeper.connect","localhost:2181,10.XX.XX.XX:2181,10.XX.XX.XX:2181");//配置要连接的zookeeper地址与端口//The ‘zookeeper.connect’ string identifies where to find once instance of Zookeeper in your cluster.//Kafka uses ZooKeeper to store offsets of messages consumed for a specific topic and partition by this Consumer Group
props.put("zookeeper.connect","localhost:2181");//配置zookeeper的组id (The ‘group.id’ string defines the Consumer Group this process is consuming on behalf of.)
props.put("group.id", "0");//配置zookeeper连接超时间隔//The ‘zookeeper.session.timeout.ms’ is how many milliseconds Kafka will wait for//ZooKeeper to respond to a request (read or write) before giving up and continuing to consume messages.
props.put("zookeeper.session.timeout.ms","10000");//The ‘zookeeper.sync.time.ms’ is the number of milliseconds a ZooKeeper ‘follower’ can be behind the master before an error occurs.
props.put("zookeeper.sync.time.ms", "200");//The ‘auto.commit.interval.ms’ setting is how often updates to the consumed offsets are written to ZooKeeper.//Note that since the commit frequency is time based instead of # of messages consumed, if an error occurs between updates to ZooKeeper on restart you will get replayed messages.
props.put("auto.commit.interval.ms", "1000");return newConsumerConfig(props);
}public voidrun(){
Map topickMap = new HashMap();
topickMap.put(topic,1);
Map>> streamMap =consumer.createMessageStreams(topickMap);
KafkaStreamstream = streamMap.get(topic).get(0);
ConsumerIterator it =stream.iterator();
System.out.println("*********Results********");while(true){if(it.hasNext()){//打印得到的消息
System.err.println(Thread.currentThread()+" get data:" +newString(it.next().message()));
}try{
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}public static voidmain(String[] args) {
MyConsumer consumerThread= new MyConsumer("mykafka");
consumerThread.start();
}
}