问题描述
说有一个应用程序在100个节点的群集中运行。该应用程序占用20个主题,每个主题都有30个分区。
理想情况下,每个应用程序实例应具有6个来自相同或不同主题的分区。但更糟糕的情况是只有30个节点实际在使用分区分配器。其余节点未分配分区。
是否有某种方法使其接近理想状态,即每个应用程序实例具有6个分区?
解决方法
尽管问题的作者回答了partition.assignment.strategy
的值,当他从多个主题中消费时,应该使用该值来获得均匀的分区分布。我想强调此配置的含义和拇指规则,我们在设置此配置时要牢记。
partition.assignment.strategy
只需确定在给定使用者组中的使用者实例之间分配分区的顺序。
此配置的可能选项是 Range,RoundRobin,StickyAssignor和YourOwnCustomPartitioner 。
拇指法则:
主要内容是订阅多个主题,更好地使用
RoundRobinAssignor
,如果每个主题的分区数都不是 甚至。但是,如果每个主题的分区是偶数或仅一个主题。您 可以使用RoundRobinAssignor
或RangeAssignor
。
我引用以上拇指规则Partition Assignment strategy
的本文档另一个有用的读物是understanding-kafka-partition-assignment-strategies
,这确实是一个虚拟问题……Kafka为此提供了本地解决方案。配置为使用RoundRobinAssignor或StickyAssignor并在同一使用者中使用多个主题。分配者将处理其余的事情。