KafkaSpout多线程或不

问题描述:

kafka 0.8.x doc显示了如何在卡夫卡消费者多线程:KafkaSpout多线程或不

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.execute(new ConsumerTest(stream, threadNumber)); 
    threadNumber++; 
} 

但KafkaSpout风暴似乎不是多线程。 也许使用多任务,而不是多线程在KafkaSpout:

builder.setSpout(SqlCollectorTopologyDef.KAFKA_SPOUT_NAME, new KafkaSpout(spoutConfig), nThread); 

哪一个更好?谢谢

既然你提到了Kafka 0.8.x,我假设你使用的KafkaSpout是来自storm-kafka,而不是storm-kafka-client。

第一个代码片段是高级消费者的API,它可能使用多个线程来占用多个分区。

至于卡夫卡壶嘴,它可能是一样的,但Storm使用的是低级别消费者,即SimpleConsumer。但是,将为每个喷口执行器(任务)创建一个SimpleConsumer实例。