【发布时间】:2018-11-15 21:31:20
【问题描述】:
Cassandra 集群规格:
Nodes: 6
Storage: 1536 GB
Cores: 48
Ram: 168 GB
从我的本地到 cassandra 集群的延迟:330 ms-390 ms
我使用的是cassandra java驱动,spark-cassandra-connector_2.11 version 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 分配了多少内存?您在日志中看到了什么吗?
-
我没有检查日志,但应该是 168/6 GB。那是专用的 cassandra 集群
-
不,在您的设置中,堆将是机器上可用内存的 1/4,因此大约为 7Gb...我建议明确增加到 12 或 16
-
当然。集群不归我们所有。我肯定会检查。
标签: cassandra datastax-java-driver