在集群中运行的应用程序中使用多个主题时,如何均匀分配多个主题的分区?

问题描述

说有一个应用程序在100个节点的群集中运行。该应用程序占用20个主题,每个主题都有30个分区。

理想情况下,每个应用程序实例应具有6个来自相同或不同主题的分区。但更糟糕的情况是只有30个节点实际在使用分区分配器。其余节点未分配分区。

是否有某种方法使其接近理想状态,即每个应用程序实例具有6个分区?

解决方法

尽管问题的作者回答了partition.assignment.strategy的值,当他从多个主题中消费时,应该使用该值来获得均匀的分区分布。我想强调此配置的含义拇指规则,我们在设置此配置时要牢记。

partition.assignment.strategy只需确定在给定使用者组中的使用者实例之间分配分区的顺序

此配置的可能选项是 Range,RoundRobin,StickyAssignor和YourOwnCustomPartitioner

拇指法则:

主要内容是订阅多个主题,更好地使用 RoundRobinAssignor,如果每个主题的分区数都不是 甚至。但是,如果每个主题的分区是偶数或仅一个主题。您 可以使用RoundRobinAssignorRangeAssignor

我引用以上拇指规则Partition Assignment strategy

的本文档

另一个有用的读物​​是understanding-kafka-partition-assignment-strategies

,

这确实是一个虚拟问题……Kafka为此提供了本地解决方案。配置为使用RoundRobinAssignor或StickyAssignor并在同一使用者中使用多个主题。分配者将处理其余的事情。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...