【问题标题】:Cassandra Spark Connector : requirement failed, contact points contain multiple data centersCassandra Spark 连接器:要求失败,接触点包含多个数据中心
【发布时间】: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


    【解决方案1】:

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

    ...因为数据只是从 datacenter1 异步同步的。

    所以请允许我澄清一下。

    写入请求的协调器将每个突变(INSERT、UPDATE、DELETE)实时发送到所有数据中心的所有副本。它不会在稍后的某个时间点发生(即 2 秒后、10 秒后或 1 分钟后)——它会立即发送到所有 DC,无论 DC 之间是否有 1Mbps 或 10Gbps 链路.

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 2015-10-31
      • 2023-03-14
      • 2016-02-04
      • 2021-10-14
      • 2015-09-12
      • 2015-10-10
      • 2020-10-11
      • 2016-11-11
      相关资源
      最近更新 更多