MaxConnectionsPerHost与MaxRequestsPerConnection Cassandra驱动程序

时间:2018-06-29 16:26:48

标签: java performance cassandra bigdata datastax-java-driver

我正在为C *处理庞大的查询集。我已经用

限制了异步查询执行器
interpolate function to any

其中 MAX_REQUEST_PER_CON_REMOTE 是MaxRequestsPerConnection参数。 默认情况下,MaxConnectionsPerHos等于1,但我没有更改。

我相信,随着节点数量的增加或复制因子的增加,我可以增加MaxConnectionsPerHos或MaxRequestsPerConnection以提高生产率。 增加一个或另一个有什么好处吗?

然后我还要更改信号量许可的依赖性,但实际上不知道如何操作。这个想法是在添加或删除主机时添加侦听器并更新maxInFlight。

1 个答案:

答案 0 :(得分:1)

如果您没有使用白名单或黑名单策略,则驱动程序将分别连接到每个主机(如果使用DC Aware策略,则当然取决于配置)。因此,当您添加新节点时,驱动程序将向该节点添加新连接,并且负载将重新分配(如果您的查询没有“热”分区)。如果您增加复制因子,那也没什么大不了的,因为发送请求到副本的操作不是由驱动程序完成,而是由“协调器”节点完成。

因此,当本地DC中有N个节点时,理论上可以发送多达N * MaxInFlighConnections个请求(但这取决于请求中数据的分布)。

此外,我看到您正在使用MAX_REQUEST_PER_CON_REMOTE-最好仅将请求发送到本地DC的节点。另外,您每个连接最多可以配置32k个请求,在大多数情况下,对于一个执行请求的客户端来说,这绰绰有余。

您可以在Driver's documentation中找到更多信息。

P.S。我有一个separate class与Semaphore使用相同的方法,但是会自动添加侦听器-随时获取它。