Kafka パーティションのデータ ファイル (offffset、MessageSize、data)

パーティション内の各メッセージには、offset、MessageSize、data の 3 つの属性が含まれます。offset は、このパーティション内のメッセージのオフセットを表します。offset は、パーティション データ ファイル内のメッセージの実際の格納場所ではなく、論理的な値です。 offset はパーティション内の Message の ID、MessageSize はメッセージ コンテンツ データのサイズ、data は Message の特定のコンテンツであると考えることができます。

目次

1. オフセット

2、メッセージサイズ

3. データ


 

1. オフセット

Kafka では、各パーティション (Partition) に一意のオフセット (Offset) があり、パーティション内のメッセージの位置を識別するために使用されます。オフセットは、パーティション内のメッセージの番号またはインデックスとして理解できます。

各メッセージには、それが属するパーティションを基準とした特定のオフセットが割り当てられます。メッセージが Kafka パーティションに書き込まれるとき、Kafka は各メッセージに増分オフセットを割り当て、後でメッセージを正確に見つけられるようにします。オフセットは 64 ビット長の整数値で、通常は整数として表されます。

オフセットの機能は、メッセージの順序と位置決め機能を提供することです。コンシューマーはオフセットを使用して、パーティションのどこからメッセージの消費を開始するかを指定できます。各消費の後、コンシューマは消費されたメッセージのオフセットを送信して、次回消費されるときに正しい位置から消費し続けることができるようにします。これにより、メッセージが順番に消費されることが保証されると同時に、柔軟な消費場所の追跡とフォールト トレランスも提供されます。

オフセットを通じて、Kafka はメッセージが常に順番に書き込まれ、消費されることを保証でき、障害やリバランスの場合でも一貫性を維持できます。オフセットの管理は Kafka クラスターによって自動的に処理されるため、コンシューマーは正しいオフセットを送信することだけに集中する必要があります。

 

2、メッセージサイズ

Kafka では、MessageSizeこれは各メッセージの属性ではなく、メッセージのサイズ、つまりメッセージ本文のバイト数です。

Kafka の各メッセージは、メッセージ ヘッダー (Message Header) とメッセージ本文 (Message Body) の 2 つの部分で構成されます。メッセージ ヘッダーには、メッセージの件名、パーティション、オフセットなどのメタデータが含まれており、メッセージ本文は実際のデータ コンテンツです。

メッセージのサイズを取得するには、メッセージ ヘッダーとメッセージ本文のバイト数の合計を計算することで取得できます。Kafka は、ConsumerRecord消費されたメッセージを表すオブジェクトを提供します。オブジェクトには、メッセージの属性とデータが含まれます。オブジェクトを使用すると、メソッドConsumerRecordを呼び出すことでvalue()メッセージ本文のバイト配列を取得でき、lengthプロパティを使用してバイト配列の長さ、つまりメッセージのサイズを取得できます。

サンプルコードは次のとおりです。

ConsumerRecord<String, String> record = ... // 从消费者获取到的消息
String message =.value();
int messageSize = message.getBytes().length;
System.out.println("消息大小:" + messageSize + "字节");

Kafka のメッセージ サイズ制限のため、大きなメッセージは複数のフラグメントに分割され、複数の異なるメッセージに格納される場合があることに注意してください。したがって、メッセージ全体のサイズを取得したい場合は、複数のフラグメントを蓄積することを検討する必要がある場合があります。

 

3. データ

Kafka では、各メッセージに、メッセージの実際のデータ内容である「data」と呼ばれるプロパティを含めることができます。これはキーと値のペアで、キーは「データ」、値はメッセージのペイロードです。Kafka のメッセージ メカニズムでは、データはバイト配列の形式で送信および保存されます。

Java では、Kafka のコンシューマ API を使用してメッセージ内の「data」属性を取得できます。サンプルコードは次のとおりです。

ConsumerRecord<String, String> record = ... // 从消费者获取到的消息
String data = record.value();
System.out.println("消息的数据内容:" + data);

このメソッドvalue()は、メッセージのデータ内容、つまり「data」属性の値を返します。この例では、データの内容を String 型の変数に保存していますが、実際の状況に応じて、保存と処理に異なるデータ型を使用することを選択できます。

Kafka ではメッセージのキーと値のペアの属性をカスタマイズできるため、メッセージには「データ」に加えて他のカスタム属性も含めることができることに注意してください。これらの属性は、メッセージ処理中により多くのメタデータ情報を運ぶために、ビジネス要件に応じて定義および使用できます。

おすすめ

転載: blog.csdn.net/2301_77899321/article/details/132218497