Cassandra Spark 连接器:要求失败,接触点包含多个数据中心

Cassandra Spark Connector : requirement failed, contact points contain multiple data centers

我有两个 Cassandra 数据中心,所有服务器都在同一栋楼里,连接到 10 gbps 网络。每个数据中心的 RF2

我需要确保 strong consistency 在我的应用中,所以我首先计划在读取和读取时使用 QUORUM 一致性(43 副本必须响应写。使用该配置,如果节点在特定数据中心崩溃,我也可以容错。

所以我设置了从多个数据中心到我的 spark 连接器的多个接触点,但立即返回以下错误:requirement failed, contact points contain multiple data centers

所以我查看了文档。它说:

Connections are never made to data centers other than the data center of spark.cassandra.connection.host [...]. This technique guarantees proper workload isolation so that a huge analytics job won't disturb the realtime part of the system.

好的。所以读完之后,我计划在写入时切换到 LOCAL_QUORUM2 的副本 2 必须响应),在读取时切换到 LOCAL_ONE,以仍然获得强一致性,并且默认连接 datacenter1.

问题仍然是一致性,因为在第二个数据中心 datacenter2 上工作的 Spark apps 在写入时没有很强的一致性,因为数据只是从 datacenter1 异步同步的。

为了避免这种情况,我可以将写入一致性设置为 EACH_QUORUM (= ALL)。但这种情况下的问题是,如果单个节点无响应或关闭,则整个写入无法处理。

所以我唯一的选择是将每个数据中心的复制因子从 2 切换到 3。然后在写入时使用 EACH_QUORUM,在读取时使用 LOCAL_QUORUM?对吗?

谢谢

此评论表明您存在一些误解:

... because data are just asynchronously synchronized from datacenter1.

所以请允许我澄清一下。

写入请求的协调器将每个突变(INSERTUPDATEDELETE)实时发送到所有数据中心的所有副本。它不会在稍后的某个时间点发生(即 2 秒后、10 秒后或 1 分钟后)——它会同时发送到所有 DC,而不会延迟,无论您是 1Mbps 还是 10Gbps link DC之间。

我们还建议在生产中的每个 DC 中至少有 3 个副本,并使用 LOCAL_QUORUM 进行读取和写入。这些建议不适用的极端情况非常有限。

spark-cassandra-connector 要求所有触点都属于同一个 DC,因此:

  1. 分析工作负载不会影响 OLTP DC 的性能(正如您已经指出的那样),并且
  2. 它可以在可能的情况下实现数据本地化以获得最佳性能。