【问题标题】:Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)Cassandra 在一致性 LOCAL_ONE 的读取查询期间失败(需要 1 个响应,但只有 0 个副本响应,1 个失败)
【发布时间】:2018-04-14 15:19:39
【问题描述】:

下面是我的脚本

CREATE TABLE alrashed.tbl_alerts_details (
    alert_id int,
    action_required int,
    alert_agent_id int,
    alert_agent_type_id int,
    alert_agent_type_name text,
    alert_definer_desc text,
    alert_definer_name text,
    alert_source text,
    alert_state text,
    col_1 text,
    col_2 text,
    col_3 text,
    col_4 text,
    col_5 text,
    current_escalation_level text,
    date_part date,
    device_id text,
    driver map<text, text>,
    is_processed int,
    is_real_time int,
    location map<text, text>,
    seq_no int,
    severity text,
    time_stamp timestamp,
    transporter map<text, text>,
    transporter_name text,
    trip_id int,
    updated_on timestamp,
    vehicle map<text, text>,
    vehicle_type_name text,
    PRIMARY KEY (alert_id)
    ) WITH read_repair_chance = 0.0
    AND dclocal_read_repair_chance = 0.1
    AND gc_grace_seconds = 864000
    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 default_time_to_live = 0
    AND speculative_retry = '99PERCENTILE'
    AND min_index_interval = 128
    AND max_index_interval = 2048
    AND crc_check_chance = 1.0;  

当我运行这个查询时,我得到了

在一致性 LOCAL_ONE 读取查询期间 Cassandra 失败(需要 1 个响应,但只有 0 个副本响应,1 个失败)错误

这是我用 Java 编写的 cassandra 查询:

select
  count( * )
from
  tbl_alerts_details
where
  alert_state = 'ACKNOWLEDGE'
  and date_part >= '2017-10-01'
  and date_part <= '2017-10-31'
  and is_real_time = 1
  and alert_agent_type_name = 'VEHICLE' ALLOW FILTERING

【问题讨论】:

  • 能否请您检查一下 Cassandra 日志,看看它是否有任何错误。例如,如果它有这样的东西:groups.google.com/a/lists.datastax.com/d/msg/…
  • 我检查了显示的 cassandra 日志 在查询“SELECT * FROM alrashed.tbl_alerts_details WHERE alert_state = ACKNOWLEDGE AND date_part >= 2017-08-01 AND LIMIT 5000”期间扫描了超过 100001 个墓碑(最后扫描的行分区关键是(185587));查询中止
  • 墓碑太多了。您可能应该重新考虑您的数据模型。如果它适合您的用例,则可以降低表上的 gc_grace_seconds (但您必须了解这意味着什么,否则可能对您非常不利,并且数据可能会在删除后重新出现)。如果您是 Cassandra 的新手,我可以为您指出一些很棒的学习资源。

标签: java cassandra-3.0


【解决方案1】:

这个错误让我们意识到空间问题,每行都以 Base64 存储图像很快导致Tombstone 问题出现。

据此post

Cassandra 不仅扫描行,还必须 在准备响应时将它们累积在内存中。这个可以 如果事情太过分了,会在节点上导致内存不足错误,并且 如果多个节点正在为请求提供服务,它甚至可能导致 多个故障导致整个集群瘫痪。为了防止这种情况 发生时,如果服务检测到危险,则中止查询 墓碑的数量。

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 2019-06-05
    • 2020-10-23
    • 2015-11-10
    • 1970-01-01
    • 2016-03-17
    • 2018-09-19
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多