Kafka Consumer - Java客户端

时间:2016-02-19 20:32:59

标签: java apache-kafka kafka-consumer-api

我在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++;
    }
}

1 个答案:

答案 0 :(得分:1)

您正在执行a_numThreads = 50然后Executors.newFixedThreadPool(a_numThreads);是的,这意味着您无法在任何时间点创建超过50个线程,至少不能使用该执行程序。

文档所说的是一个分区只能分配给1个Stream,如果你不是创建50个流来创建51个流,后者将不会像解释here

那样得到任何内容。