Kafka--プロデューサー

アプリケーションは、カフカのメッセージに多くの場合、書き込まれる必要があります、メッセージをログ情報インテリジェント家電、他のアプリケーションとの非同期通信の記録を保存し、メトリクスの記録(監査および分析のための)ユーザの活動を記録し、緩衝液は約ありますデータベースに書き込まれたデータ、およびように。

使用シナリオのさまざまな多様なニーズを暗示:各メッセージが重要であるかどうか?メッセージのごく一部の損失を許可するかどうか?時折重複メッセージを受け入れることができるかどうか?厳格なレイテンシとスループット要件はありますか?

異なる使用シナリオに直接的な影響は、使用方法や設定のプロデューサーAPIになります。

 

 

メッセージ送信プロセス

まずProducerRecordオブジェクトを作成します。

  ProducerRecord対象オブジェクトは、テーマと内容を送信することが含まれています。

  あなたは、キーまたはパーティションを指定することができます。

ネットワークを介して送信するためのキーワード、バイト配列にキーシーケンスがある場合。同様に、コンテンツが送信される、即ち値がシリアライズされたバイト配列を必要とします。

次に、データがパーティに渡されます。

  ProducerRecordは、指定されたパーティション内のオブジェクトの前にあれば、パーティションが返すように指定されたパーティションに直接何もしないです。

  パーティションを指定しない場合、パーティションは、パーティションProducerRecord・オブジェクト・キーに基づいて選択されます。

パーティションを選択した後、生産者は、レコードを送信するためにどのトピックやパーティションを知っています。

その後、このレコードは、バッチ内のレコードに追加されます。

  このバッチ内のすべてのメッセージが同じテーマやパーティションに送信されます。

  別のスレッドが適切なブローカーに送信されたこれらのバッチ記録を担当してあります。

サーバーでこれらのメッセージを受信すると、対応する返します。

  メッセージが正常にカフカに記述されている場合、それがテーマとパーティションの情報が含まれていRecordMetaDataオブジェクトを返し、パーティションのオフセットを記録します。

  書き込みに失敗した場合は、エラーが返されます。

それはエラーメッセージを返す場合は、エラーを受信した後、生産者は、いくつかが失敗した後に、メッセージを再送信しようとしたりします。

 

 

カフカの生産パラメータ

bootstrap.servers

ポート:この属性は、ブローカーアドレスリストを指定し、アドレス形式は、ホストです。

ブローカーは生産者からのすべてのアドレスを含む必要はないリスト情報の他のブローカーに与えられたブローカーで探します。

これは、情報の少なくとも二つのブローカーは、スタンドアロンクラスタのいずれかの後、生産者はまだに接続できることをお勧めします。

このパラメータは必須パラメータです。

 

key.serializer

キーブローカと所望の値は、受信したメッセージのバイト配列です。

生産者インタフェースがパラメータ化された型の使用を可能にする、Javaオブジェクトのキーと値としてブローカに送信することができます。このコードは、良い読みやすさを持っていますが、生産者は、バイト配列にJavaオブジェクトにこれらを配置する方法を知っておく必要があります。

キー。インタフェースを実装するシリアライザorg.apache.kafka.common.serialization.Serializerクラスに設定する必要があり、プロデューサーは、バイト配列にクラスにキーシーケンスを使用します。

カフカのクライアントはByteArraySerializer、StringSerializerとIntegerSerializerデフォルトを提供します。

このパラメータは、値のみが送信された場合でも、設定する必要があります。

 

value.serializer

指定されたクラスの値のシーケンス。

このパラメータを設定する必要があります。

 

 

メッセージを送ります

生産者は消費者が、単一の複数のスレッドを使用することができ、単一のスレッド、単一の消費者を使用することができます。

または消費者を増やします。

 

送信し忘れます

私たちは、サーバーにメッセージを送信するが、それは通常の届くかどう気にしません。

カフカは非常に入手可能であり、生産者は自動的に再送信しようとするので、ほとんどの場合、メッセージは、通常到達します。

しかし、このアプローチは時々メッセージを失います。

 

同期伝送

私たちは、メッセージを送信する送信()を使用し、それは待つためにget()メソッドを呼び出し、Futureオブジェクトを返します。私たちは、メッセージが正常に送信されたかどうかを知ることができます。

 

非同期伝送

私たちは、send()メソッドを呼び出して、サーバが応答を返すときに、関数が呼び出され、コールバック関数を指定します。

おすすめ

転載: www.cnblogs.com/microcat/p/11432760.html