【发布时间】: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。
周末回来,我注意到以下几点:
- 来自拓扑 3 和 4 的日志文件中有很多错误 抱怨 Cassandra 中缺少的事件。
- 拓扑 1 没有抱怨无法写入 卡桑德拉。
这看起来很像一致性级别问题。我所有的读写查询都在一致性级别 1 上运行。我把它切换到法定人数。 (同样值得注意的是,我必须重新启动 Storm 的东西才能使更改生效。)之后一切恢复正常,拓扑 1 写入事件,拓扑 3 读取它们,一切一致,一切正常。
但是。
在应用该一致性级别修复之前,我仍然错过了几个小时的很多事件,即使在使用具有所有一致性级别的 cqlsh 手动查询时,我在 Cassandra 中也看不到它们!
在一致性级别 1 执行时是否会丢失插入,或者我可以在哪里寻找根本原因?
提前致谢!
【问题讨论】:
标签: cassandra missing-data eventual-consistency