2016-04-26 4 views
0

У меня есть производитель кафки, который в основном работает ниже. У меня есть тема с участием не менее 10 разделов, и мне не нравится порядок, который они потребляют (мой бэкэнд справится с этим). Я также приступлю к 10 потребителям (предполагая, что каждый цепляется за 1 раздел). Если я начну публиковать сообщения (используя нижеприведенный код), kafka будет обрабатывать нагрузку и равномерно размещать сообщения во всех разделах или я должен ввести ключ (который действительно не имеет значения для моего приложения) и реализовать круглый robin?Каков наилучший способ публикации сообщений в kafka?

KeyedMessage<String, String> data = new KeyedMessage<>(topic, txt); 
producer.send(data); 
producer.close(); 

Любые мысли?

ответ

1

В случае по умолчанию org.apache.kafka.clients.producer.internals.DefaultPartitioner будет использоваться

if (keyBytes == null) { 
     int nextValue = counter.getAndIncrement(); 
     List<PartitionInfo> availablePartitions =  cluster.availablePartitionsForTopic(topic); 
     if (availablePartitions.size() > 0) { 
      int part = DefaultPartitioner.toPositive(nextValue) % availablePartitions.size(); 
      return availablePartitions.get(part).partition(); 
     } else { 
      // no partitions are available, give a non-available partition 
      return DefaultPartitioner.toPositive(nextValue) % numPartitions; 
     } 
    } else { 
     // hash the keyBytes to choose a partition 
     return DefaultPartitioner.toPositive(Utils.murmur2(keyBytes)) % numPartitions; 
    } 

link to source code

в соответствии с кодом, Кафка разделит все сообщения поровну между всеми разделами

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