カフカの永続性
1. 概要
カフカは、メッセージを格納し、キャッシュするファイルシステムに大きく依存しています。ハードドライブを持っているために、ハードドライブ、従来の知恵は、多くの人がベースのアーキテクチャは、優れた性能ファイルシステムを提供するかどうかを思ってしまうた、常に非常に遅いです。実際には、それを使用するハードディスクの速度が途中に完全に依存します。うまく設計されたハードディスクやメモリアーキテクチャは、早くすることができます。
リニア6 7200 SATA RAID-5ディスクアレイの書き込み速度は、ほぼ600メガバイト/ sであるが、その後の速度の書き込みは、100K / sのほぼ6,000倍の差です。オペレーティングシステムは現在、技術的な先読みとポスト書かれています。実際には、ランダム・アクセス・メモリよりも多くの場合、はるかに高速ディスクへのリニアアクセスを、見つけました。
パフォーマンスを向上させるために、最近のオペレーティングシステムでは、これはリサイクルとを犠牲にしてもよいがキャッシュ性能の一部を再割り当て、ディスクキャッシュ、ディスクキャッシュとして使用する空きメモリに幸せなすべての現代のオペレーティングシステムとしてのメモリを使用する傾向があります。すべてのディスクの読み取りおよび書き込み操作は直接使用しない限り、バイパスされにくいキャッシュ、通過します I / Oを データのみをキャッシュに独自のスレッドで各プログラムつつ、しかし、2つの保存されたデータに等しいオペレーティングシステムのキャッシュがあります。
ベースの JVMのメモリは、次のような欠点があります
- Javaオブジェクト・スペースは、ほぼ2倍またはそれ以上のデータが格納されて、非常に大きいです。
- データヒープの量の増加に伴い、ガベージコレクションが戻ってますます困難になり、エラーが発生する可能性があり
データがメモリにキャッシュされている場合は、上記の分析に基づいて、ために2を保存する必要性、二倍のメモリ空間を使用していた、カフカがJVMに基づいて生きるために使用される、スペースはGCもたらすと相まって、パフォーマンスへの影響を回避するために、再び倍増しなければなりませんでした32Gメモリ上のマシンは、メモリ空間を28-30Gするために使用する必要があります。そして、システムが再起動されるが、(メモリの10ギガバイトは、ほぼ10分を使用する)メモリにデータを磨くしたいしなければならない、たとえ冷たいさわやかな(ない使い捨てブラシをメモリに、そのデータを使用すると、メモリーにブラシ上にないときとき)非常に遅くなることができ、新たな初期時間につながります。
オペレーティングシステムベースのファイルシステムを設計するメリットがあります。
- それことができる効果によるコンパクトなデータ、データキャッシュの大量、無圧力GCに、ページキャッシュOSメインメモリ空間を利用すること
- サービスが再起動された場合でも、データ・キャッシュは、(無ウォームアップ)暑いです。キャッシュベースのプロセス、手続きはウォームアップする必要があり、非常に長い時間を消費します。( 10Gは、約10分かかります)
- 大幅にコードを簡素化します。ファイル・システム・キャッシュとのロジックのすべての間の一貫性を維持ので OSを。上記の推奨事項は、設計、コードは非常にシンプルです作る実装し、メモリ内のデータを維持するための方法を見つけようとする必要はありません、データはすぐにディスクに書き込まれます。
全体的に、カフカは、メモリ空間のように多くのコンテンツ残らない住んでいたが、内容はディスクに直接書き込まれるよう。すべてのデータは、永続的なログにタイムリーにあるファイルシステムに書き込まれ、必ずしもメモリの内容がディスクにフラッシュされません。
2. ログデータの永続性
書き込み:ファイルにデータを追加することにより達成
読む:ファイルから読み込むための十分な時間を読みます
3. メリット
- 読み取りおよび書き込み操作は他の操作をブロックしません(混乱、ブロッキングが発生しないなし、読み込み、すべての追加のフォームは、シーケンシャルなので書き込み)、サイズは、パフォーマンスデータには影響を与えません。
- いいえ容量制限設定メッセージシステムのハードディスクスペース(メモリに関してはありません)。
- リニアディスクアクセス速度は、時間の任意の期間保存することができます!
4. 持続性の原則
トピックは、論理的にキューであるとみなすこと。各消費者はそのトピックを指定する必要があり、それは単に内部のキューにメッセージを入れるかを指定する必要があると理解することができます。スループットは、物理的に一つ以上のパーティションに、トピックをカフカを水平に拡張することができるようにするために、各パーティションは、物理フォルダへのパーティションのすべての格納フォルダ対応情報とインデックスファイルを。
各ログファイルは、「ログエントリ」配列は、各ログエントリは、メッセージボディのNバイトに続く4バイトの整数(Nの値)を含みます。各メッセージは、メッセージの開始位置を示すオフセット64バイトで一意現在のパーティションを有しています。ディスク・メッセージ・フォーマットに格納されている以下の通りであります:
メッセージ長:4バイト(値:. 1 + 4 + N-)
バージョン番号:1つのバイト
CRCは次のとおりです。4つのバイト
具体的には、メッセージ:nバイト
この「ログ・エントリが」ファイルから構成されていないが、セグメントに分割され、各セグメントは、最初のメッセージセグメント名前と「.kafka」組成物をオフセットされます。さらに、以下に示すように、各ログエントリのオフセット範囲は、次のセグメントを含む識別するインデックスファイルが、存在します。