私はまだ新しいトピックを作成しましたが、まだメッセージを作成していません。 "/ tmp/kafka-logs-1/topicname-0 /"ディレクトリに "00000000000000000000.index"という名前のファイルが作成されており、そのファイルのサイズは非常に大きいです。 バイナリファイルをviで開きましたが、内容は "0000 0000 0000 0000 ..." それはどういう意味ですか?インデックスファイルは何ですか?kafka-logディレクトリに.indexファイルが存在するのはなぜですか?
答えて
ログ(ファイル* .logという)のすべてのセグメントは、それが対応するインデックス(ファイル* .INDEX)のしている同じ名前を持つ彼らは、ベースを表してオフセット。
理解のために、ログファイルにはメッセージフォーマットで構成された実際のメッセージが含まれています。このファイル内の各メッセージについて、最初の64ビットはインクリメントされたオフセットを表します。ログファイルがギガバイトの範囲で拡大する可能性があるため、特定のオフセットを持つメッセージのこのファイルを検索すると、コストが高くなります。メッセージを生成するためには、ブローカーは実際に最新のオフセットを決定し、着信メッセージをさらに正確に増やすことができるように、そのような種類のルックアップを実際に実行しなければなりません。
これは、インデックスファイルが存在する理由です。まず、インデックスファイル内のメッセージの構造は、それらのそれぞれは、32ビットの長、唯一の2つのフィールドについて説明します。
は- 4バイト:相対
- 4バイトのオフセット:物理的な位置
としては、ファイル名はベースオフセットを表します。各メッセージについてオフセットがインクリメントされるログファイルとは対照的に、インデックスファイル内のメッセージには、ベースオフセットに対する相対オフセットが含まれています。 2番目のフィールドは、関連するログメッセージ(ベースオフセット+相対オフセット)の物理的な位置を表し、O(1)のルックアップが可能になります。
ログ内のすべてのメッセージにインデックス内の対応するメッセージがあるわけではありません。構成パラメーターindex.interval.bytesは、デフォルトで4096バイトで、索引項目を追加する頻度(基本的には何バイト後)を記述する索引間隔を設定します。
.indexファイルのサイズについての質問は次のとおりです。設定パラメータsegment.index.bytes(既定では10MB)は、このファイルのサイズを示します。この領域は再割り当てされ、ログロールの後でのみ縮小されます。
すべてのログファイルには対応するインデックスファイルがあります。インデックスファイルの目的は、論理メッセージオフセットをデータファイルの物理的な位置に変換するために使用されます。 here
EDIT見られるように:DOC
から
を各パーティションには、継続的に、コミットログを構造化追加されたレコードの順序付き、不変のシーケンスです。
カファでは、トピックパーティションを複数のブローカーに分割することはできません。保存期間が過ぎてからKafkaがいくつかのメッセージをパーティションから削除する必要がある状況では、パーティションファイルをスキャンする必要があります。単一の大きなパーティションファイルが存在する場合、この操作は非常に遅くなります。これを避けるため、カフカはパーティションを複数のセグメントに分割します。
アクティブセグメントと呼ばれる現在のセグメントファイルがサイズ制限に達したときに作成される新しいセグメントファイル(log.segment.bytes
プロパティによって制御されます)。したがって、各セグメントにはlog
ファイルとindex
ファイルが存在します。 すべてのセグメントは、以前のセグメントのオフセットよりも大きいベースオフセットで開始します。
ログファイル00000000005120942793.log
は
インデックスファイル、(。一度メッセージは、それがOffset
と呼ばれる固有のシーケンシャル番号が与えられているカフカに押し込まれる)カフカは、実際のオフセットのようなすべての詳細と一緒にメッセージを格納する場合に、タイムスタンプであり、圧縮、ペイロード等00000000005120942793.index
は、ログ内の実際のメッセージの位置をマップします。一般に、それぞれが4バイトを有する2つの部分からなる。最初の部分はメッセージオフセット(ベースオフセットに相対)を格納し、後でメッセージの位置を格納します。インデックスファイルはメモリマップされており、Kafkaはバイナリサーチを使用して、ターゲットオフセットと等しいかそれ以下の最も近いオフセットを検索します。
出典:
http://kafka.apache.org/documentation.html#brokerconfigs http://supergsego.com/apache/kafka/0.8.2.0/scaladoc/kafka/log/OffsetIndex.html https://thehoard.blog/how-kafkas-storage-internals-work-3a29b02e026
文書とリンクされたコメントから不明瞭な抜粋をコピーしてください。 – cevaris
おそらくあなたは答えで提供されたリンクを逃した – user2720864
いいえ、クオラのリンクを見た。どちらの回答も効果的にOP質問に答えません。この – cevaris
- 1. ファイルとディレクトリが存在する場合
- 2. ファイルリストに存在しないディレクトリにファイルが存在するかどうかを確認するバッチファイル
- 3. EXCEPTがT-SQLに存在するのはなぜですか?
- 4. iOSにデリゲートが存在するのはなぜですか?
- 5. delegate.hファイルに#include <QItemDelegate>が存在しないのはなぜですか?
- 6. プロジェクトにイオンバンドルjsファイルが存在しないのはなぜですか?
- 7. UnsatisfiedLinkError、そのようなファイルまたはディレクトリは存在しませんがファイルが存在します
- 8. なぜNull値がPHPに存在するはずですか?
- 9. ViewディレクトリにMVCビューが存在する必要があるのはなぜですか?
- 10. gdiでエイリアシングが存在するのはなぜですか?
- 11. 他にクラスファイルが存在する場合、そのオブジェクトファイルにクラスメソッドが存在しないのはなぜですか?
- 12. QByteArrayにdeleteLaterが存在しないのはなぜですか?
- 13. Linuxにウイルスが存在しないのはなぜですか?
- 14. メイクファイルが現在のディレクトリにオブジェクトファイルを生成するのはなぜですか?
- 15. Lucene.Net Indexがフォルダに存在するかどうかを確認するには?
- 16. ファイルがディレクトリに存在しない場合は行をスキップ
- 17. PHPはファイルが存在し、ディレクトリが存在しないかどうかを確認します
- 18. dynamic_castが存在するのはなぜですか?
- 19. strictfpが存在するのはなぜですか?
- 20. ActivePythonが存在するのはなぜですか?
- 21. -ms-overflow-styleが存在するのはなぜですか?
- 22. あるディレクトリ内のファイルが別のディレクトリに存在するかどうかをチェックする方法は?
- 23. Perl:ファイルが存在するまでディレクトリを読み取る
- 24. マウントポイントは存在するがファイルが存在しないか確認する
- 25. java.net.SocketInputStreamが存在しないのはなぜですか?
- 26. char.IsUpperInvariant/char.IsLowerInvariantメソッドが存在しないのはなぜですか?
- 27. なぜsystem.floatが.netに存在しないのですか?
- 28. なぜクラスセットがスカラーに存在しないのですか?
- 29. なぜオブジェクトがChrome DevToolsに存在しないのですか?
- 30. ファイルが特定のディレクトリに存在するかどうかの確認
「このスペースは再割り当てされました」とはどういう意味ですか? –
私は* .timeindex *接頭辞を持つファイルがあります気づきました。それは何のためですか? –
timeindexは、オフセット値ではなくタイムスタンプに基づいてすばやくすべてのメッセージにアクセスする方法を提供します。 offsetsForTimes()メソッドを使用してタイムスタンプでオフセットを参照することもできます –