それを参照しています作るために自分自身に思い出させることなく、読者に重要な場所で。
(1)シリアライゼーション、デシリアライゼーション。
この記事に注意して
https://www.jianshu.com/p/5da86afed228
オンライン大抵それらが実際のオブジェクトに変身するために、DEMOと考えられている、文字列オブジェクトを推進しているが渡された多くの例、シリアライズとデシリアライズを必要とする、または確かにエラーに
(2)ポート番号の問題
8080は全体SpringBootを引き起こし、飼育係が占有される通常のスタートは、プロジェクトを開始するために失敗した後、私の構成の第1の部分によると、飼育係の構成は、ポートが異常に占有されていることを報告しました。
(3)KAFKAは、分散コンポーネントとして、深遠な場所、多くのアプリケーションシナリオがなければならない、我々は、慎重に検討を学ぶ必要があります
https://www.jianshu.com/p/a64defb44a23を参照してください。
のみ参照目的のために私の参照コード
パッケージcom.kafkastudy.kafka01。 輸入com.kafkastudy.kafka01.producer.UserProducer; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.boot.SpringApplication。 輸入org.springframework.boot.autoconfigure.SpringBootApplication。 輸入org.springframework.context.annotation.ComponentScan; 輸入javax.annotation.PostConstruct; @SuppressWarnings( "SpringJavaInjectionPointsAutowiringInspection") @SpringBootApplication @ComponentScan(basePackages = { "com.kafkastudy.kafka01 *。"}) publicクラスKafka01Application { @Autowired プライベートUserProducer kafkaSender。 @PostConstruct {)(公共ボイドINITを System.out.println( "スタート---------------- ----------"); のため(int型I = 0; I <10; I ++) { メッセージクラスを送信するための//呼び出しメッセージ伝送方法 kafkaSender.sendData(I); } のSystem.out.println(「エンド---------- ------------ ----「); } 公共の静的な無効メイン(文字列[] args){ SpringApplication.run(Kafka01Application.class、引数); } }
プロパティファイルの設定以下のように、と番号のデータ容量を調整
8081 =はserver.port #==============カフカが住んでいた=================== #カフカサーバーマルチクラスタで、アドレスを指定途中、コンマ spring.kafka.bootstrap-サーバー= 127.0.0.1:9092 #===============プロバイダ============= ========== #書き込みが再試行、失敗したとき。リーダーノードに障害が発生した場合、交換がリーダーREPLIノードノードとなり、その後、書き込み不良が発生する可能性があり、う #retrisが0であるとき、農産物が繰り返されることはありません。retirsの再送が、その後、ノードREPLIリーダーノードがいっぱいになると、メッセージが失われることはありません。 = 0 spring.kafka.producer.retries 特定のデータ伝送時間に蓄積されたバッチごとに送信されるメッセージの数#生産 #1 spring.kafka.producer.batchサイズ= 16384 spring.kafka.producer.batchサイズ= 16 #蓄積されたデータの送信時間を生成する、バッファサイズが到達がbuffer.memory送信データ #1 spring.kafka.producer.bufferメモリー= 33554432 spring.kafka.producer.buffer-メモリ128 = 要求が完了したと見なされる前#procedure請求リーダーが受信されます確認応答番号、値は次のようにすることが可能なサービス永続記録の送信側を制御します。 #acks = 0ゼロに設定した場合には、生産者は、サーバからの任意の確認を待機しません、レコードは、ソケットバッファに直ちに添加し、送信されたとみなされます。サーバーが受信した記録が保証することはできませんし、(クライアントは通常、任意の障害を知っていないので)、リトライ設定は効果がありません。この場合、各レコードのオフセットは常にに設定されて-1が返されます。 リーダーは自分のローカルログを書き記録しますが、サーバーのすべてのコピーを待たずに、完全にリーダーがレコードを確認した後、すぐに失敗した場合、この場合には、確認されたが、意志を対応できること#acks = 1この手段すべての複製サーバーにデータをコピーする前に、レコードが失われます。 完全なレプリカセットを待ちます#acks =このすべて平均リーダーが記録を確認するために同期され、長い少なくとも1台の同期レプリカサーバがまだ生きているように、レコードが失われないよう、これは同等のACKで最も強力な保証、であることを保証します= -1の設定。 #値を設定することができる:すべて、-1、0 ,. 1 。spring.kafka.producer.acks 1 = コーデック#指定されたメッセージ鍵とメッセージ本体 spring.kafka.producer.key-シリアライザ= org.apache.kafka .common.serialization.StringSerializer spring.kafka.producer.value-シリアライザ= org.apache.kafka.common.serialization.StringSerializer #===============消費者====== ================= #デフォルトのコンシューマ・グループIDを指定- >カフカので、消費者の同じグループが同じメッセージを読んでいない、頼りgroud.idグループ名を設定します ID = om.kafkaStudy-spring.kafka.consumer.group #最小と最大の唯一の有効な最大オフセットログファイルから読み込む場合は最小は再び、ゼロを読めば。通常の状況下で、我々は最小に設定されている spring.kafka.consumer.autoオフセット-RESET =最古 #のenable.auto.commitを:trueに- >設定自動オフセットコミット へ=コミットspring.kafka.consumer.enable真を、自動 # 「enable.auto.commit」がtrueの場合は、周波数オフセットが自動的に消費者(ミリ秒単位)カフカに提示され、デフォルト値は5000です。 spring.kafka.consumer.autoコミット間隔= 100 コーデック#指定されたメッセージ鍵とメッセージボディ spring.kafka.consumer.key-デシリアライザ= org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer .VALUE-デシリアライザ= org.apache.kafka.common.serialization.StringDeserializer
パッケージcom.kafkastudy.kafka01.com.kafkastudy.kafka01。 輸入com.alibaba.fastjson.JSON; 輸入com.kafkastudy.kafka01.bean.User; 輸入org.springframework.kafka.annotation.KafkaListener; 輸入org.springframework.stereotype.Component; @Component パブリッククラスConsumerListener { @KafkaListener(トピック= "userTest") 公共ボイドのonMessage(文字列ユーザ){ // insertIntoDb(バッファ); //这里为插入数据库代码 のSystem.out.println( "------受信---------- "); System.out.println(ユーザ)。 System.out.println( "------ ----------端部を受け入れます"); } }
パッケージcom.kafkastudy.kafka01.producer。 輸入com.alibaba.fastjson.JSON; 輸入com.kafkastudy.kafka01.bean.User; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.context.annotation.Configuration。 輸入org.springframework.kafka.core.KafkaTemplate; @Configuration パブリッククラスUserProducer { @Autowired プライベートKafkaTemplate kafkaTemplate。 / ** *发送数据 * @paramユーザーID * / 公共のボイドのsendData(長いユーザーID){ ユーザーUSERLOG =新しいユーザー(); userLog.setName( "試験")。 userLog.setId(ユーザーID); System.err.println( "发送用户日志数据:" + USERLOG)。 kafkaTemplate.send( "userTest"、JSON.toJSONString(USERLOG)); } }
com.kafkastudy.kafka01.beanパッケージ; インポートしたjava.io.Serializable; パブリッククラスユーザーが実装Serializableを{ プライベートロングID。 プライベート文字列名; プライベート整数歳。 / ** *過渡关键字修饰的字段不会被序列化 * / プライベート過渡文字列のDESC; 公衆ロングのgetId(){ 戻りID。 } 公共ボイドSETID(ロングID){ this.id = ID。 } パブリック文字列のgetName(){ 戻り名。 } 公共ボイドのsetName(文字列名){ this.name =名。 } パブリック整数getAge(){ 戻り年齢; } 公共ボイドsetAge(整数年齢){ this.age =年齢。 } パブリック文字列getDesc(){ 戻りDESC。 } 公共ボイドsetDesc(文字列DESC){ this.desc = DESC。 } @Override パブリック文字列のtoString(){ 戻り"ユーザー{" + "ID =" + ID + "NAME = '" +名+ '\'' + "年齢=" +年齢+ 」、DESC = '」 + DESC + '\' } }