低cassandra写入/秒,6个节点集群中每秒1500-2000次写入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了低cassandra写入/秒,6个节点集群中每秒1500-2000次写入相关的知识,希望对你有一定的参考价值。
Cassandra集群规格:
Nodes: 6
Storage: 1536 GB
Cores: 48
Ram: 168 GB
从本地到cassandra集群的延迟:330 ms-390 ms
我正在使用cassandra java驱动程序,spark-cassandra-connector_2.11版本2.3.2
java驱动程序中的集群配置:
private static Session connect(
final String node, final Integer port, final String userName, final String password) {
Builder b = Cluster.builder().addContactPoints(node.split(COMMA_SEPARATOR));
if (!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) {
b.withCredentials(userName, password);
}
if (port != null && port != 0) {
b.withPort(port);
}
PoolingOptions poolingOptions = new PoolingOptions();
poolingOptions
.setMaxRequestsPerConnection(HostDistance.LOCAL, 32768)
.setMaxRequestsPerConnection(HostDistance.REMOTE, 10000)
.setMaxConnectionsPerHost(HostDistance.LOCAL, 3)
.setMaxConnectionsPerHost(HostDistance.REMOTE, 3)
.setNewConnectionThreshold(HostDistance.LOCAL, 3)
.setNewConnectionThreshold(HostDistance.REMOTE, 3)
.setCoreConnectionsPerHost(HostDistance.LOCAL, 3)
.setCoreConnectionsPerHost(HostDistance.REMOTE, 3);
b.withSocketOptions(
new SocketOptions()
.setConnectTimeoutMillis(SOCKET_CONNECT_TIMEOUT)
.setReadTimeoutMillis(SOCKET_READ_TIMEOUT));
b.withPoolingOptions(poolingOptions);
cluster = b.build();
session = cluster.connect();
return session;
}
以下是我的测试表:
CREATE TABLE my_keyspace.test_table (
id int PRIMARY KEY
)
写信给cassandra我使用session.executeAsync
并将期货存储在列表中并等待所有期货完成。
当我进行100000次写入时,需要50-65秒。是应该这么慢还是我在配置中缺少一些东西?我已经在套接字选项和池选项中尝试了几个选项,但这是我得到的最好的选项。
我要检查的第一件事是你的Cassandra服务器是否以100%的CPU利用率运行。如果不是,并且因为我认为服务器在磁盘上没有瓶颈(即使是旋转磁盘也没有问题每秒写入1500次),那么瓶颈必须在其他地方:
您应该首先检查的一种可能性是客户端不是瓶颈,即它不使用100%CPU。
然后,你说“从我当地的cassandra集群的延迟是330毫秒”。这是您的测试机器和Cassandra集群之间的ping时间吗?如果是这样,您可能会遇到两种问题。首先,也许这是某种低带宽的WAN,实际上每秒不能支持2000多个请求。但我对此表示怀疑。另一种可能性是你的客户端根本没有足够的并发性......有了1/3秒的延迟,要实现每秒2000次写入,你需要客户端并行执行666个请求。你设置的setMaxRequestsPerConnection()真的生效了吗?因为如果不是,默认(根据https://docs.datastax.com/en/developer/java-driver/2.1/manual/pooling/)是您设置的3个连接的256倍,即768,接近上面的数字666。
当然,它可以是许多其他的东西。没有更多数据,很难猜到。
以上是关于低cassandra写入/秒,6个节点集群中每秒1500-2000次写入的主要内容,如果未能解决你的问题,请参考以下文章
解决 Cassandra Coordinator 节点写入超时的方法
Cassandra 3.x - 将 3 个节点添加到 6 节点集群