【问题标题】:Kafka/Kubernetes and AutoscaleKafka/Kubernetes 和 Autoscale
【发布时间】:2020-03-02 17:08:51
【问题描述】:

我有一个关于 Kubernetes 中的 Kafka 的问题,特别是自动缩放...

假设我在 Kubernetes 的 3 个 Pod 中有 3 个 Kafka 代理,并且有一个带有 5 个分区(P1、P2、P3、P4、P5)的 TopicA,复制因子为 3,所有代理都有它们的持久卷,我有自动在 Kubernetes 中进行扩展配置,因此如果它检测到,假设 Kafka Pod 中 CPU/内存使用率为 %80,它将为 Kafka 代理启动额外的 Pod...

如果我没有完全错,Kafka 将检测到 Zookeeper 的额外实例并可以转移分区(假设 P1、P2 在 Broker1 和 P3,P4 在 Broker2 和 P5 在 Broker3)所以一个新的 Pod 来了我期望的图片类似于在 Broker1 的 P1、P3、P4 Broker2、P5 Broker3 和在 Broker4 的 P2。

所以我的第一个问题是,上述假设是否正确,Kafka 的行为是否如此?

第二个问题是关于缩减规模,让负载峰值消失,我们不需要 Pod4,Kubernetes 可以击落 Pod 并且 Kafka 可以返回 3 Brokers 配置,这是我不确定的部分。虽然我的复制因子为 3,但其他 2 个代理应该能够继续工作,kann Kafka 将分区 P2 拉到代理 1 或 2 或 3?

最后一个问题是,如果 Kubernetes 产生 Pod5、6、7,我们是否可以再次缩减到 3 个 Pod 配置?

谢谢解答..

【问题讨论】:

标签: kubernetes apache-kafka


【解决方案1】:

Kafka 将检测超过 Zookeeper 的额外实例并可以移动分区

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

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

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

【讨论】:

    【解决方案2】:

    Strimzi 0.18.0 现在原生支持 Cruise Control,这意味着您可以完全自动执行重新平衡过程,包括重新分配分区!

    https://strimzi.io/blog/2020/06/15/cruise-control/

    现在您可以在 Kubernetes 中正确地自动缩放 Kafka :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-10
      • 2023-03-09
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 2015-11-15
      • 2018-11-05
      相关资源
      最近更新 更多