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

a1o7rhls  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(530)

我打算写我自己的 Partitioner 对Kafka制作人来说,我看到了Kafka的defaultpartitioner的实现。
我看到它叫群集的 availablePartitionsForTopic 有时打电话 partitionsForTopic 用于计算分区。
我阅读了文档,也看到了源代码,但是我看不出两者之间的区别。
有没有人能给我指出正确的文档或者解释一下两者的区别?

ubof19bj

ubof19bj1#

如果您为一个记录指定一个键,kafka可能认为您肯定希望这个记录被发送到某个确定的分区,即使它当时不可用。
但是,如果没有指定密钥,那么kafka可能会认为您不关心记录所指向的目标分区,因此它会从那些“活动”分区中随机选取一个。

jv4diomz

jv4diomz2#

回答问题的区别 partitionsForTopic 以及 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));
    }

正如你所看到的,两者之间的区别在于领导者的可用性

相关问题