1. ホーム
  2. caching

[解決済み] フラッシュ・トゥ・ディスク」とはどういう意味ですか?

2022-02-18 02:57:48

質問内容

どなたか、次の文脈でディスクにフラッシュすることの意味を説明していただけませんか?ファイルシステム上のログにデータを書き込む場合、それはディスクに置くことを意味しないのでしょうか?どの時点でファイルをディスクにフラッシュするのでしょうか/すべきでしょうか?

つまり、できるだけ多くのデータをメモリ内に保持し、容量が足りなくなったときに慌ててすべてをファイルシステムに流すのではなく、それを逆手に取った設計になっているのです。すべてのデータは、必ずしもディスクにフラッシュされることなく、ファイルシステム上の永続的なログに直ちに書き込まれます。事実上、これはカーネルのページキャッシュに転送されることを意味するだけです。

(以下 https://kafka.apache.org/documentation.html#design ).

解決方法は?

<ブロッククオート

すべてのデータは、必ずしもディスクにフラッシュすることなく、直ちにファイルシステム上の永続的なログに書き込まれます。事実上、これはカーネルのページキャッシュに転送されることを意味するだけです。

これはどういうことかというと、Kafkaがデータをカーネルに渡す際に write() システムコール -- その時点で他のプロセスからは見えるが、実際にディスクに反映され、再起動に耐えられるかどうかはわからない -- を使って、カーネルにディスクへの殺到を強制することはないのだそうです。 fsync() の呼び出しなど(その時のOSに適切なもの)。スループットを最適化し、コンテンツが取得可能であることを保証する必要がない場合、これは適切な決定となりえます。 fsync() とその親族は高価な呼び出しになる可能性があります(ただし、シークを必要としない長い連続書き込みを行うことで、kafkaはディスクIOの費用を最小限に抑えています)。