繁体   English   中英

Kafka中主题的分区和可用分区之间有什么区别?

[英]What is the difference between partitions & available partitions for topic in Kafka?

我打算为Kafka Producer编写自己的Partitioner ,所以我看到了Kafka的DefaultPartitioner的实现。

我看到它调用了Cluster的availablePartitionsForTopic ,有时会调用partitionsForTopic来计算分区。

我阅读了文档并看到了源代码,但我无法看到两者之间有什么区别。

有人能指出我正确的文件或解释其中的差异吗?

如果为记录指定密钥,Kafka可能认为您肯定希望将此记录发送到某个确定的分区,即使它当时不可用。

但是,如果没有指定密钥,那么Kafka可能会认为您不关心记录所针对的目标分区,因此它从那些“活动”分区中随机选取一个。

要回答partitionsForTopicavailablePartitionsForTopic 之间的问题区别 (不是DefaultPartitioner如何使用它们来分配分区),代码是唯一的文档

看看org.apache.kafka.common.Cluster

    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));
    }

如您所见,两者之间的区别因素是领导者的可用性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM