kubernetes - Kafka/Kubernetes 和 Autoscale
问题描述
我有一个关于 Kubernetes 中的 Kafka 的问题,特别是自动缩放...
假设我在 Kubernetes 的 3 个 Pod 中有 3 个 Kafka 代理,并且有一个带有 5 个分区(P1、P2、P3、P4、P5)的 TopicA,复制因子为 3,所有代理都有它们的持久卷,我在 Kubernetes 中有自动缩放配置,因此如果它检测到,假设 Kafka Pod 中的 CPU/内存使用率为 %80,它将为 Kafka Brokers 启动额外的 Pod...
如果我没有完全错,Kafka 将检测到 Zookeeper 的额外实例并可以转移分区(假设 P1、P2 在 Broker1 和 P3,P4 在 Broker2 和 P5 在 Broker3)所以一个新的 Pod 出现在我会的图片期望类似于在 Broker1 处关注 P1、P3、P4 Broker2、P5 Broker3 和在 Broker4 处关注 P2。
所以我的第一个问题是,上述假设是否正确,卡夫卡的行为是否如此?
第二个问题是关于缩减规模,让负载峰值消失,我们不需要 Pod4,Kubernetes 可以击落 Pod 并且 Kafka 可以返回 3 Brokers 配置,这是我不确定的部分。虽然我的复制因子为 3,但其他 2 个代理应该能够继续工作,kann Kafka 将分区 P2 拉到代理 1 或 2 或 3?
最后一个问题是,如果 Kubernetes 产生 Pod5、6、7,我们能否再次缩减到 3 个 Pod 配置?
谢谢回答..
解决方案
Kafka 将检测到 Zookeeper 的额外实例并可以转移分区
扩展集群时不会重新平衡分区。
在缩减规模的情况下,必须先将分区从代理中移出,然后才能从集群中删除,否则您将拥有无法复制的永久离线分区。并且在缩小集群时需要注意磁盘利用率,因为分区的大小受最小数据目录的限制
Kubernetes 本身不会帮助 Kafka 执行这些操作,并且在非 k8s 环境中,此过程主要是手动的,但可以编写脚本(参见 Datadog 的 kafka-kit)。我相信诸如 Strimzi 运算符之类的 k8s 运算符可以在扩展时使数据重新平衡更容易,但是在这个答案的时候,它不支持自动重新分配,正如我在文档中看到的那样
推荐阅读
- android - UI 未更新自定义对象列表的 MutableLiveData / ObservableField 属性随数据绑定而更改
- mlr3 - mlr3 中随机森林学习器的参数化
- c# - 用c#上传新图片时如何删除旧图片
- php - PHP Parse 错误:语法错误,意外的“新”(T_NEW),总是因为“=&”
- wordpress - Wordpress HTTPS 模式奇怪的行为
- html - 为 html 编辑器应用条件 css 样式表
- javascript - 如何使用 Webdatarocks 获取列的总计并在图表中使用它
- php - php 复制的文件上传问题($_FILES 不起作用
- c++ - 为什么我在此代码中收到 SIGSEGV 错误?
- r - 使用来自另一个数据框 R 的信息添加列