カフカの生産者と消費者のJava実装例

RabbitMQの類似の構造とカフカは、カフカメッセージプロデューサは、メッセージカフカを受信した後、サーバーにメッセージを送信し、その後、消費者に届け。
消費者の生産者がトピックに送信され、トピックは、データのすべてのタイプのキー、値の保存を使用して、各データを保存しました。
トピックのそれぞれは、1つまたは複数の物理パーティション(パーティション)、内容とインデックス・パーティションのメンテナンスメッセージが含まれ、それらは異なるサーバに格納することができます。

pom.xmlが依存参加、Mavenプロジェクトを作成します。

        < 依存性> 
            < のgroupId > org.apache.kafka </ のgroupId > 
            < たartifactId >カフカ-クライアント</ たartifactId > 
            < バージョン> 2.3.0 </ バージョン> 
        </ 依存>

1、書き込みプロデューサー

カフカは、サーバー名にメッセージを配信トピックの「topic1」であります

パッケージはcom.example.kafkatest、

インポートorg.apache.kafka.clients.producer.KafkaProducerを、
 インポートorg.apache.kafka.clients.producer.ProducerRecord;
 インポートorg.apache.kafka.common.serialization.StringSerializer; 

インポートjava.utilのクラス.properties; 

パブリック クラスプロデューサー{
     公共 静的 ボイドメイン(文字列[]引数){
         // の設定情報 
        プロパティの小道具= 新しい新しいプロパティ();
         // カフカサーバアドレス 
        props.put(「bootstrap.servers」、「ローカルホスト :9092」 );
         // 配列のキーと値を処理するデータの種類を設定します
        props.put( "key.serializer"、StringSerializer。クラス); 
        props.put( "value.serializer"、StringSerializer。クラス);
        // 创建生产者实例 
        KafkaProducer <文字列、文字列>プロデューサー= 新しい KafkaProducer <> 小道具)。
        ProducerRecordレコード =  ProducerRecord <文字列、文字列>( "topic1"、 "userNameに"、 "LC" );
        // 发送记录
        producer.send(レコード)。
        producer.close(); 
    } 
}

実行した後、あなたは、カフカのディレクトリを入力して、コマンドラインツールを開き、サーバーのトピックを照会するコマンドを実行することができます。

ビン\ WINDOWS \カフカ-topics.bat --list --zookeeperはlocalhost:2181

結果は以下の通りであります:


2、書き込み消費者

この例では、同じプロジェクトで、消費者と生産者が、異なる起動クラスを使用して。
消費者は、自分のために、消費者のグループのIDを指定します、トピックへの各レコードは、消費者の例・コンシューマ・グループに配信されます掲載しました。
複数のインスタンスの消費者は、消費者の同じグループを持っている場合、これらのレコードは、ロード・バランシング・ディレクトリを達成するために、各コンシューマ・インスタンスに割り当てられます。
すべての消費者が別の消費者団体を持っている場合は、各レコードは、処理のために、すべての消費者に放送されます。

パッケージcom.example.rabbittest; 

輸入org.apache.kafka.clients.consumer.ConsumerRecord;
輸入org.apache.kafka.clients.consumer.ConsumerRecords。
輸入org.apache.kafka.clients.consumer.KafkaConsumer;
輸入org.apache.kafka.common.serialization.StringDeserializer; 

輸入java.time.Duration。
輸入java.util.Arrays。
輸入java.util.Properties; 

パブリック クラスコンシューマー{
     公共の 静的な 無効メイン(文字列[] args)を{
         // 配置信息 
        プロパティの小道具= 新しいプロパティ();
        //カフカサーバアドレス 
        props.put(「bootstrap.servers」、「ローカルホスト:9092」);
         //は、コンシューマ・グループに指定されなければならない 
        (「group.id」、「テスト」をprops.put );
         // データのキーと値を設定しますシーケンス処理基づい 
        props.put( "key.deserializer"、StringDeserializerする。クラス); 
        props.put( "value.deserializer"、StringDeserializerする。クラス);
         // によりメッセージインスタンスを作成 
        KafkaConsumer <文字列、文字列>コンシューマ= 新しい新しい KafkaConsumer <> 小道具);
         // topic1メッセージ購読 
        Consumer.subscribe(は、Arrays.asList( "topic1を" ));
        // サーバに記録読み込み、
        しばらく){ 
            ConsumerRecords <文字列、文字列>レコード= consumer.poll(Duration.ofMillis(100 ))。
            (ConsumerRecord <文字列、文字列> {:レコードレコード)
                のSystem.out.println( "キー" + record.key()+ "" + "値:" + record.value())。
            } 
        } 
    } 
}

実行した後、IDEA、次のようにコンソール出力であることを特徴:

 

おすすめ

転載: www.cnblogs.com/gdjlc/p/11914645.html