【发布时间】:2021-11-25 13:07:23
【问题描述】:
我有两个 Cassandra 数据中心,所有服务器都在同一栋楼中,并与 10 gbps 网络连接。每个数据中心的RF 是2。
我需要在我的应用程序中确保strong consistency,所以我首先计划在读取和写入时使用QUORUM 一致性(3 的4 的副本必须响应)。使用该配置,如果特定数据中心的节点崩溃,我也可以容错。
所以我将多个接触点从多个数据中心设置到我的 spark 连接器,但立即返回以下错误:requirement failed, contact points contain multiple data centers
所以我查看了文档。它说:
除了 spark.cassandra.connection.host [...] 的数据中心之外,永远不会与其他数据中心建立连接。此技术可确保适当的工作负载隔离,因此大型分析作业不会干扰系统的实时部分。
好的。所以读完之后,我打算在写入时切换到LOCAL_QUORUM(2 的2 副本必须响应),在读取时切换到LOCAL_ONE,以仍然获得强一致性,并默认连接到datacenter1。
问题仍然是一致性,因为Spark apps在第二个数据中心工作datacenter2在写入时没有强一致性,因为数据只是从datacenter1异步同步的。
为避免这种情况,我可以将写入一致性设置为 EACH_QUORUM (= ALL)。但这种情况下的问题是,如果单个节点无响应或宕机,则整个写入都无法处理。
所以我唯一的选择是同时拥有一些fault tolerance 和strong consistency,是将每个数据中心上的复制因子从2 切换到3。然后在写入时使用EACH_QUORUM,在读取时使用LOCAL_QUORUM?对吗?
谢谢
【问题讨论】:
标签: cassandra datastax datastax-enterprise spark-cassandra-connector