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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka中主题的分区和可用分区之间有什么区别?相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

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

另一答案

要回答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));
    }

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

以上是关于Kafka中主题的分区和可用分区之间有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

Kafka 分区机制详解

Kafka 如何在代理之间分配主题分区

什么命令显示 Kafka 中分区的所有主题和偏移量?

kafka总结

Kafka Topic Partition GroupId 及高可用

分区 w.r.t 到代理和分区之间关于主题的关联