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、次のようにコンソール出力であることを特徴: