首页 > 解决方案 > 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 配置?

谢谢回答..

标签: kubernetesapache-kafka

解决方案


Kafka 将检测到 Zookeeper 的额外实例并可以转移分区

扩展集群时不会重新平衡分区。

在缩减规模的情况下,必须先将分区从代理中移出,然后才能从集群中删除,否则您将拥有无法复制的永久离线分区。并且在缩小集群时需要注意磁盘利用率,因为分区的大小受最小数据目录的限制

Kubernetes 本身不会帮助 Kafka 执行这些操作,并且在非 k8s 环境中,此过程主要是手动的,但可以编写脚本(参见 Datadog 的 kafka-kit)。我相信诸如 Strimzi 运算符之类的 k8s 运算符可以在扩展时使数据重新平衡更容易,但是在这个答案的时候,它不支持自动重新分配,正如我在文档中看到的那样


推荐阅读