package edu.fudan.weixin.kafka; import java.util.Map; import java.util.Set; import kafka.consumer.ConsumerIterator; import kafka.consumer.KafkaStream; import kafka.message.MessageAndMetadata; public class CallbackThread implements Runnable { Map<String, Set<ConsumeCallback>> callbacks; private KafkaStream<String, String> records; @Override public void run() { ConsumerIterator<String, String> i = records.iterator(); while (i.hasNext()) { final MessageAndMetadata<String, String> mm = i.next(); String topic = mm.topic(); final Set<ConsumeCallback> cbs = callbacks.get(topic); if (cbs != null) { for (ConsumeCallback cb : cbs) try{ cb.process(mm); }catch(Exception ex) { ex.printStackTrace(); } } } } public CallbackThread( final Map<String, Set<ConsumeCallback>> callbacks, KafkaStream<String, String> records) { super(); this.callbacks = callbacks; this.records = records; } }