【问题标题】:Cassandra rpc timeout occurring during heavy writes and deletes在大量写入和删除期间发生 Cassandra rpc 超时
【发布时间】:2014-01-17 23:38:47
【问题描述】:

我使用的是 cassandra 2.0,并且我创建了一个如下所示的列族:

CREATE TABLE user_id_timestamp_index (
  user_id int,
  timestamp text,
  PRIMARY KEY (user_id, timestamp)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='NONE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'LeveledCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

我已经向该表写入了超过 200 万行,没有任何问题,并且我还执行了许多删除操作。

在快速连续删除大约 10k 次左右后出现问题,并且我开始遇到大量 rpc_timeouts。在此期间,通过 cqlsh 进行的简单“从 user_id_timestamp_index 中删除 user_id = 5 AND timestamp = '12345'”失败。

我注意到并尝试过的事情:

  1. 在 rpc 超时期间,2 个节点(共 5 个)上的平均负载飙升至大约 50。
  2. 在这些负载密集型写入和删除过程中,压缩几乎每 5 分钟完成一次。
  3. 在 rpc_timeouts 期间,tpstats 显示待定突变阶段: MutationStage 64(活动)395(待定)48182373(完成)0 0
  4. 当此 CF 的 memtable 数据大小超过 3 mb 时,往往会发生超时。
  5. 在我执行 nodetool 刷新后,挂起的突变变为零并且 rpc 时间消失,直到 memtable 大小再次爬升到超过 3 mb。

我的问题是,有我可以调整的配置吗?例如,是否可以简单地每 5 分钟在该列族上强制执行一次 memtable 刷新?减轻此表的写入负载?一种加快写入速度并减少待处理阶段的方法?还是有更好的解决方案?

【问题讨论】:

    标签: timeout cassandra cassandra-2.0


    【解决方案1】:

    如果您遇到 GC 压力(您可以从日志中的 GCInspector 行看出),您可以通过调整 cassandra.yaml 中的 memtable_total_space_in_mb 来减少 memtables 使用的内存量。您可能还需要 reduce the key or row cache settings 代替或同时使用。

    【讨论】:

      猜你喜欢
      • 2013-12-19
      • 2019-02-16
      • 2015-08-11
      • 1970-01-01
      • 2014-09-13
      • 2015-08-25
      • 2013-02-20
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多