Cassandra集群缺少写入

时间:2016-01-11 19:05:36

标签: cassandra missing-data eventual-consistency

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

  • 拓扑-1从Topic-1获取事件并将其存储到Cassandra
  • 拓扑-2从主题-1获取相同的事件,在某些情况下 将事件发送到Topic-2
  • 拓扑-3听取主题-2和每个 consume事件获取先前存储到的一些其他事件的列表 Cassandra,将其打包成一个活动并发送到Topic-3
  • 拓扑-4- 从Topic-3获取事件列表,执行一些计算和 将结果存储在另一个数据库(ElasticSearch)中。

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

从周末回来,我注意到以下情况:

  1. 来自拓扑3和4的日志文件中的许多错误 抱怨Cassandra失踪的事件。
  2. 拓扑1没有抱怨无法写入 卡桑德拉。
  3. 这看起来非常像一致性问题。我的所有读写查询都以一致性级别运行。我把它换成了法定人数。 (还有一点值得注意的是,为了让更改生效,我必须重新启动Storm。)之后所有内容都恢复正常,拓扑1写入事件,拓扑3读取它们,所有内容都一致,都很好。

    BUT。

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

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

    提前致谢!

1 个答案:

答案 0 :(得分:0)

回答自己 - 这与Cassandra及其一致性水平无关。实际上从卡夫卡到风暴的途中数据丢失了。那是因为这个页面:

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

记录retention.ms属性的方式让我把毫秒与分钟混淆了! (详情请参阅此处:https://issues.apache.org/jira/browse/KAFKA-2751)因此,我的Kafka保留政策实际上设置为60毫秒而不是60分钟,并且数据在被Storm消耗之前就被Kafka消灭了。