Cassandra在ALTER TABLE ADD上的消息验证异常

dluptydi  于 5个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(71)

我在尝试向Cassandra(4.0.5)ColumnFamily添加列时遇到了一些麻烦。
我在1个DC中使用3节点群集

./nodetool -h cass-host status
Datacenter: PERF-DC
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load        Tokens  Owns (effective)  Host ID                               Rack         
UN  10.24.40.53   391.57 KiB  16      100.0%            2e8207df-1954-4ba6-b438-1c1215cd264f  PERF-DC-RACK1
UN  10.24.40.133  388.83 KiB  16      100.0%            faaa220b-83ec-4489-8814-83739cf0c6c5  PERF-DC-RACK7
UN  10.24.40.132  402.47 KiB  16      100.0%            ef89f057-a315-4451-83e3-a9c27a0ee0c9  PERF-DC-RACK8

10.24.40.53  - cass-host1    
10.24.40.133 - cass-host2
10.24.40.132 - cass-host3

字符串
我有一个列家庭

CREATE TABLE table_01
(
    tdsrId         BIGINT,
    id             BIGINT,
    contents       VARCHAR,
    PRIMARY KEY ((tdsrId),id) 
) WITH default_time_to_live = 3600 
AND gc_grace_seconds = 3600;


首先,我已经开始从Java应用程序中阅读数据的活动

HOST: cass-host3
Consistency: LOCAL_QUORUM
QUERY: SELECT tdsrId,id,contents FROM table_01 WHERE tdsrId=1234567
load: 1000 operation per second


然后我尝试将列添加到ColumnFamily:

$cqlsh cass-host1

Connected to PERF-CLUSTER at cass-host1:9042
[cqlsh 6.0.0 | Cassandra 4.0.5 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.

cassandra@cqlsh> alter table ks.table_01 add t01 int;


结果是:
1)在cass-host 3上,我在cassandra/log/debug.log中得到了5个错误

ERROR [Messaging-EventLoop-3-1] 2023-12-26 18:03:01,094 InboundMessageHandler.java:182 - /10.24.40.53:7000->/10.24.40.132:7000-SMALL_MESSAGES-ff4dd09b unexpected exception caught while deserializing a message
    java.lang.RuntimeException: Unknown column t01 during deserialization
        at org.apache.cassandra.db.Columns$Serializer.deserialize(Columns.java:489)
        at org.apache.cassandra.db.filter.ColumnFilter$Serializer.deserializeRegularAndStaticColumns(ColumnFilter.java:1072)
        at org.apache.cassandra.db.filter.ColumnFilter$Serializer.deserialize(ColumnFilter.java:1021)
        at org.apache.cassandra.db.ReadCommand$Serializer.deserialize(ReadCommand.java:928)
        at org.apache.cassandra.db.ReadCommand$Serializer.deserialize(ReadCommand.java:833)
        at org.apache.cassandra.net.Message$Serializer.deserializePost40(Message.java:782)
        at org.apache.cassandra.net.Message$Serializer.deserialize(Message.java:642)
        at org.apache.cassandra.net.InboundMessageHandler.processSmallMessage(InboundMessageHandler.java:168)
        at org.apache.cassandra.net.InboundMessageHandler.processOneContainedMessage(InboundMessageHandler.java:151)
        at org.apache.cassandra.net.AbstractMessageHandler.processFrameOfContainedMessages(AbstractMessageHandler.java:242)
        at org.apache.cassandra.net.AbstractMessageHandler.processIntactFrame(AbstractMessageHandler.java:227)
        at org.apache.cassandra.net.AbstractMessageHandler.process(AbstractMessageHandler.java:218)
        at org.apache.cassandra.net.FrameDecoder.deliver(FrameDecoder.java:321)
        at org.apache.cassandra.net.FrameDecoder.channelRead(FrameDecoder.java:285)
        at org.apache.cassandra.net.FrameDecoder.channelRead(FrameDecoder.java:269)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:795)
        at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:480)
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:829)


2)在我的Java应用程序中,我有5个错误

2023-12-26 18:02:53.941 ERROR 1821233 --- [   scheduling-1] console_out     : err count: 5, message:Query; 
CQL [SELECT tdsrId,id,contents FROM table_01 WHERE tdsrId=?]; 
Cassandra failure during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded, 1 failed); 
nested exception is com.datastax.oss.driver.api.core.servererrors.ReadFailureException:
 Cassandra failure during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded, 1 failed)


在那之后,next cql工作正常,没有任何错误。
我预计,ALTER TABLE是危险的操作,我失去了一些查询结果,它与ALTER同时执行。
有人能解释一下,这是正确的行为,或者可能是我调优我的cassandra和使用ALTER TABLE ADD COLUMN没有这个错误?

vs91vp4v

vs91vp4v1#

您是否通过某些自动化作业运行alter和select语句,这些自动化作业会快速连续地执行这些语句?您是否可以在执行ALTER语句后立即执行nodetool describecluster,以确保架构更改已传播到群集中的所有节点(在这种情况下,所有节点将具有相同的模式UUID),然后对该表上新添加的列发出选择?如果命令的结果有多个UUID,这意味着模式更改没有传播到集群中的其他/所有节点,您需要通过查看system.logdebug.log文件来调查它。
关于你遇到的另一个问题,
Cassandra failure during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded, 1 failed);
在这种情况下,C* 集群没有针对您试图放置在集群上的负载进行适当的规范。您是否已经通过了适当的集群大小调整和测试(+一些缓冲)测试在初始规划阶段将在此群集上运行的实际负载?如果没有,我强烈建议您使用check out this documentation并执行必要的集群测试/规模调整。干杯!

相关问题