KafkaSpout多线程与否

时间:2017-08-29 15:29:40

标签: apache-kafka apache-storm jstorm

kafka 0.8.x doc展示了如何在kafka消费者中进行多线程:

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);

哪一个更好?感谢

1 个答案:

答案 0 :(得分:0)

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

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

至于kafka鲸鱼喷水,它可能是相同的,但Storm正在使用低级消费者,即SimpleConsumer。但是,将为每个spout执行程序(任务)创建一个SimpleConsumer实例。

相关问题