カサンドラのコミットログは、カサンドラの耐久性のある書き込みを提供します。 Cassandraに書き込むと、書き込みがクライアントに確認される前に、書き込みがコミットログに追加されます。これは、クライアントが成功したレスポンスを受け取るすべての書き込みが、コミット・ログに書き込まれることが保証されていることを意味します。書き込みは現在のmemtableにも行われ、最終的に十分な大きさのときにSSTableとしてディスクに書き込まれます。これは、書き込みが行われてから長い時間がかかる可能性があります。
ただし、パフォーマンス上の理由から、コミットログはすぐにはディスクに同期されません。デフォルトはperiodicモードです(cassandra.yamlのcommitlog_syncパラメータで設定)。周期は10秒です(cassandra.yamlのcommitlog_sync_period_in_msで設定)。つまり、コミットログは10秒ごとにディスクに同期されます。この動作により、サーバーの電源が切れた場合に最大10秒の書き込みが失われる可能性があります。クラスタに複数のノードがあり、1より大きいレプリケーションファクタを使用した場合は、データを失うのに10秒以内に複数のノードに電力を供給する必要があります。
このリスクウィンドウが受け入れられない場合は、コミットログにバッチモードを使用できます。このモードでは、コミットログがディスクに同期されるまでクライアントへの書き込みを確認しません。時間ウィンドウはcommitlog_sync_batch_window_in_msによって設定され、デフォルトは50msです。これにより、書込みレイテンシが大幅に増加し、スループットも低下する可能性があるため、承認された書込みを失うコストが高い場合にのみこれを使用してください。このモードを使用するときは、コミットログを別のドライブに保存することが特に重要です。
サーバの電源が切れた場合、起動時にCassandraはコミットログを再生してmemtableを再構築します。このプロセスは非常に重いサーバーを書く場合に数秒(場合によっては数分)かかるでしょう。
memtables内のデータがディスクに書き込まれるようにするには、 'ノードデフルフラッシュ'を実行できます(これはノードごとに動作します)。これにより、新しいSSTableが作成され、フラッシュされたmemtables内のデータを参照するコミットログが削除されます。
細かくよく書かれた説明をありがとうございます - 今ははっきりしています。私はこれが私のような他の初心者にも役立つことを願っています。 – user1680784
あなたは「バッチ」と「定期的」バックワードを持っているように見えます...定期的に、承認があなたがバッチに切り替えるのを待つようにするために、デフォルトですか? –
@リチャード私はこの問題に直面しています。カサンドラのコミットログが壊れています。助言がありますか?私はここに質問を投稿しました:http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo