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

问题描述 投票:1回答:2

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

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

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

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

apache-kafka kafka-producer-api
2个回答
2
投票

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

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


1
投票

要回答partitionsForTopicand availablePartitionsForTopic之间的问题区别(不是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));
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.