【问题标题】:Performance issues with Cassandra MaterializedViewsCassandra MaterializedViews 的性能问题
【发布时间】:2017-04-23 11:28:57
【问题描述】:

我们创建了一个有 9 个节点的 cassandra 集群。每个都配备 4Cores 和 16G RAM。我们正在编写 28 列的 15-25 百万条记录。

我们设计的数据模型如下(我只是重命名了列并缩短了实际架构以使其简洁)。

CREATE TABLE main_table(
col1 ... col28,
PRIMARY KEY((col1,col2),col_date,col_with_some_seq_number))
WITH CLUSTERING ORDER BY (col_date DESC,col_with_some_seq_number desc) AND  default_time_to_live = 5270400;

CREATE MATERIALIZED VIEW mv_for_main_table AS
SELECT [col1.. col11],
FROM main_table 
WHERE col1 IS NOT NULL AND col2 IS NOT NULL AND col_date IS NOT NULL AND col_with_some_seq_number IS NOT NULL
PRIMARY KEY ((col1),col2, col_date, col_with_some_seq_number)
WITH CLUSTERING ORDER BY (col_date DESC, col_with_some_seq_number DESC, col2 DESC); 

它只是将其中一个分区键移动到集群键中 物化视图。

我们正在从 spark 加载数据,没有修改任何与 cassandra 相关的配置。

在摄取了大约 1.5 亿条记录后,摄取开始失败,每个节点都出现了很多变异失败。

物化视图是否存在性能问题?还是我使用的定义效率不高?

我们尝试了一些配置更改,例如减少并发写入、吞吐量 MB。经过所有的尝试,我们已经放弃了物化视图,然后一切都开始正常工作了。

我们已经进行了足够多的测试,得出的结论是,只有在包含物化视图之后,写入速度才会大幅下降,并且突变会被丢弃。

我们计划为上述配置使用单独的表而不是物化视图,但我想知道我们使用的物化视图或数据模型是否有任何错误。

【问题讨论】:

    标签: cassandra spark-cassandra-connector


    【解决方案1】:

    物化视图所做的是创建另一个表并在您写入主表时写入它。所以,如果你放弃物化视图并手动创建另一个表,恐怕你会在同一条船上。

    在我看来,性能问题是由于某个特定节点超载造成的。实际上,当您将其中一个 PARTITION KEY 列降级为 CLUSTERING KEY 列时,假设相同的数据摄取模式(该假设显然成立,因为每次写入都“反映”到另一个表),您将创建热点,因为更多的数据往往位于同一个分区上。这转化为更长时间的压缩和读取修复,并且总体上对集群造成更大压力(例如,因为每个节点必须为每个分区排序更多数据)。

    【讨论】:

    • 另外,物化视图的read_ahead_write和其他方面怎么样?物化视图是否适合每天将 2500 万行摄取到主表中的场景。?如果我们有MV,性能会急剧下降。火花作业中的输出行在没有 MV 的情况下约为每秒 20K,而在使用 MV 时甚至不到每秒 1K
    • 可能我夸大了性能,摄取失败的更重要方面是丢弃的突变和 nodetool tpstats 中的未决突变阶段呈指数级增长。没有 MV,待处理的阶段永远不会存在,如果有,它们将被限制为 2 或 3,并在下一秒清除。
    【解决方案2】:

    深入了解物化视图(MV)的地方:http://www.doanduyhai.com/blog/?p=1930

    当有 MV 时,基表的分区上存在锁。这个本地锁是有代价的(见我的博文)

    我还有一个关于你的硬件尺寸的评论,4CPU低于官方推荐的8CPU:http://cassandra.apache.org/doc/latest/operating/hardware.html

    Cassandra 中的写入工作负载受 CPU 限制。在您的情况下,Spark 也使用您的 CPU,这可能解释了您的瓶颈。

    请在此处发布dstathtop 的屏幕截图

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 2016-02-10
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2011-07-19
      • 2021-09-14
      • 2020-11-10
      相关资源
      最近更新 更多