Kafka / Kubernetes和自动缩放

时间:2019-11-06 08:59:59

标签: kubernetes apache-kafka

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

假设我在Kubernetes的3个Pod中有3个Kafka经纪人,并且有一个TopicA,具有5个分区(P1,P2,P3,P4,P5),复制因子为3,所有经纪人都有其持久卷,而我有自动在配置的Kubernetes中进行缩放,因此如果它检测到Kafka Pods中的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 Pods配置吗?

谢谢。.

2 个答案:

答案 0 :(得分:0)

  

Kafka将在Zookeeper上检测到更多实例,并可以转移分区

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

在缩小规模的情况下,必须将分区从代理中移出,然后才能将其从集群中删除,否则,您将拥有无法复制的永久脱机分区。而且,当缩小群集时,由于分区的大小受到最小数据目录的限制,因此您需要意识到磁盘的使用情况

Kubernetes本身并不能帮助Kafka执行这些操作,并且在非k8s环境中,该过程大部分是手动的,但是可以编写脚本(请参见Datadog的kafka-kit)。我相信,在扩展cypress shows error in Windows when passing args containing a url in 3.5.0

时,Strimzi运算符之类的k8s运算符可以使数据重新平衡更加容易

答案 1 :(得分:0)

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

pdfminer.six

现在您可以在Kubernetes中适当地自动缩放Kafka了:)