2017-01-12 48 views
0

データをCassandraにロードしようとしていますが、失敗しています。私は単一のノード(ラップトップ)で動作していますが、小さなクラスタ(3-5ノード)でも同じ動作が見られます。私はデフォルト設定でCassandra 3.9を実行しています。データの書き込み時にCassandraが失敗する

DataStax Javaドライバ3.0.0を使用して2つのスレッドから書き込みを行っています。私は5-10Kの列で50KBの行を持つ行を書いています。ディスク上の合計データセットは約40GBになります。私は5行同時に/スレッドを書いています。

しばらく挿入した後、私はタイムアウトを書く得るために開始します。

com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency LOCAL_ONE (1 replica were required but only 0 acknowledged the write) 

私は指数バックオフして再試行してください。最終的には、書き込みは前方進行を停止する。この時点で、私は非常に長いGCの一時停止を見ている:すべての時間はGCに費やされているよう

WARN [Service Thread] 2017-01-11 19:04:54,529 GCInspector.java:282 - ConcurrentMarkSweep GC in 4139ms. CMS Old Gen: 3456106376 -> 3455729576; Par Eden Space: 671088640 -> 670388064; Par Survivor Space: 83886080 -> 58722784 
WARN [Service Thread] 2017-01-11 19:04:58,692 GCInspector.java:282 - ConcurrentMarkSweep GC in 4010ms. CMS Old Gen: 3456105584 -> 3455769528; Par Survivor Space: 83886080 -> 62960320 

この時点で、それが見えます。私が書いた仕事を殺したとしても、カサンドラは回復しないようです。最終的にOutOfMemoryErrorで終了します。

memtable_heap_space_in_mb: 32 
memtable_offheap_space_in_mb: 32 

と(多分私はちょうど十分な長待っていないよが)それがOOMエラーを修正している場合があります:私は32メガバイトにmemtableスペースを下げました。

私はCassandra +指数関数的バックオフがライターに最大均衡書き込み速度を絞ることを望んでいましたが、それは起こっていないようです。それはカサンドラにとって非現実的な期待ですか?私は作家のレートを制限することができますが、私はどのようなメトリックがレート制限に合理的であるか分かりません。何か案は?

+0

私の動作は次のようになります。http://stackoverflow.com/questions/21715622/large-writes-cause-instability-in-cassandra-ring RussSの答えのポイント4は関連しているようです。これはまだ書き込み速度を調整する方法を説明していません。 –

答えて

1

これはCassandraクラスタの典型的な問題です。

私は2つの方法でこれを参照してください。

  • それがクラスタに過負荷をかけないようにするために書いてダウン絞るカサンドラクライアント責任です。これは、それが必要なアプリケーションのSLAを合わせて、書き込み速度(レイテンシ)をサポートするために、クラスタを設計するエンジニア責任です背圧
  • と呼ばれています。

あなたのクラスタが実行する方法についてのアイデアを持っていない可能性がありますので、あなたが持っている唯一のオプションは背圧を適用することです。書き込みをクライアントレベルで合理的な値に抑える。この値はハードウェア(よく、ソフトウェア)の設定に大きく依存します。ボールバーク値(3k op/sなど)で試して、クラスタの過負荷になる書き込み速度を見つけるまでこの値を上げてください。あなたのクラスターがサポートしているレート(あなたの特定のワークロードで!)を見つけることができます。アプリケーションに十分でない場合は、より多くのノードでクラスタを拡張します。

関連する問題