【问题标题】:Cassandra cluster missing writesCassandra 集群缺少写入
【发布时间】:2016-04-16 05:02:36
【问题描述】:

我有一个 6 节点 Cassandra 集群,复制因子为 3。最近几天没有添加/删除/关闭节点。我的应用程序有 3 个 Kafka 主题和 4 个 Storm 拓扑:

  • Topology-1 从 Topic-1 获取事件并将它们存储到 Cassandra
  • Topology-2 从 Topic-1 获得相同的事件,在某些情况下 向 Topic-2 发送事件
  • Topology-3 监听 Topic-2 并为每个 消费事件获取以前存储到的其他一些事件的列表 Cassandra,将其打包成一个事件并发送到 Topic-3
  • Topology-4 从 Topic-3 中获取事件列表,执行一些计算并 将结果存储在另一个数据库 (ElasticSearch) 中。

所有拓扑均使用 Java 实现,使用 DataStax 驱动程序版本 2.1.7.1 及其对象映射 API,Cassandra 版本为 2.2.3。

周末回来,我注意到以下几点:

  1. 来自拓扑 3 和 4 的日志文件中有很多错误 抱怨 Cassandra 中缺少的事件。
  2. 拓扑 1 没有抱怨无法写入 卡桑德拉。

这看起来很像一致性级别问题。我所有的读写查询都在一致性级别 1 上运行。我把它切换到法定人数。 (同样值得注意的是,我必须重新启动 Storm 的东西才能使更改生效。)之后一切恢复正常,拓扑 1 写入事件,拓扑 3 读取它们,一切一致,一切正常。

但是。

在应用该一致性级别修复之前,我仍然错过了几个小时的很多事件,即使在使用具有所有一致性级别的 cqlsh 手动查询时,我在 Cassandra 中也看不到它们!

在一致性级别 1 执行时是否会丢失插入,或者我可以在哪里寻找根本原因?

提前致谢!

【问题讨论】:

    标签: cassandra missing-data eventual-consistency


    【解决方案1】:

    回答我自己 - 这与 Cassandra 及其一致性级别完全无关。实际上,数据在从 Kafka 到 Storm 的途中丢失了。那是因为这个页面:

    http://kafka.apache.org/082/documentation.html

    以一种让我将毫秒与分钟混淆的方式记录retention.ms 属性! (在此处查看更多信息:https://issues.apache.org/jira/browse/KAFKA-2751)因此,我的 Kafka 保留策略实际上设置为 60 毫秒而不是 60 分钟,并且数据在被 Storm 消耗之前已从 Kafka 中删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-20
      • 2019-01-09
      • 2015-08-07
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2021-10-09
      • 2015-10-13
      相关资源
      最近更新 更多