apache-kafka - Kafka PartitionStrategy + 水平扩展
问题描述
我很困惑分区分配在多大程度上是客户端关注的问题partition.assignment.strategy
,以及卡夫卡处理的部分。
例如,假设我有一个包含 100 个分区的 kafka 主题。
如果我制作 1 个运行 5 个消费者线程的应用程序,使用partition.assignment.strategy
RangeAssignor,那么我应该得到 5 个消费者,每个消费者消耗 25 个分区。
现在,如果我通过部署它 4 次并使用相同的消费者组来扩展这个应用程序。kafka 会先将 25 个分区划分给它身边的每个这些应用程序,然后这 25 个分区才会被应用程序使用 PartitionStrategy 进一步细分吗?
这将整齐地产生 4 个应用程序,每个应用程序有 5 个使用者,每个消耗 5 个分区。
解决方案
默认分配器的行为在 Javadocs 中有详细记录。
RangeAssignor 是默认的分配器,请参阅它的 Javadoc,例如它生成的分配:http: //kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html
如果您有 20 个使用 RangeAssignor 的消费者从具有 100 个分区的主题消费,则每个消费者将被分配 5 个分区。
因为 RangeAssignor 是按主题分配分区的,所以如果您的主题分区很少,它可能会创建真正不平衡的分配。在这种情况下,RoundRobinAssignor效果更好
推荐阅读
- google-cloud-platform - 如何将只读文件复制到谷歌云存储中?
- java - 日期格式“2019-06-17-04:00”和“2019-06-17Z”有什么区别?“2019-06-17Z”具体指的是什么时间?
- python - 熊猫数据框通过比较所有其他行创建一个新列
- sql - 带 MAX 和 CASE WHEN 的 SQL 查询
- mysql - 选择具有相同外键但另一列具有一组值的行
- variadic-functions - 什么是 ... 语法上的可变参数?
- android - 通过 runBlocking kotlin 阻塞 Application 类
- docker - Windows 镜像的 Docker 镜像
- css - 为什么我的线性渐变对我的图像不起作用?
- javascript - 提交到 Facebook Pixel 的 Javascript 函数未触发点击