2016-02-19 8 views
0

Я видел эту записку в Кафка потребительской документации -Кафка Потребитель - Клиент Java

Поскольку существует несколько разделов это по-прежнему балансирует нагрузку в течение многих потребительских экземпляров. Обратите внимание, однако, что не может быть больше потребителей экземпляров, чем разделов.

У меня есть 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

Тот факт, что вы делаете, а затем a_numThreads = 50Executors.newFixedThreadPool(a_numThreads); да, означает, что вы не можете создать более 50 потоков в любой момент времени, по крайней мере, не с этим исполнителем.

Что документация говорит, что раздел может быть назначен только 1 поток, если вы вместо того, чтобы создать 50 потоков создает потоки 51 последний один не получит ничего, как объяснено here

Смежные вопросы