プロデューサー演算処理:
プロデューサーデモデモ
カフカのクライアントがに頼る導入するプロジェクトのニーズを構築Mavenの:
< 依存性> < のgroupId > org.apache.kafka </ のgroupId > < たartifactId >カフカ-クライアント</ たartifactId > < バージョン> 1.1.0 </ バージョン> </ 依存>
プロデューサーコード
輸入 org.apache.kafka.clients.producer *。; 輸入org.apache.kafka.common.errors.RetriableException。 輸入java.util.Properties; 輸入java.util.concurrent.ExecutionException。 / ** * *リトライ異常 * 1.パーティションのコピーは使用できません。 * 2.コントローラは、現在使用できません * 3.ネットワーク一過性の障害 * *セルフヒーリング、再試行回数が必要以上に裁量 * * *異常な再試行しないでください。 * 1.送信メッセージ特大 * 2.異常な失敗のシーケンス 異常の* 3。他のタイプ * * * / パブリック クラスKafkaProducerDemo { パブリック 静的 ボイドメイン(文字列[]引数){ プロパティプロパティ = 新しいプロパティ(); // クラスタの過剰な数は、機械の一部をすることができ指定した場合、FQDNを使用して、ホスト名、内部カフカを使用するのが最善です。 properties.putは( "bootstrap.servers"、 "localhostを:9092、localhostを:9093、localhostを:9094" ); // ブローカーにメッセージを送信するデータのバイトでなければならない、key.serializerが設定されている必要があり、直列化されなければなりませんなしデフォルト properties.put( "key.serializer"、 "org.apache.kafka.common.serialization.StringSerializer" ); properties.put( "value.serializer"、 "org.apache.kafka.common.serialization.StringSerializer" ); // 制御メッセージには、いくつかの成功した成功送らみなさコピー、0、すべてを(-1)、書かれています1(デフォルト) // 0は、メッセージが正常に送信されているかどうかを気にしない // 生存に少なくとも1つのコピーが-1 ISR // 成功した同期(妥協)のコピーを待たずに、1つのBrokerのメッセージは、ローカルログに書き込まれますが 、「(properties.put ACKを"" -1 " ); System.out.println(ProducerConfig.ACKS_CONFIG)。 // 再試行が重複したメッセージをもたらすことができる properties.put(、 "再試行"を」3" 。); // とレイテンシデフォルト16キロバイトスループットチューニング properties.put( "batch.size"、1048576 ); // BATCH満たされていない、伝送待つ時間 properties.put( "linger.ms"、10 ); // 32MBのキャッシュバッファサイズメッセージ properties.put( "buffer.memory"、 "33554432"を)。 System.out.println(ProducerConfig.BUFFER_MEMORY_CONFIG)。 // 压缩算法 properties.put(ProducerConfig.COMPRESSION_TYPE_CONFIG、 "LZ4" ); properties.put( "max.block.ms"、 "3000" )。 プロデューサー <文字列、文字列>プロデューサー= 新しい新しい KafkaProducer <文字列、文字列> (プロパティ); のため(int型私は= 0; I <10; I ++ ){ // 最高は自身のタイムスタンプを指定しない // コールバック関数を使用するのが好ましいです成功するかどうかを確認するためのメッセージを送信する // 非同期伝送の下 producer.send(新新 ProducerRecord <文字列、文字列>(「マイ・トピック」は、(I)持つInteger.toString(I))持つInteger.toString、新新コールバック(){ 公共 ボイドonCompletion(RecordMetadataメタデータ、例外exception){ IF(例外== NULL ){ System.out.println( "メッセージが正常に送信されました" ); } 他{ System.out.println( "失敗メッセージ" ); IF(例外のinstanceofのRetriableException){ System.out.println( "例外処理の再試行" ); } 他{ System.out.println(「例外処理が再試行ではありません」); } } } }); System.out.println(「>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 。>>>>>>>>>>>>>>>>>>>>>」); // 同步发送 ProducerRecord <文字列、文字列> producerRecord = 新しい ProducerRecord <文字列、文字列>( "テスト" 、持つInteger.toString(I)); してみてください{ RecordMetadata recordMetadata = producer.send(producerRecord)に.get(); System.out.println( "同期伝送戻り値:" recordMetadata.toString +()+ ""
+ recordMetadata.topic()+ "" + recordMetadata.partition())。 } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } キャッチ(ExecutionException電子){ e.printStackTrace(); } } // 注意テープタイムアウトパラメータでCloseメソッドを使用します (producer.close)。 } }