使用Kubernetes和Kafka在云中扩展

问题描述 投票:-1回答:1

我想构建同时使用Kafka(用于流处理)和Kubernetes(用于服务编排)的云应用程序。我想使其可扩展。 Kafka和Kubernetes都有自己的扩展应用程序的方式。 Kubernetes可以通过复制Pod并使用负载均衡器在这些Pod上分配服务调用来扩展服务。例如,可以通过在多个分区上分配流量来扩展Kafka(例如Pinterest,请参见https://medium.com/pinterest-engineering/how-pinterest-runs-kafka-at-scale-ff9c6f735be)。

问题:设计此应用程序以实现可伸缩性的最合适方法是什么?更重要的是:为什么?

kubernetes apache-kafka architecture stream scalability
1个回答
0
投票

Kubernetes和Kafka都是分布式系统,旨在提供可用性和可伸缩性。

可用性

可以在Kubernetes中将所有控制平面部件作为分布式系统运行,最常见的是作为3个副本运行。 Kafka的情况相同,通常将每个主题复制到3个节点。

领导选举

Kubernetes控制平面中的某些零件,例如控制器仅需要一个活动副本,因此使用leader选举模式。卡夫卡中的流处理器经常需要这样做。

扩展无状态工作负载

无状态工作负载,例如Kubernetes中的Deployment和来自ReplicaSets的Pod被轻松缩放为所需的多个副本。

扩展有状态工作负载

[有状态的工作负载,例如Kubernetes中来自StatefulSet的Pod通常使用consensus算法同步复制,例如Kafka正在使用的Zookeeper的Zab或Kubernetes中etcd使用的Raft。但这取决于应用程序要处理。

缩放存储容量,读取或写入负载

当系统需要的存储容量大于单个节点的容量,而读或写负载大于单个节点可以处理的负载时,则需要partitionshard负载,就像使用< [主题分区在Kafka中。

© www.soinside.com 2019 - 2024. All rights reserved.