依存性:
<依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータウェブ</たartifactId> </依存> <依存性> <のgroupId> org.springframework.kafka </のgroupId> <たartifactId >春・カフカ</たartifactId> </依存関係>
application.properties:
###カフカ設定 spring.kafka.bootstrap -serversを= 10.160.3.70:9092 spring.kafka.consumer.group -id = sea- テスト spring.kafka.consumer.enable -auto-コミット= falseを spring.kafka.consumer。自動 -offsetリセット= 早い spring.kafka.consumer.max -pollレコード= 2000 #spring.kafka.consumer.key -deserializer = org.apache.kafka.common.serialization.StringDeserializer #spring.kafka.consumer.value -deserializer = org.apache.kafka.common.serialization.StringDeserializer spring.kafka.producer.retries = 3 spring.kafka.producer.batch -size = 16384 spring.kafka.producer.buffer -memory = 33554432 spring.kafka.producer.linger = 10 #spring.kafka.producer.key -serializer = org.apache.kafka.common.serialization.StringSerializer #spring.kafka.producer.value -serializer = org.apache.kafka.common.serialization.StringSerializer
KafkaConfig:
パッケージcom.icil.topic.config。 輸入java.util.HashMapを; 輸入java.util.Map; 輸入org.apache.kafka.clients.admin.AdminClient。 輸入org.apache.kafka.clients.admin.AdminClientConfig; 輸入org.apache.kafka.clients.consumer.ConsumerConfig; 輸入org.apache.kafka.clients.producer.ProducerConfig; 輸入org.apache.kafka.common.serialization.StringDeserializer。 輸入org.apache.kafka.common.serialization.StringSerializer。 輸入org.springframework.beans.factory.annotation.Value。 輸入org.springframework.context.annotation.Bean。 インポートorg.springframework.context.annotation.Configuration; 輸入org.springframework.kafka.annotation.EnableKafka。 輸入org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; 輸入org.springframework.kafka.config.KafkaListenerContainerFactory; 輸入org.springframework.kafka.core.DefaultKafkaConsumerFactory; 輸入org.springframework.kafka.core.DefaultKafkaProducerFactory; 輸入org.springframework.kafka.core.KafkaAdmin。 輸入org.springframework.kafka.core.KafkaTemplate。 輸入org.springframework.kafka.core.ProducerFactory; インポートorg.springframework.kafka.listener.ContainerProperties; 輸入com.google.common.collect.Maps。 @Configuration @EnableKafka パブリック クラスKafkaConfig { @value( "$ {spring.kafka.bootstrap-サーバ}" ) プライベート文字列bootstrapServers。 @value( "$ {spring.kafka.consumer.group-ID}" ) プライベート文字列のgroupId。 @value( "$ {spring.kafka.consumer.enable-自動コミット}" ) プライベートブール自動コミット。 @value( "$ {spring.kafka.consumer.autoオフセットリセット}" ) プライベート文字列autoOffsetReset。 @value( "$ {spring.kafka.consumer.max-投票レコード}" ) プライベート整数maxPollRecords。 @value( "$ {spring.kafka.producer.linger}" ) プライベート int型リンガー。 @value( "$ {spring.kafka.producer.retries}" )、 プライベート整数リトライ。 @value( "$ {spring.kafka.producer.batchサイズ}" )、 プライベート整数BATCHSIZE。 @value( "$ {spring.kafka.producer.bufferメモリ}" )、 プライベート整数バッファメモリ。 // cankao:https://blog.csdn.net/tmeng521/article/details/90901925 パブリックマップの<string、オブジェクト> producerConfigs(){ 地図の<string、オブジェクト>小道具= 新しい新規のHashMap <> (); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG、bootstrapServers); // 設定リトライ回数 props.put(ProducerConfig.RETRIES_CONFIG 、再試行); // サイズのときBATCHSIZEがメッセージを送信達成 props.put(ProducerConfig.BATCH_SIZE_CONFIG、BATCHSIZE); // 遅延時間は、メッセージの送信にも到達していないバッチサイズ算出した送信達した後の時間を遅らせる props.putを( ProducerConfig.LINGER_MS_CONFIG、リンガ); // バッファの値 props.put(ProducerConfig.BUFFER_MEMORY_CONFIG、バッファメモリ); // シリアライゼーション手段 props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG、StringSerializer。クラス); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG、StringSerializer。クラス); // 。メッセージの確認応答プロデューサ端、1とすべては、さらに、ローカルリーダーを示すメッセージだけでなく、書き込まれます対応のコピーを書き込むこと props.put(ProducerConfig.ACKS_CONFIG、-1 ); // 単一のメッセージの最大値は、バイト単位で、デフォルト値は1048576である props.put(ProducerConfig.LINGER_MS_CONFIG、10485760 ); // セットブローカーは応答メッセージのプロデューサに戻されていない場合60秒以内に、送信が失敗したとみなされるブローカ応答時間、 props.put(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG、60000 ); // 指定されたインターセプタ(対応するクラスの値) props.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIGは、 "com.te.handler.KafkaProducerInterceptorは" ); // 圧縮アルゴリズムを設定します(デフォルトでは、木材の圧縮アルゴリズムである) props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG、 "LZ4"); // スナッピー リターン小道具; } @Bean // カフカ管理クラス管理クラスrabbitAdmin RabbitMQの等価を作成豆から使用されていないが定義adminClientトピックを作成することができない 公衆kafkaAdmin kafkaAdmin(){ 地図の<string、オブジェクト>小道具= 新しい新規 HashMapを<> (); // 接続アドレスカフカの構成例 // カフカアドレス、飼育係ありません props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG、bootstrapServers); KafkaAdmin ADMIN = 新しい新しいKafkaAdmin(小道具); 戻りADMINは; } @Bean //はカフカクライアント後、及びスプリングで作成Beanは、トピック、クラスタ環境を作成するために注入することができますコピーの作成 パブリックAdminClient AdminClient(){ 戻りAdminClient.create(kafkaAdmin()GETCONFIG()); } @Bean 公衆 producerFactoryは、<文字列、文字列> producerFactory(){ 戻り 新しい新しい DefaultKafkaProducerFactoryを<> (producerConfigs()); } @Bean 公衆KafkaTemplate <文字列、文字列> kafkaTemplate(){ 戻り 新しい KafkaTemplate <> (producerFactory())。 } @Bean パブリックマップの<string、オブジェクト> consumerConfigs(){ 地図の<string、オブジェクト>小道具= Maps.newHashMap()。 props.put(ConsumerConfig.GROUP_ID_CONFIG、のgroupId)。 props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG自動コミット)。 props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG、autoOffsetReset)。 props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG、bootstrapServers)。 props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG、maxPollRecords)。 // props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG、180000)。 // props.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG、900000); // props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG、900000); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG、StringDeserializer。クラス)。 props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG、StringDeserializer。クラス)。 返す小道具を。 } @Bean 公共 KafkaListenerContainerFactory <?> batchFactory(){ ConcurrentKafkaListenerContainerFactory <整数、文字列>工場= 新しいですConcurrentKafkaListenerContainerFactory <> (); factory.setConsumerFactoryは(新しい新しい DefaultKafkaConsumerFactory <> (consumerConfigs())); // 設定されたボリューム・コンシューマ、各バッチの量がConsumerConfig.MAX_POLL_RECORDS_CONFIGカフカ構成パラメータを提供した (factory.setBatchListener 真の); / / 再試行を設定するテンプレート // factory.setRetryTemplate(retryTemplate()); factory.getContainerProperties()setAckMode(ContainerProperties.AckMode.MANUAL);. 戻り工場; } }
あなたがトピックを初期化する必要がある場合:あなたは// cankaoを設定することができます。https://blog.csdn.net/tmeng521/article/details/90901925
@Configuration パブリック クラスKafkaInitialConfiguration { // 1にトピックのtopic.quick.initial及び8にパーティションの数を設定します。topicNameを作成し、コピーの数 @Bean // (豆initialTopicの名前)をビーン作成によって 公共NewTopic initialTopic(){ リターン 新新 NewTopic( "topic.quick.initial"、8、(ショート)1 ); } / ** *このよう@Bean、同じ名前のトピックは、それが上書きされた場合、以前の * @return * / // // 変更|パーティションの注目の数は、パーティションの数だけ減少しませ増やすことができます11をオンにします @Bean 公共NewTopic initialTopic2は、(){ 返す 新しい新NewTopic( "topic.quick.initial"、11、(ショート)1 ); } @Bean //はこのBeanなしカフカ管理クラス、管理クラスrabbitAdmin RabbitMQの等価を作成するには、自己定義adminClientを使用することができないトピックの作成 パブリックKafkaAdminをkafkaAdmin(){ 地図 = <文字列、オブジェクト>小道具新しい新規のHashMap <> (); // 接続アドレスカフカの構成例 // カフカアドレス、ないのZooKeeper props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG、 "127.0.0.1:9092" ); KafkaAdmin ADMIN = 新しい新しいKafkaAdmin(小道具); 戻りADMIN。 } @Bean //を注入した後、トピックカフカクライアント、ばねで作成ビーン作成することができる 公共AdminClient AdminClient(){ ReturnをAdminClient.create(kafkaAdmin()GETCONFIG()); } }
トピックを作成すると、手動ですべての話題のテストマニュアルをご確認ください
@Autowired // adminClienは、Beanを生成するために独自の設定を必要とする プライベート; AdminClient AdminClient @Autowired プライベート KafkaTemplate <文字列、文字列> kafkaTemplate; @Test // トピック作成手動でカスタムパーティションをし、 公共 のボイド)testCreateTopicを(スローInterruptedExceptionある{ // これはマニュアルがあります作成// 10のパーティションのコピー // 迅速同時性に対処することができ、パーティション多くの利点を、だけでなく、マシンの構成によれば NewTopicトピック= 新新 NewTopic(「topic.manual.create」、10、(ショート)1 ); adminClient.createTopics(は、Arrays.asList(トピック)); のThread.sleep(1000年); } / ** *获取所有的トピック * @throws 例外 * / @Test 公共 ボイド getAllTopic()がスロー例外{ ListTopicsResult listTopics = adminClient.listTopics()。 設定して <文字列>話題の=のlistTopics.names()(取得)。 以下のための(文字列のトピック:トピック){ System.err.println(トピック)。 } }