Cassandra : 如何通过多重应用正确实现"global"背压?



您知道,对于Cassandra,当节点过载时,根据所需的一致性,它可能会严重损害您的生产,因为节点可能会变得无响应,整个守护进程也可能崩溃,提示可能会填满您的数据挂载点,等等。

这里的关键字是back-pressure

Spark on Cassandra做合适的back-pressure,特别要有以下性质:

--conf "spark.cassandra.output.throughputMBPerSec=2"
--total-executor-cores 24

(Datastax drivercqlsh也有类似的back-pressure选项。您基本上限制了每个核心的吞吐量,以应用一些back-pressure)

假设我在Cassandra集群上找到了全局写吞吐量,并且我为application1设置了适当的设置,它工作得很好。

但是,挑战是,在Cassandra集群上有很多开发人员。因此,在给定的时间,我可能有Sparkapplication1,application2,application3,…

问题:我有什么选择来确保在给定时间的写吞吐量(无论并发运行多少应用程序)不会对Cassandra造成太大的压力,从而损害我的生产工作负载?

谢谢

我建议人们分离分析工作负载的方法是启动另一个(逻辑)数据中心。当然,它可以在同一个物理数据中心中。但是你想要的是单独的计算和存储,以保持分析负载不干扰生产流量。

首先,确保您正在使用GossipingPropertyFileSnitch(cassandra.yaml)运行,并且您的键空间正在使用NetworkTopologyStrategy。同样,您需要确保您的keyspace定义包含一个已命名的数据中心,并且您的生产应用程序/服务配置为使用该数据中心(例如:如下所示的dc1)作为其默认DC:

ALTER KEYSPACE product_data WITH
REPLICATION={'class':'NetworkTopologyStrategy',
'dc1':'3'};

一旦新的基础设施启动,安装Cassandra并通过在cassandra-rackdc.properties文件中指定新名称将节点作为新DC加入集群。比如:

dc=dc1_analytics

接下来调整键空间以将数据复制到新的DC。

ALTER KEYSPACE product_data WITH
REPLICATION={'class':'NetworkTopologyStrategy',
'dc1':'3','dc1_analyitcs':'3'};

在新的DC上运行修复/重建,然后配置Spark作业只使用dc1_analytics

相关内容

  • 没有找到相关文章

最新更新