我在kafka消费者文档中看到了这个注释 -
由于有许多分区,这仍然可以平衡许多分区的负载 消费者实例。但请注意,不能有更多的消费者 实例而非分区。
我有一个主题的50个分区。如果我将a_numThreads值设为50,则从每个分区获取1条消息?以上消息是否意味着在我的情况下,我不能在任何时间点创建超过50个线程?
public void run(int a_numThreads) {
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.submit(new ConsumerTest(stream, threadNumber));
threadNumber++;
}
}
答案 0 :(得分:1)
您正在执行a_numThreads = 50
然后Executors.newFixedThreadPool(a_numThreads);
是的,这意味着您无法在任何时间点创建超过50个线程,至少不能使用该执行程序。
文档所说的是一个分区只能分配给1个Stream,如果你不是创建50个流来创建51个流,后者将不会像解释here
那样得到任何内容。