2017-05-24 22 views
1

私はカフカプロデューサーのために私自身のPartitionerを書くつもりであるので、私はKafkaのDefaultPartitionerの実装を見ていました。カフカのトピックのパーティションと利用可能なパーティションの違いは何ですか?

私は、ClusterのavailablePartitionsForTopicと呼ばれ、コンピューティングパーティションのためにpartitionsForTopicを呼び出すことがあります。

私はドキュメント&も見ましたが、ソースコードを見ましたが、2つの違いは何か分かりません。

誰かがこれに関する正しい文書を指摘したり、その違いを説明したりすることはできますか?

答えて

2

レコードのキーを指定すると、カフカはおそらく、そのレコードがその時点で使用できない場合でも、特定のパーティションに確実に送信されると考えているようです。

しかし、キーが指定されていない場合、Kafkaはレコードが移動するターゲットパーティションについて何も気にしないと思うかもしれないので、 "生きている"パーティションからランダムに1つをピックアップします。質問partitionsForTopicavailablePartitionsForTopicの違いを(DefaultPartitionerがパーティションを割り当てるためにそれらを使用していないか)答えるため

1

、コードが唯一のドキュメントです

this.partitionsByTopic = new HashMap<>(partsForTopic.size()); 
    this.availablePartitionsByTopic = new HashMap<>(partsForTopic.size()); 
    for (Map.Entry<String, List<PartitionInfo>> entry : partsForTopic.entrySet()) { 
     String topic = entry.getKey(); 
     List<PartitionInfo> partitionList = entry.getValue(); 
     this.partitionsByTopic.put(topic, Collections.unmodifiableList(partitionList)); 
     List<PartitionInfo> availablePartitions = new ArrayList<>(); 
     for (PartitionInfo part : partitionList) { 
      if (part.leader() != null) 
       availablePartitions.add(part); 
      } 
     this.availablePartitionsByTopic.put(topic, Collections.unmodifiableList(availablePartitions)); 
    } 

として、org.apache.kafka.common.Clusterを見てくださいあなたが見ることができる、2つの間の区別要因は、リーダーの可用性です