https://blog.csdn.net/weixin_33690963/article/details/91698279
シリアライゼーションカフカ:メーカーカフカそのような元のメッセージの値として、バイトにシリアル化する必要がある前に、着信メッセージは、最初のカスタムシリアル化となる構造体型倹約、です。
カフカデシリアライズ:関連するビジネスロジックの処理を実行するデータのデシリアライゼーションの順序を取得する必要がありますカフカからデータを取得した後、消費者。
相関関数:
ConsumerRecordsのAPI:
カフカのクラスタからレコードを受信するためのConsumerRecordのAPI。このAPIは、サブジェクト名、パーティション番号(受信機からのレコード)とカフカは、パーティション組成記録オフセット点です。ConsumerRecordクラスは、特定のトピック名で消費者のレコードを作成するために使用され、のパーティション数<キー、値>。右。それは次のシグネチャがあります。
公共 ConsumerRecord(文字列のトピック、int型のパーティション、長いオフセット、Kキー、V値)
-
トピック - カフカのクラスタから受信したユーザレコードのトピック名。
-
パーティション - パーティションのテーマ。
-
キー - がある場合、キーレコードは、ヌルキーは返されません。
-
値 - 記録されたコンテンツ。
ConsumerRecords APIはConsumerRecordコンテナとして機能します。このAPIは、パーティションごとに特定のトピックConsumerRecordリストを保存するために使用されます。次のようにそのコンストラクタが定義されています。
公共ConsumerRecords(java.util.Map < TopicPartition、java.util.Listに<消費者の記録> K、V >>>記録)
-
- TopicPartition - 特定のトピックパーティションマップに戻ります。
- 録音 - ConsumerRecordリターンリスト。
II。シリアライズ
1.従来のシリアライズ
ストアが追加モードを満たすためにも、問題の順序があることは明らかであるが、最初のn個のオブジェクトから読み取ることはできませんが、それぞれが最初から読み始める必要があります。
通信のCS、C及びS末端としてカフカアーキテクチャは、これにより、S端子に目標バルク転送のシーケンスは、linger.ms(5ミリ秒)に到達するためにサーバ側batch.size(8K)又は時間にデータを送信するために、必要とされます推論通信端末C及び端末Sは、長い接続を使用すべきではなく、毎回送信データは、ソケットを開くことであり、また圧縮、ストレージをサポートし、高効率で安定した通信は、そのようなソフトウェアの本質的な特徴の一つです。
2.トランザクションのコミット
これは、キーと値を見ることができる[]は、各バイトの長さは、キーと値の組をスキップするスキップされるバイトにシリアライズされ、従って、最初のキー値を探していることができるが、これに応じてオフセットされています
どのようにオブジェクトのシーケンスバイトに[]、すべてのフィールドは、オブジェクトをシリアル化する必要があり、その後、最終的には基本データ型の列などの文字列に変換することは明らかです。
以下は、ダブルシリアライズとデシリアライズであります
カフカの配列比較を使用して、ダブル8バイト、
14バイトを占有のwriteDoubleシリアライズを使用しました
84バイトを占有のwriteObjectシリアライズを使用しました。これにより、メモリ帯域幅を占め、バイトの多くを取る、注意するようにしてください。。。
おそらく、オブジェクトの直列化された性質が識別されるバイトストリームを変換することです。
なぜあなたは時々この店だと思いませんか?
KEY1
VALUE1
KEY2
値2
KEY3
VALUE3
首先这种存储面临一个问题, 换行回车符号需进行转义存储。二是这种存储和读取高效么,一行一行进行处理。仅仅是推测,具体实现是不是这样没有考究。一行一行的读取无非是一个一个字节的读取,读到\n便是一行,这种读取方式应该不是很高明。