Kafka中主题的分区和可用分区之间有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka中主题的分区和可用分区之间有什么区别?相关的知识,希望对你有一定的参考价值。
我打算为Kafka Producer写我自己的Partitioner
,所以我看到了Kafka的DefaultPartitioner的实现。
我看到它调用了Cluster的availablePartitionsForTopic
,有时会调用partitionsForTopic
来计算分区。
我阅读了文档并看到了源代码,但我无法看到两者之间有什么区别。
有人能指出我正确的文件或解释其中的差异吗?
答案
如果为记录指定密钥,Kafka可能认为您肯定希望将此记录发送到某个确定的分区,即使它当时不可用。
但是,如果没有指定密钥,那么Kafka可能会认为您不关心记录所针对的目标分区,因此它从那些“活动”分区中随机选取一个。
另一答案
要回答partitionsForTopic
and 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中主题的分区和可用分区之间有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章