KafkaConfigure configure;
ConsumerConnector consumer = Consumer.createJavaConsumerConnector(createConsumerConfig(configure.getValidCfgProps()));
private ConsumerConfig createConsumerConfig(Properties props) {
props.put(GROUP_ID, groupId);
return new ConsumerConfig(props);
}
public void register(IKafkaConsumerAction action) {
this.action = action;
process();
}
private void process() {
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(topic, 1);
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic);
for (final KafkaStream<byte[], byte[]> stream : streams) {
exec.execute(new Runnable() {
@Override
public void run() {
try {
ConsumerIterator<byte[], byte[]> it = stream.iterator();
while (it.hasNext()) {
String msg = null;
try {
msg = new String(it.next().message());
Log.debug("kafka consumer msg|" + msg);
receives.incrementAndGet();
if (action != null) {
action.process(msg);
}
} catch (Exception e) {
Log.error("kafka consumer error|" + msg, e);
}
}
} catch (Exception e) {
Log.error("run kafka consumer error", e);
}
}
});
}
}
注意:while循环中是个阻塞的方法,实现不停的拿消息,消费消息