Cassandra - 写入错误。如何解决?

Posted

技术标签:

【中文标题】Cassandra - 写入错误。如何解决?【英文标题】:Cassandra - error writing. How to solve it? 【发布时间】:2020-03-29 06:45:18 【问题描述】:

在我们公司,我们做一个项目,使用 apache,Cassandra。直到最近,我们还使用了较旧的驱动程序。昨天,我们尝试用最新的 4.3.0 替换它。我们连接到数据库,一切正常。问题是当我尝试替换 ear 文件或添加另一个使用相同代码的子项目时。

此时,我收到此错误。

13:23:21,142 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 97) MSC000001: Failed to start service jboss.deployment.subunit."test-ear.ear"."test-ejb.jar".component.TestBean.START: org.jboss.msc.service.StartException in service jboss.deployment.subunit."test-ear.ear"."test-ejb.jar".component.TestBean.START: java.lang.IllegalStateException: WFLYEE0042: Failed to construct component instance
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:834)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: java.lang.IllegalStateException: WFLYEE0042: Failed to construct component instance
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:163)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:134)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:88)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:127)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:141)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)
... 8 more
Caused by: javax.ejb.EJBException: com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1, use getErrors() for more: Node(endPoint=/127.0.0.1:9042, hostId=null, hashCode=3bad1448): com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s0|control|connecting...] init query OPTIONS: error writing )
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.BMTInterceptor.handleException(BMTInterceptor.java:83)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.EjbBMTInterceptor.checkStatelessDone(EjbBMTInterceptor.java:91)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.EjbBMTInterceptor.handleInvocation(EjbBMTInterceptor.java:106)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.BMTInterceptor.processInvocation(BMTInterceptor.java:57)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.weld@18.0.1.Final//org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.singleton.StartupCountDownInterceptor.processInvocation(StartupCountDownInterceptor.java:25)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:161)
... 13 more

我试图在互联网上寻找这个问题,研究他们的文档。我没有找到解决办法。

我连接到数据库的非常基本的代码。

@PostConstruct
public void start() 
    log.info("start");
    CqlSessionBuilder builder = CqlSession.builder();
    builder.addContactEndPoint(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042)));
    builder.withLocalDatacenter("datacenter1");
    session = builder.build();


@PreDestroy
public void stop() 
    log.log(Level.INFO, "stop");
    session.close();

我使用wildfly 作为服务器。当我替换 ear 文件或添加另一个具有相同代码的文件时,出现错误。

关于如何解决它的任何想法?

【问题讨论】:

您之前使用什么主机和端口连接到 Cassandra? AllNodesFailedException 表示驱动程序无法连接到 127.0.0.1:9042 的 Cassandra。 Cassandra 是否已启动并运行? @ck1 我们使用与以前相同的主机和端口。正如我在第一次部署时所说,没有问题。一切都连接并有效。当我用相同的代码替换ear 文件或部署第二个ear 文件时,会产生错误。当数据库不可用时,它只写“No host Available”但也写“init query OPTIONS: error writing”。起初我以为这是一个未完成的会话,但我关闭了每个会话。 连接本地数据中心时无需提供本地主机 IP 和端口。 Cassandra 驱动程序的默认设置就是这样。请确保您的 Cassandra 本地数据中心已启动并运行 @GAK 谢谢,但在生产版本上运行 cassandra 在另一个 ip 上。数据中心正在运行。不幸的是,这并没有解决任何问题。 【参考方案1】:

我有一个解决方案。经过2天的搜索和测试,我发现了一个错误。该错误在 Wildfly18 io.netty 中。一旦我将 io.netty-all 打包到项目中并删除了 Wildfly 提供的所有内容。

可能是 Wildfly18 提供了一些错误的版本。

【讨论】:

以上是关于Cassandra - 写入错误。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

Uber如何做到每秒100万次写入操作?在多个数据中心使用Mesos和Cassandra

如何确保仅在 cassandra 中不存在数据时写入

在 Cassandra 中使用轻量级事务 (CAS) 时,我们如何避免丢失写入?

解决 Cassandra Coordinator 节点写入超时的方法

如何在 cassandra 中将环从集群中分离出来

使用python解析器将数据写入cassandra