2012-07-12 64 views
4

我有一個包含8個節點的cassandra集羣cassandra 1.0.8。Cassandra在重插入工作負載下重置連接

我想在batch_mutate()循環中做很多小的插入。比

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 

否則,羣集正常工作:經過一段時間(〜200K插入)服務器重置與下面的異常連接。服務器日誌很乾淨。

什麼可能導致此問題?

謝謝!

+0

從這個日誌本身,我們不能說*服務器*重置連接..只是它已被重置。客戶端發生了什麼? – 2012-07-12 01:25:43

回答

11

我發現原因:批量突變大小超過了TFramedTransport的幀大小。 有兩種可能的解決方案:要麼增加cassandra.yaml中的「thrift_framed_transport_size_in_mb」配置屬性,要麼使用較小的批量大小。

+0

你是怎麼找到這個的?我有同樣的問題... – mvallebr 2012-11-12 18:07:36

+0

謝謝!我們使用ehcache批處理write-behind,導致我們有相當大的突變大小。這個答案真的幫助了我們。 – 2013-03-07 15:02:03

+0

@wildfire根據你的經驗,對於像你在問題 – 2016-02-15 06:04:58