LocalNodeFirstLoadBalancingPolicy还添加了来自local_dc以外的数据中心的节点



在LocalNodeFirstLoadBalancingPolicy的文档中,提到了-

先选择本地节点,然后按随机顺序选择本地DC中的节点。从不从其他DC中选择节点。对于写入,如果一个语句有一个路由密钥集,那么这个LBP是令牌感知的——它更喜欢作为计算令牌副本的节点,而不是其他节点。

然而,在我的spark作业日志中,我可以发现所有节点都在添加集群。

21/05/05 10:08:40 INFO CassandraWriter$: Setting local_dc: DC1
21/05/05 10:08:40 INFO CassandraWriter$: Writing to DC: DC1, available host ips: x.x.x.54,x.x.x.237,x.x.x.168,x.x.x.197,x.x.x.219
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.219:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.237:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.54:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.238:9042 added
21/05/05 10:08:41 INFO LocalNodeFirstLoadBalancingPolicy: Added host x.x.x.238 (DC2)
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.168:9042 added
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.42:9042 added
21/05/05 10:08:41 INFO LocalNodeFirstLoadBalancingPolicy: Added host x.x.x.42 (DC2)
21/05/05 10:08:41 INFO Cluster: New Cassandra host /x.x.x.109:9042 added
21/05/05 10:08:41 INFO LocalNodeFirstLoadBalancingPolicy: Added host x.x.x.109 (DC2)

有人能帮我理解为什么要添加DC2节点吗?根据我的理解,协调器节点总是从local_dc中选择的

我也尝试过在不设置spark.cassandra.connection.local_dc的情况下运行摄取,并看到了相同的日志。

请参阅下面的写入代码:

records.write.cassandraFormat(table, keySpace)
.mode(SaveMode.Append)
.option(CassandraConnectorConf.LocalDCParam.name, cassandraDC.name)
.option(CassandraConnectorConf.ConnectionHostParam.name, cassandraDC.availableHosts.mkString(","))
.save()

附言:我有单独的火花和卡桑德拉集群&我的用例是将数据从spark集群写入cassandra。

您可以忽略这些消息。Cassandra就是这样工作的——驱动程序在初始化时发现集群的完整拓扑,然后决定只使用给定数据中心的特定节点。

例如,像New Cassandra host /x.x.x.54:9042 added这样的消息来自Java驱动程序。像Added host x.x.x.238 (DC2)这样的消息来自LocalNodeFirstLoadBalancingPolicy,它必须覆盖接口中的函数。但是,负载平衡策略不使用不在本地数据中心的节点,尽管总是保留所有节点的映射。

相关内容

  • 没有找到相关文章

最新更新