Cassandra:如何使用多个应用程序正确实施 "global" 背压?
Cassandra : how to properly implement "global" back-pressure with multiples applications?
如您所知,对于 Cassandra,当节点过载时,根据所需的一致性,它可能会严重损害您的生产,因为节点可能变得无响应,整个守护进程也可能崩溃,提示可能会填满您的数据挂载点等等。
所以这里的关键词是back-pressure
.
与Spark on Cassandra
做适当的back-pressure
,特别有以下性质:
--conf "spark.cassandra.output.throughputMBPerSec=2"
--total-executor-cores 24
(也有与 Datastax driver
或 cqlsh
类似的 back-pressure
选项。您基本上限制了每个核心的吞吐量,以应用一些 back-pressure
)
比方说,我在我的 Cassandra 集群上找到了我的全局写入吞吐量,我为我的 application1
设置了适当的设置,效果很好。
但挑战仍然在于 Cassandra 集群上有许多开发人员。所以在给定时间,我可能有 Spark application1
、application2
、application3
、...并发运行。
问题:我有什么选择来确保给定时间的写入吞吐量(无论有多少应用程序同时运行)在全局范围内不会达到太大的压力Cassandra,从而损害了我的生产工作量?
谢谢
我建议人们为分离分析工作负载而做的是启动另一个(逻辑)数据中心。当然,它可能位于同一个 物理 数据中心。但您想要的是独立的计算和存储,以防止分析负载干扰生产流量。
首先,请确保您是 运行 GossipingPropertyFileSnitch
(cassandra.yaml
) 并且您的键空间正在使用 NetworkTopologyStrategy
。同样,您需要确保您的键空间定义包含一个命名的数据中心,并且您的生产 application/services 被配置为使用该数据中心(例如: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'};
运行 一个 repair/rebuild 在新的 DC 上,然后将 Spark 作业配置为仅使用 dc1_analytics
.
如您所知,对于 Cassandra,当节点过载时,根据所需的一致性,它可能会严重损害您的生产,因为节点可能变得无响应,整个守护进程也可能崩溃,提示可能会填满您的数据挂载点等等。
所以这里的关键词是back-pressure
.
与Spark on Cassandra
做适当的back-pressure
,特别有以下性质:
--conf "spark.cassandra.output.throughputMBPerSec=2"
--total-executor-cores 24
(也有与 Datastax driver
或 cqlsh
类似的 back-pressure
选项。您基本上限制了每个核心的吞吐量,以应用一些 back-pressure
)
比方说,我在我的 Cassandra 集群上找到了我的全局写入吞吐量,我为我的 application1
设置了适当的设置,效果很好。
但挑战仍然在于 Cassandra 集群上有许多开发人员。所以在给定时间,我可能有 Spark application1
、application2
、application3
、...并发运行。
问题:我有什么选择来确保给定时间的写入吞吐量(无论有多少应用程序同时运行)在全局范围内不会达到太大的压力Cassandra,从而损害了我的生产工作量?
谢谢
我建议人们为分离分析工作负载而做的是启动另一个(逻辑)数据中心。当然,它可能位于同一个 物理 数据中心。但您想要的是独立的计算和存储,以防止分析负载干扰生产流量。
首先,请确保您是 运行 GossipingPropertyFileSnitch
(cassandra.yaml
) 并且您的键空间正在使用 NetworkTopologyStrategy
。同样,您需要确保您的键空间定义包含一个命名的数据中心,并且您的生产 application/services 被配置为使用该数据中心(例如: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'};
运行 一个 repair/rebuild 在新的 DC 上,然后将 Spark 作业配置为仅使用 dc1_analytics
.