cassandra的连接池配置
cassandra的datastax驱动使用的是异步nio实现的,发出去的请求,不会阻塞线程,当有响应的时候会通知你。所以cassandra客户端和服务器之间不需要太多的连接,因为发送一个请求是很快的,只要一个线程不断监听响应就可以了。
cassandra的配置方式如下:
1 2 3 4 5 6 7 8 9 10 | PoolingOptions poolingOptions = new PoolingOptions(); poolingOptions .setMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL, 32); poolingOptions.setCoreConnectionsPerHost(HostDistance.LOCAL, 2); poolingOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, 4); Cluster cluster = Cluster.builder() .addContactPoints("192.168.1.101") .withCredentials(username, password) .withPoolingOptions(poolingOptions); |
这就完成了一个对连接池的配置。
setCoreConnectionsPerHost(HostDistance.LOCAL, 2);
表示和集群里的机器至少有2个连接。注意是和集群里的每个机器都至少有2个连接。
setMaxConnectionsPerHost(HostDistance.LOCAL, 4);
最多有4个连接
setMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL, 32);
每个连接允许32请求并发。
也就是说你这个配置,最多允许(32*4*机器个数)个并发请求。如果太多的并发可能会发生获取连接失败。
以上是说的集群部署在一个机房,只有一个数据中心DC的情况,如果有多个数据中心。要设置REMOTE连接数。
1 2 3 4 5 6 7 | PoolingOptions poolingOptions = new PoolingOptions(); poolingOptions .setMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL, 32); poolingOptions.setCoreConnectionsPerHost(HostDistance.LOCAL, 2); poolingOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, 4); poolingOptions.setCoreConnectionsPerHost(HostDistance.REMOTE, 2); poolingOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, 4); |
配置完之后,获取session,就可以全程序单例使用了。
除非注明,赵岩的博客文章均为原创,转载请以链接形式标明本文地址
本文地址:https://zhaoyanblog.com/archives/547.html
你说的,一个session就是一个连接池,那我是不是可以这样理解:假如一个集群里有6台机器,那这6个机器都有对应的一个连接池,这6个连接池对应着一个session?
既然session是全程序单例使用,那么连接池的意义何在
您好,我有个问题想请教下。
每个机器有2个连接,每个连接有32个并发。
这个2,32是你随意写的吗,我想知道下cassandra这两个数字的上限是多少,另外设置成多少算是合理?如何计算?
看到后请回复下我,谢谢了!很急!!!!
是的,经验值,cassandra是异步请求,2个链接应该就够了,只有32个并发,应该看你的业务请求量和时延,假设你的请求很少,那就少一点并发,如果请求量很大,那就多一点并。并发高了也会导致cassandra负载高,你要及时扩容集群,这个都是根据实际情况调整的。
持续关注朋友的cassandra。