【问题标题】:Will write consistency set to ONE cause data disappear?写入一致性设置为 ONE 会导致数据消失吗?
【发布时间】:2015-06-05 21:23:20
【问题描述】:

我们最近遇到了几个数据消失问题。我们的数据是日志数据。它有复合键,(id,requestdate)。

我们的程序不断向 C* 中插入新记录。没有删除操作。数据已成功写入,并且能够选择数据。但过了一段时间,一些 id 的数据消失了。

我们能想到的一个原因是,我们使用 kundera cassandra 驱动程序,它的默认写入一致性级别设置为 ONE。系统日志中没有错误。

你认为这个问题是写consistency_level引起的吗?谢谢。

编辑:我们已经有一段时间没有运行节点修复了。这会导致数据消失问题吗?

【问题讨论】:

    标签: cassandra kundera


    【解决方案1】:

    如果您在写入后直接进行读取,并且您使用其他副本之一作为协调器,则它可能尚未检索到数据。如果您在读取中需要这种一致性,请使用 CL.QUORUM 进行读取/写入。可以安全地假设这个窗口在约 500 毫秒左右通过。见Eventual Consistency != Hopeful Consistency

    【讨论】:

    • 我们的问题是,写入成功,写入后读取显示数据。一天或一段时间后,某个ID(分区键)下的数据消失了,无法从任何节点中选择。
    • 我的猜测是,要么删除它,要么在数据上设置 TTL。另一种可能性是您的应用程序可能尝试使用错误的分区键。
    • 数据没有设置TTL。设置错误的分区键怎么可能导致这种情况?谢谢。
    • 如果你生成了错误的分区键,你将不会得到任何数据。
    • 原来我使用了 Kundera Cassandra 驱动程序,如果写入失败,它默认回滚事务。 (在我们的例子中写超时)。回滚是一个删除命令,它会导致数据被删除。你的cmets提醒我。谢谢。
    【解决方案2】:

    ONE 的一致性,表示在一个副本节点上写入成功后立即返回状态。数据不应从 cassandra 中消失,除非写入本身从未成功。

    如果因为down节点导致插入不成功。在这种情况下,请查看提示切换。增加提示切换的时间。

    您的复制因子是多少?也许将其增加到更大的数量以防止由于节点故障而导致服务丢失?

    【讨论】:

    • 写入成功。写入数据后,选择并显示数据。复制是3。我们发现的另一个问题是,nodetool repair有一段时间没有运行。对于数据丢失,一个ID(分区键)下的所有数据都会丢失,而不仅仅是最新的数据。谢谢。
    • 你们有没有机会为您的密钥空间使用 TTL?我所知道的 Nodetool 修复必须至少手动运行一次 gc_grace_seconds。
    • 检查一个 ID 是否分配给了哪个特定节点。另一种可能性可能是时间戳,其中一个特定的数据不会被具有较旧时间戳的值覆盖。另外,您可以尝试运行 nodetool flush,refresh { 不太可能的场景 }。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多