package com.haogrgr.test.kafka; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.haogrgr.test.util.Maps; import kafka.consumer.Consumer; import kafka.consumer.ConsumerConfig; import kafka.consumer.ConsumerIterator; import kafka.consumer.KafkaStream; import kafka.javaapi.consumer.ConsumerConnector; import kafka.message.MessageAndMetadata; import kafka.serializer.StringDecoder; public class SimpleKafkaConsumer { private static ConsumerConnector consumer = null; public static void main(String[] args) { List<KafkaStream<String, String>> streams = openKafkaStream("10.128.8.57:2181", "group-1", "haogrgr1"); ExecutorService exec = Executors.newFixedThreadPool(1); int id = 0; for (KafkaStream<String, String> stream : streams) { final int theid = id++; exec.execute(new Runnable() { @Override public void run() { ConsumerIterator<String, String> itr = stream.iterator(); while (itr.hasNext()) { MessageAndMetadata<String, String> next = itr.next(); System.out.println(next.key() + ", " + next.partition() + ", " + next.offset() + ", " + theid); consumer.commitOffsets(true); } } }); } } private static List<KafkaStream<String, String>> openKafkaStream(String zkConnect, String group, String topic) { consumer = Consumer.createJavaConsumerConnector(getConsumerConfig(zkConnect, group)); StringDecoder decoder = new StringDecoder(null); Map<String, Integer> topicCountMap = Maps.of(topic, 1); Map<String, List<KafkaStream<String, String>>> consumerMap = consumer.createMessageStreams(topicCountMap, decoder, decoder); return consumerMap.get(topic); } private static ConsumerConfig getConsumerConfig(String zkConnect, String group) { Properties props = new Properties(); props.put("zookeeper.connect", zkConnect); props.put("group.id", group); props.put("zookeeper.session.timeout.ms", "3000"); props.put("zookeeper.sync.time.ms", "2000"); props.put("auto.commit.interval.ms", "1000"); props.put("auto.commit.enable", "false"); return new ConsumerConfig(props); } }