我有一个8个节点的cassandra集群,cassandra 1.0.8。
我正在尝试使用batch_mutate()在循环中执行大量小插入操作。经过一段时间(约200K插入)服务器重置连接时出现以下异常:
org.apache.thrift.transport.TTransportException: java.net.SocketException: Connection reset
at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:147)
at org.apache.thrift.transport.TFramedTransport.flush(TFramedTransport.java:157)
at org.apache.cassandra.thrift.Cassandra$Client.send_batch_mutate(Cassandra.java:998)
at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:986)
at org.scale7.cassandra.pelops.Mutator$1.execute(Mutator.java:46)
at org.scale7.cassandra.pelops.Mutator$1.execute(Mutator.java:42)
at org.scale7.cassandra.pelops.Operand.tryOperation(Operand.java:56)
at org.scale7.cassandra.pelops.Mutator.execute(Mutator.java:51)
...
Caused by: java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:145)
... 25 more
除此之外,群集工作正常。服务器日志很干净。
可能导致此问题的原因是什么?
谢谢!
答案 0 :(得分:11)
我找到了原因:批量突变大小超过了TFramedTransport的帧大小。 可能有两种可能的解决方案:在cassandra.yaml中增加“thrift_framed_transport_size_in_mb”配置属性,或者使用较小的批量大小。