美文网首页
Cassandra tombstone超过阈值导致查询失败问题

Cassandra tombstone超过阈值导致查询失败问题

作者: ZackJiang | 来源:发表于2019-08-01 16:20 被阅读0次

Cassandra tombstone超过阈值导致查询失败问题

今天发现使用JanusGraph导入数据时报了如下异常,意思就是在cassandra读的时候出现了超时,按照一致性策略至少需要一个replica确认的返回包,但是现在一个都没有。

aused by: com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency QUORUM (1 responses were required but only 0 replica responded)
    at com.datastax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:88)
    at com.datastax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:25)
    at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
    at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:245)
    at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:68)
    at org.janusgraph.diskstorage.cql.CQLKeyColumnValueStore.lambda$getKeys$73f59b6e$1(CQLKeyColumnValueStore.java:403)
    at io.vavr.control.Try.of(Try.java:62)
    at org.janusgraph.diskstorage.cql.CQLKeyColumnValueStore.getKeys(CQLKeyColumnValueStore.java:400)
    ... 37 common frames omitted

继续查看cassandra日志发现,是由于cassandra中tombstone超过阈值导致的查询失败

ERROR [ReadStage-2] 2019-08-01 11:10:00,143 StorageProxy.java:1896 - Scanned over 100001 tombstones during query 'SELECT * FROM janusgraph.edgestore WHERE column1 >= 02 AND column1 <= 03 LIMIT 100' (last scanned row partion key was ((2800000000057880), 02)); query aborted

然后看了下这篇博客理解了下cassandra的删除机制: https://www.jianshu.com/p/8590676a9b41

总结来说,cassandra为了保证集群数据的一致性,对数据的删除主要是插入操作,也就是tombstone,集群中其他节点根据tombstone来确认数据已经被删除,防止僵尸数据的产生,而清除tombstone的参数应为gc_grace_seconds,默认为10天,这里由于我在测试导入数据频繁删除数据,导致tombstone没有被及时gc,因此导致失败。

CREATE TABLE janusgraph.system_properties (
    key blob,
    column1 blob,
    value blob,
    PRIMARY KEY (key, column1)
) WITH CLUSTERING ORDER BY (column1 ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
cqlsh:janusgraph> SELECT table_name,gc_grace_seconds FROM system_schema.tables WHERE keyspace_name='janusgraph';

 table_name              | gc_grace_seconds
-------------------------+------------------
               edgestore |           864000
         edgestore_lock_ |           864000
              graphindex |           864000
        graphindex_lock_ |           864000
          janusgraph_ids |           864000
       system_properties |           864000
 system_properties_lock_ |           864000
               systemlog |           864000
                   txlog |           864000

此时我还在测试阶段,所以此时我修改edgestore的gc_grace_seconds来进行垃圾回收,重新测试成功。

alter table janusgraph.edgestore with gc_grace_seconds=0;

相关文章

  • Cassandra tombstone超过阈值导致查询失败问题

    Cassandra tombstone超过阈值导致查询失败问题 今天发现使用JanusGraph导入数据时报了如下...

  • Spark History Server自动删除日志文件

    背景 公司的计算平台上,写入spark-history目录日志文件数超过设定阈值(1048576),导致任务失败。...

  • mysql慢查询日志

    问题: 如何发现查询慢的语句???mysql提供慢查询日志功能,如果查询超过一定的阈值,就会记录下来!这样便于我们...

  • MySQL中的日志文件(一)

    慢查询日志 参数配置 log_query_time:超过该阈值时间的查询为慢查询; log_slow_querie...

  • Cassandra删除数据复活问题

    很多人很难理解Cassandra的tombstone和gc_grace_seconds设计,不清楚已经删除的数据为...

  • 开启mysql慢查询和死锁日志

    显示慢查询状态及日志目录 开启慢查询 说明: 1开启;0关闭; 显示慢查询阈值(单位秒) 默认执行时间超过10s才...

  • Cassandra 删除机制

    Cassandra 的删除操作实际上是一个插入操作。新插入的一条数据被称为tombstone(墓碑),墓碑和普通记...

  • Unreal 安卓分包

    安卓包有 2G 大小的限制,超过这个阈值,就会报各种各样的错误,导致打包失败。虽然有各种别的办法可以临时逃脱这个限...

  • MySQL-慢查询

    开启慢查询 临时 永久添加慢查询日志, 慢查询状态 查看慢查询阈值时间 设置慢查询阈值时间 日志 文件日志定义目录...

  • Cassandra数据修复失败问题

    背景 为了保证cassandra不同节点数据的一致性,需要定期进行repair操作。但是,当数据量达到一定规模时,...

网友评论

      本文标题:Cassandra tombstone超过阈值导致查询失败问题

      本文链接:https://www.haomeiwen.com/subject/fckcdctx.html