Spring Cassandra超时查询 'SELECT * FROM system_schema.tables' 在PT2S后超时。

9
我正在使用Spring Boot 2.4.4和Spring Data Cassandra依赖项连接到Cassandra数据库。在应用程序启动期间,我遇到了DriverTimeout错误(我正在使用VPN)。
我已经查看了所有类似的Stack Overflow问题,但没有一个适用于我。我已经在Spring Boot 官方页面上发布了相同的问题。
我使用了以下配置属性 -
spring.data.cassandra.contact-points=xxxxxx
spring.data.cassandra.username=xxxx
spring.data.cassandra.password=xxxxx
spring.data.cassandra.keyspace-name=xxxx
spring.data.cassandra.port=9042
spring.data.cassandra.schema-action=NONE
spring.data.cassandra.local-datacenter=mydc
spring.data.cassandra.connection.connect-timeout=PT10S
spring.data.cassandra.connection.init-query-timeout=PT20S
spring.data.cassandra.request.timeout=PT10S

我还在application.properties中添加了DataStax属性,以检查它们是否可以从那里获取。

datastax-java-driver.basic.request.timeout = 10 seconds
datastax-java-driver.advanced.connection.init-query-timeout = 10 seconds
datastax-java-driver.advanced.control-connection.timeout = 10 seconds

以下是我在这里建议的配置 -
@EnableCassandraRepositories
public class CassandraConfig {
    @Bean
        DriverConfigLoaderBuilderCustomizer cassandraDriverCustomizer() {
            return (builder) -> builder.withDuration(DefaultDriverOption.CONTROL_CONNECTION_TIMEOUT,
                    Duration.ofSeconds(30));
        }
}

但我仍然收到相同的错误信息

Caused by: com.datastax.oss.driver.api.core.DriverTimeoutException: query 'SELECT * FROM system_schema.tables' timed out after PT2S

我也尝试了不同的方法,比如创建自定义的CqlSessionFactoryBean并以编程方式提供所有DataStax属性来进行覆盖 -

@EnableCassandraRepositories
public class CassandraConfig extends AbstractCassandraConfiguration { 

    @Bean(name = "session")
        @Primary
        public CqlSessionFactoryBean cassandraSession() {
            CqlSessionFactoryBean factory = new CqlSessionFactoryBean();
            factory.setUsername(userName);
            factory.setPassword(password);
            factory.setPort(port);
            factory.setKeyspaceName(keyspaceName);
            factory.setContactPoints(contactPoints);
            factory.setLocalDatacenter(dataCenter);
            factory.setSessionBuilderConfigurer(getSessionBuilderConfigurer()); // my session builder configurer 
            return factory;
        }
    // And provided my own SessionBuilder Configurer like below
    
    protected SessionBuilderConfigurer getSessionBuilderConfigurer() {
        return new SessionBuilderConfigurer() {
    
            @Override
            public CqlSessionBuilder configure(CqlSessionBuilder cqlSessionBuilder) {
                ProgrammaticDriverConfigLoaderBuilder config = DriverConfigLoader.programmaticBuilder()
                        .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(30))
                        .withBoolean(DefaultDriverOption.RECONNECT_ON_INIT, true)
                        .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(30))
                        .withDuration(DefaultDriverOption.CONTROL_CONNECTION_TIMEOUT, Duration.ofSeconds(20));
                return cqlSessionBuilder.withAuthCredentials(userName, password).withConfigLoader(config.build());
            }
        };
      }
}

它没有工作,出现了相同的错误。此外,我像这里在StackOverflow上建议的那样,排除了Cassandra自动配置类。
我还尝试自定义会话构建器,如下所示,以查看是否可以工作:
@Bean
public CqlSessionBuilderCustomizer cqlSessionBuilderCustomizer() {
        return cqlSessionBuilder -> cqlSessionBuilder.withAuthCredentials(userName, password)
                .withConfigLoader(DriverConfigLoader.programmaticBuilder()
                        .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofMillis(15000))
                        .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofSeconds(30))
                        .withBoolean(DefaultDriverOption.RECONNECT_ON_INIT, true)
                        .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(30))
                        .withDuration(DefaultDriverOption.CONTROL_CONNECTION_TIMEOUT, Duration.ofSeconds(20)).build());
    }

还是没有运气。

不仅如此,我还按照DataStax文档建议的将application.conf文件添加到类路径中,尽管该文件正在被解析(在犯了语法错误后我知道它正在被读取)。但是它没有起作用。

application.conf-

datastax-java-driver {
 basic.request.timeout = 10 seconds
 advanced.connection.init-query-timeout = 10 seconds
 advanced.control-connection.timeout = 10 seconds
}

我还将Spring Boot版本切换到2.5.0.M3,以查看属性文件是否起作用。我已将我的项目推送到我的GitHub帐户

更新

根据评论,我将整个堆栈跟踪粘贴在此处。此外,这并不总是发生,有时它有效,有时它无效。我需要将超时从PT2S覆盖为PT10S或其他值。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraConverter' defined in class path resource [com/example/demo/CassandraConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.core.convert.CassandraConverter]: Factory method 'cassandraConverter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [com/example/demo/CassandraConfig.class]: Invocation of init method failed; nested exception is com.datastax.oss.driver.api.core.DriverTimeoutException: query 'SELECT * FROM system_schema.tables' timed out after PT2S
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:895) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.0.RELEASE.jar:2.3.0.RELEASE]
    at com.example.demo.SpringCassandraTestingApplication.main(SpringCassandraTestingApplication.java:13) [classes/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.core.convert.CassandraConverter]: Factory method 'cassandraConverter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [com/example/demo/CassandraConfig.class]: Invocation of init method failed; nested exception is com.datastax.oss.driver.api.core.DriverTimeoutException: query 'SELECT * FROM system_schema.tables' timed out after PT2S
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    ... 19 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [com/example/demo/CassandraConfig.class]: Invocation of init method failed; nested exception is com.datastax.oss.driver.api.core.DriverTimeoutException: query 'SELECT * FROM system_schema.tables' timed out after PT2S
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:227) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1174) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:422) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:352) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:345) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.data.cassandra.config.AbstractSessionConfiguration.requireBeanOfType(AbstractSessionConfiguration.java:100) ~[spring-data-cassandra-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.springframework.data.cassandra.config.AbstractSessionConfiguration.getRequiredSession(AbstractSessionConfiguration.java:200) ~[spring-data-cassandra-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.springframework.data.cassandra.config.AbstractCassandraConfiguration.cassandraConverter(AbstractCassandraConfiguration.java:73) ~[spring-data-cassandra-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at com.example.demo.CassandraConfig$$EnhancerBySpringCGLIB$$cec229ff.CGLIB$cassandraConverter$12(<generated>) ~[classes/:na]
    at com.example.demo.CassandraConfig$$EnhancerBySpringCGLIB$$cec229ff$$FastClassBySpringCGLIB$$faa9c2c1.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at com.example.demo.CassandraConfig$$EnhancerBySpringCGLIB$$cec229ff.cassandraConverter(<generated>) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_275]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_275]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_275]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_275]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    ... 20 common frames omitted
Caused by: com.datastax.oss.driver.api.core.DriverTimeoutException: query 'SELECT * FROM system_schema.tables' timed out after PT2S
    at com.datastax.oss.driver.api.core.DriverTimeoutException.copy(DriverTimeoutException.java:34) ~[java-driver-core-4.6.1.jar:na]
    at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:149) ~[java-driver-core-4.6.1.jar:na]
    at com.datastax.oss.driver.api.core.session.Session.refreshSchema(Session.java:140) ~[java-driver-core-4.6.1.jar:na]
    at org.springframework.data.cassandra.config.CqlSessionFactoryBean.afterPropertiesSet(CqlSessionFactoryBean.java:437) ~[spring-data-cassandra-3.0.0.RELEASE.jar:3.0.0.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.6.RELEASE.jar:5.2.6.RELEASE]
    ... 43 common frames omitted

你配置了 spring.data.cassandra.connection.init-query-timeout=PT20S,但错误消息中提到了 PT2S。这是打字错误吗?你排除了网络问题吗(例如使用 nc 或类似工具检查连接性)?在超时发生之前,我建议你在应用程序运行时检查 netstat -nt 输出。 - Tasos P.
这可能是你试图解决问题的副作用,但在当前形式下,你的项目主要是在配置Cassandra本身。这意味着Spring Boot的自动配置大部分已经退出了。因此,除非你在自己的代码中使用它们,否则你设置的任何spring.data.cassandra.*属性都不会产生任何效果。 - Andy Wilkinson
你能否从运行代码的机器连接到Cassandra? - jny
你对Spring Data Cassandra有多依赖?我的经验是它有时会在幕后做一些奇怪的事情。我建议使用DataStax Java驱动程序。 - Aaron
1
@Rajeev,我遇到了完全相同的问题。想问一下你是否尝试过直接使用DataStax Java驱动程序4.5+,如果是,它是否对你起作用? - Abhishek Sharma M
显示剩余6条评论
7个回答

15
我在此回答自己的问题,以使其完整,并让其他人知道我如何解决这个特定的问题。
我正在使用Spring Boot 2.4.5。当我升级到版本2.3+时,我开始遇到超时问题。
根据我的经验,以下是我发现的问题。
无论您在application.propertiesapplication.confDataStax notion)中提供什么超时时间,它们都会被Spring Boot覆盖,或者可能从DataStax驱动程序中选择默认值。
即使在Spring Boot官方项目上创建了一个处理此问题的问题。请检查here。稍后在2.5.0.M1版本中修复了这个问题。
当我将这个作为VM参数传递时,我的问题得到了解决。
 $java -Ddatastax-java-driver.basic.request.timeout="15 seconds" application.jar

我还传递了其他参数,例如advanced.control-connection.timeout,因为在另一个论坛上建议我使用该参数,但对我没有用。请在此处查看参考手册here以获取其他配置参数。
我只在本地遇到了这个错误,所以我将其传递给Eclipse VM参数,然后再也没有看到那个错误了。
此外,如果我将此时间缩短到7-8秒,有时会再次看到该错误PT2S。似乎无论您传递什么超时值,该异常消息都被硬编码在某个地方。(这是我的观察)。

enter image description here

更新:解决方案2 - 我后来想出来的,我看到很多人也回答了这个问题
DataStax提供的实际密钥如下,这是有效的。

 @Bean
    public DriverConfigLoaderBuilderCustomizer defaultProfile(){
        return builder -> builder.withString(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT, "3 seconds").build();
    }

5

以下是对正确答案的补充解释:

增加METADATA_SCHEMA_REQUEST_TIMEOUT的值,因为问题中提到的查询属于METADATA_SCHEMA,该信息并不明确。

@Override
    protected SessionBuilderConfigurer getSessionBuilderConfigurer() {
        return new SessionBuilderConfigurer() {

            @Override
            public CqlSessionBuilder configure(CqlSessionBuilder cqlSessionBuilder) {
                logger.info("Configuring CqlSession Builder");
                return cqlSessionBuilder
                        .withConfigLoader(DriverConfigLoader.programmaticBuilder()
                                // Resolves the timeout query 'SELECT * FROM system_schema.tables' timed out after PT2S
                                .withDuration(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT, Duration.ofMillis(60000))
                                .withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofMillis(60000))
                                .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofMillis(15000))
                                .build());
            }
        };
    }

2
< p > DriverTimeoutException 会在驱动程序未收到协调节点的回复时抛出。它使用默认的基本请求超时时间,即2秒:

datastax-java-driver {
  basic.request {
    timeout = 2 seconds

超时时间为2秒的事实意味着您的覆盖项没有被采纳,但我还没有完全弄清楚原因。
更重要的是,这是一个不同于读取或写入超时异常的错误,后者发生在没有足够的副本响应以满足所需的一致性级别时 - 在这两种情况下,协调器会回复驱动程序并抛出异常。
根据我的经验,DriverTimeoutException是由(a)无响应节点和/或(b)负载过重的协调器引起的。
如果应用程序正在运行昂贵的查询,那么这可能是协调器无法及时回复的原因。在这种情况下,您的覆盖项无法工作并不是您需要解决的问题,因为在Cassandra术语中,2秒对于应用程序请求来说是永恒的 - 您需要确保没有过载您的集群,并且这是您需要解决的问题。干杯!

1
谢谢,Erick。我已经阅读了你提供的所有文档和建议,并已应用。但问题是我无法控制Cassandra节点使其响应。为了让它正常工作,我必须增加请求超时时间。我没有其他选择。还是谢谢你的回答。 - Rajeev
1
@Rajeev,Erick是正确的。增加超时时间从来没有带来过好处。 - Aaron
1
@Aaron,确实如此。我毫不怀疑,但是我在本地笔记本电脑上使用VPN,这种情况经常发生在我和我的团队身上。此外,当我们的应用程序负载增加时,我们会将应用程序扩展到n个pod,如果Cassandra正在为已运行的pod提供大量请求,则新的pod启动可能会失败,如果Cassandra无法在2秒内响应,则有可能发生这种情况,我正在尝试增加至少5秒以避免这种情况的发生。 - Rajeev

1
尝试按照以下方式创建一个Bean并尝试使用:

  @Bean
    public DriverConfigLoaderBuilderCustomizer defaultProfile(){
        return builder -> builder.withString(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT, "3 seconds").build();
    }

或者

@Bean
    public DriverConfigLoaderBuilderCustomizer defaultProfile(){
        return builder -> builder.withInt(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT, 3000).build();
    }

1
请花点时间学习这里的代码格式化工具 - 我们使用Markdown。编辑器中提供在线帮助。 - halfer

1
你需要在会话构建器配置器中添加这个内容:
withDuration(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT, Duration.ofSeconds(XX))

0

增加请求超时时间确实可以解决问题。

但我们遇到超时的主要原因是默认值 "DefaultDriverOption.METADATA_SCHEMA_ENABLED" 为 true

通过将该值覆盖为 false 可以提高速度。

示例 kotlin 代码如下:

class CassandraConfiguration(
private val cassandraProperties: CassandraProperties,
) : AbstractReactiveCassandraConfiguration() {

...
...

override fun getDriverConfigLoaderBuilderConfigurer(): DriverConfigLoaderBuilderConfigurer? {
        return DriverConfigLoaderBuilderConfigurer{ builder: ProgrammaticDriverConfigLoaderBuilder ->
            builder
                .withString(DefaultDriverOption.METADATA_SCHEMA_ENABLED, "false")
                .build()
        }
    }
    
}

0

所以我在这里看到两种可能性。

  1. 这个问题最有趣的部分是...

...就是 SELECT 语句:

SELECT * FROM system_schema.tables

system_schema 的键空间定义如下:

CREATE KEYSPACE system_schema WITH replication = {'class': 'LocalStrategy'}

这个改成了简单的模式或网络拓扑结构吗?如果是,那可能会导致超时问题。

  1. system_schema 键空间是较新版本的Cassandra(我认为是2.2+)中新增的。你在使用旧版本吗?

基本上,请确保将 system_schema 设置为适当的默认复制。此外,请确保使用已知适用于您的Cassandra 版本的Spring Data Cassandra版本。

另外,我建议尝试不使用Spring Data Cassandra。我很好奇这种方法与纯DS Java驱动程序之间是否有任何区别。


我正在使用Cassandra 3.11。如果我尝试重新启动应用程序,它有10次中有7次会在启动时失败。一旦连接成功,一切都正常。我正在尝试看看是否可以避免这种启动失败。 - Rajeev
@Rajeev,编辑已完成。也许可以尝试不使用Spring Data Cassandra,看看结果是否有所不同? - Aaron
好的,我会按照你说的去尝试。谢谢,Aaron。 - Rajeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接