2012-07-12 3 views
4

저는 cassandra 클러스터가 8 개 노드 인 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"구성 등록 정보를 늘리거나 작은 배치 크기를 사용하는 것입니다.

+0

어떻게 찾았습니까? 나는 같은 문제를 겪고있다 ... – mvallebr

+0

고마워! 우리는 ehcache 일괄 처리 write-behind를 사용하여 상당히 큰 돌연변이 크기를 갖습니다. 이 대답은 우리에게 정말로 도움이되었습니다. –

+0

@wildfire 질문에 언급 한 것처럼 유스 케이스의 최적의 돌연변이 크기는 무엇입니까? –

관련 문제