当前位置: 首页 > 知识库问答 >
问题:

Cassandra更新在多个节点上以静默方式失败

柯曦
2023-03-14

我有以下情况。

有一个 CQL 表 (卡桑德拉 2.0.12)

CREATE TABLE article (
  version timeuuid,
  id timeuuid,
  active boolean,
  contentbody text,
  contentformat text,
  createdat text,
  entitytype text,
  externalsources list<text>,
  geolat double,
  geolong double,
  lastcomments list<text>,
  lastmodifiedat text,
  lstmodbyuserid text,
  lstmodbyusername text,
  previewimage text,
  publishedatarticle text static,
  publishedatver text,
  status text,
  subcategory text,
  subtitle text,
  title text,
  userid text static,
  username text static,
  PRIMARY KEY ((version), id)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.100000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.000000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='99.0PERCENTILE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

并使用datastax-java驱动程序(cassandra-driver-core 2.1.1)使用它

当集群包含3个节点时,数据更新,如

UPDATE article SET title='updated title2',subtitle=null,status='draft',subCategory='{"id":"a6b68330-2ef5-4267-98c5-cd793edbb1a8","name":"sub cat name","color":"blue","parentCategory":{"id":"prim_cat_id","name":"prim cat name","color":"blue"}}',contentBody='someOtherBody',contentFormat='someOtherFormat',geoLat=138782.34,geoLong=138782.34,lastModifiedAt='2015-03-02 11:14:57',publishedAtArticle=null,publishedAtVer=null,lstModByUserId='e264fb2c-2485-488a-965f-765d139be9ea',lstModByUsername='reg1 user',externalSources=[],previewImage='{"width":1,"height":2,"duration":32,"original":"orig string","thumbs":{"prefix":"prefix str","ext":"jpg","sizes":["size1","size2"]}}' WHERE version=2480d891-c0cd-11e4-a691-df79ef55172c AND id=2480d890-c0cd-11e4-a691-df79ef55172c;

在大约一半的情况下无法静默工作(我在Cassandra日志中没有看到错误,跟踪中没有任何可疑之处,没有失败答案或异常,我可以看到它没有通过SELECT成功)。如果来自一个节点的集群,它总是有效的。

你能给我一些案件调查的指导吗?

共有1个答案

尹臻
2023-03-14

由于您提到您的节点时间不同步,您可能会遇到一种罕见但仍然可能的情况。

如果节点之间的时间不同步,则在更新/插入期间可能会导致一些不可预测的结果。

通常,当写入到来时,时间戳最新的写入会胜出。如果您的一个节点有一个时间滞后,那么当它成为协调器时,它用它的时间戳标记您的所有记录,因此决定这个更新太旧,因为已经有其他具有较新时间戳的更新(来自具有准确时间的节点)。因此丢弃该更新。

 类似资料:
  • 问题内容: 我正在开发一个用于清洁服务的应用程序。在此应用程序中,员工(清洁工)可以读取由多个客户(用户)完成的作业(预订)列表。 所有清洁工都可以在“用户”节点中读取所有预订。最初,当用户将预订保存在数据库中时,该键的值为 ,这意味着清洁工尚未声明该键。 每当清洁工想要索取列表中存在的工作时,他将必须触摸按钮,该按钮将向Firebase数据库发出请求以将key的值修改为at路径。 一次只能允许一

  • 使用< code>node-postgres我想更新我的用户模型中的列,目前我有这个 所以我可以做到这一点 但是,如果我想更新多个列和值,我目前正在做一些非常低效的事情,并调用该方法x次(即对于每个查询) 我如何通过只调用一次数据库来生成这个。 谢谢

  • 我在cassandra集群中添加了一个新节点(新节点不是种子节点)。现在我的集群上有3个节点: 我的复制因子为3: 我还尝试更改该选项,但数据仍然没有复制到新节点:auto_bootstrap:true 你能帮我理解为什么数据没有在新节点上复制吗? 请让我知道,如果你需要从我的配置进一步的信息。 谢谢你的帮助

  • 问题内容: 使用groovy从jenkins工作空间获取文件列表在一个节点上失败,但在另一个节点上有效。这是管道中的代码: 输出: 问题答案: 管道在Jenkins主服务器上执行,只有通过启用了远程处理的API的魔力,事情才会在所选节点上发生。因此File以及所有使用File的东西都不起作用,而且永远不会:它总是在master上执行。 来源:https://groups.google.com/fo

  • 既然我有我的用户登录和密码,我可以静默地登录到他们的Microsoft Graph吗? 我想从服务器应用程序从Office 365 API获取信息,因此我无法弹出Microsoft登录窗口。 谢谢

  • 我使用一个带有默认KafkaSpout的Storm拓扑(带有Storm 0.10.0),从一个Kafka主题获取JSON数据并对其进行处理。 知道为什么会这样吗?我能提供任何有助于调试此问题的额外信息吗?