写重型系统的Cassandra Hints表可超过2个Bn单元限制

时间:2017-01-03 09:49:53

标签: cassandra

  1. 我正在使用Cassandra 2.2,其中的提示存储在system.hints表中。由于node-Id是分区键,因此对于写入较重的系统,表在3小时内(默认提示窗口)可以轻松地超过每个分区2个Bn单元限制。对于写入较重的系统,是否首选减少此窗口?

  2. 此外,出于测试目的,我将节点关闭,然后在一段时间后再启动。理想情况下,在提示重放后,提示表应该被截断并压缩,但我注意到该表仍然包含所有条目,为什么不清除?另外,如何验证重播是否已经发生?

1 个答案:

答案 0 :(得分:1)

升级到3.0将解决很多HH问题,当时有很多人喜欢这样。可以看到here了解更多细节,但基本上使用C *表作为这样的队列本身就是一种反模式,所以它被改为更类似于更好地运行的commitlog。这绝对是你最好的选择。

  1. 减少HH窗口会起作用,但请注意,如果某个节点的停机时间超过该窗口,则必须进行修复,因为您将丢失数据。

  2. 它们不会被截断,但会被删除,您需要等待压缩才能清除它们。在节点恢复之前提交提示之前,它应该进行一次重大压缩,以便清除。要验证我只是从表中读取(select count(*)),任何删除都将被计算在内。

  3. 即关闭node2,插入一个值并观察:

    cqlsh:keyspace1> select count(*) from system.hints where target_id = 8e821294-50de-46d4-b668-f4dce69797aa;
    
     count
    -------
         1
    
    (1 rows)
    

    启动node2,等待HH消耗:

    cqlsh:keyspace1> select count(*) from system.hints where target_id = 8e821294-50de-46d4-b668-f4dce69797aa;
    
     count
    -------
         0