2016-04-26 12 views
0

私は基本的に以下の作業を行うカフカプロデューサーがいます。私はatleast 10のパーティションを持つトピックを持っていると私は彼らが消費した順序を気にしない(私のバックエンドはそれを処理します)。私は少なくとも10人の消費者を開始します(それぞれが1つのパーティションに張り付いていると仮定します)。もし私が(以下のコードを使用して)メッセージを公開すると、kafkaは負荷を処理し、すべてのパーティションにメッセージを均等に配置するか、キーを導入する必要があります(本当に問題はありません)。メッセージをカフカに公開する最も良い方法は何ですか?

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

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

を使用する

答えて

1

デフォルトの場合、カフカは、すべてのパーティション間で均等にすべてのメッセージを分割します

関連する問題