WindowsでのKafkaの非常にシンプルなインストールとデプロイのインスタンス+ SpringbootでのKafkaの2つの統合インスタンス(プロデューサー/コンシューマーインスタンス)

カフカとは何かを簡単に説明する

Apache kafkaは一種のメッセージミドルウェアです。多くの人がメッセージミドルウェアとは何かを知らないことがわかりました。学習を始める前に、メッセージミドルウェアとは何かを簡単に説明します。これは大まかな説明です。Kafkaにはすでに可能性のある更多ものがあります。完了しました

たとえば、生産者の消費者、生産者が卵を生産する、消費者が卵を消費する、生産者が卵を生産する、消費者が卵を消費する、消費者が卵を消費するときに窒息すると仮定する(システムがダウンしている)、生産まだ卵を産んでいるが、新しく産まれた卵は失われる。もう1つの例は、生産者が非常に強力で(トランザクション量が多い場合)、生産者が1秒あたり100個の卵を生産し、消費者が1秒あたり50個の卵しか食べられないことです。その後、しばらくすると、消費者は食べられる(メッセージがブロックされる)、最終的にはシステムがタイムアウトする)、消費者はそれ以上食べることを拒否し、「卵」は再び失われます。このとき、私たちはそれらの間にバスケットを入れ、すべての生産された卵はバスケットに入れられます。消費者はバスケットに卵を取りに行きます。卵は失われることはなく、すべてバスケットに入っています。このバスケットは「カフカ」です。
卵は実際には「データストリーム」であり、システム間の相互作用は「データストリーム」(つまり、tcp、httpsなど)を介して送信されます。これはメッセージまたは「メッセージ」とも呼ばれます。
メッセージキューがいっぱいです。実際、バスケットがいっぱいで、「卵」が収まらないので、急いでバスケットをもう少し入れてください。これは、実際にはKafkaの拡張です。
今では誰もがカフカが何をしているのかを知っています。それは「バスケット」です。

カフカ名詞の説明

後で、トピック、プロデューサー、コンシューマー、ブローカーなど、kafkaに関するいくつかの用語が表示されます。簡単に説明します。

producer:プロデューサー、「卵」を作るのです。

consumer:消費者、彼らが生産する「卵」は消費されます。

topic:あなたはそれをラベルとして理解しています。生産者によって生産されたすべての卵にはラベル(トピック)が付けられます。消費者は、異なる生産者によって生産されたすべての「卵」を食べるわけではありません。このように、異なる生産者、消費者によって生産された「卵」選択的に「食べる」ことができます。

broker:バスケットです。

誰もが抽象的に考えることを学ぶ必要があります。上記はビジネスの観点にすぎません。技術的な観点からは、トピックタグは実際にはキューです。プロデューサーはすべての「卵(メッセージ)」を対応するキューに入れ、コンシューマーは指定キューから取り出します。


著者:Orc
リンク:https
://www.orchome.com/kafka/index出典:OrcHome

上記はOrcHomeのKafka中国語チュートリアルの紹介です。非常に鮮やかで、専門用語よりもはるかに理解しやすく、初心者に適していると思います。

1.WindowsでのKafkaのインストールとデプロイの例

1.最初にApacheKafkaをダウンロードします

http://kafka.apache.org/downloads

以下のリンクに注意してください

2.圧縮されたパッケージを解凍します

3.次に、kafka_2.12-2.3.0 \ bin \ windowsフォルダーに入ります。そして、アドレスバーにcmd enterと入力して、コマンドラインを開きます。

PS:次の5つのコマンドはそれぞれ、実行するために新しいcmdを開く必要があり、閉じないでください(閉じることができるトピックコマンドの作成を除く)

4.最初にzookeeperを起動し、次のコマンドを入力します:。\ zookeeper-server-start.bat .. \ .. \ config \ zookeeper.properties

Kafkaを起動し、次のコマンドを入力します:。\ kafka-server-start.bat .. \ .. \ config \ server.properties

次に、トピックを作成してtestという名前を付け(すでにここで作成しているので、図の別のトピックを使用します)、次のコマンドを入力します。。\ kafka-topics.bat --create --zookeeper localhost:2181-レプリケーションファクター1-パーティション1-トピックテスト

次に、1つ以上のプロデューサーを作成し、テストするトピックを設定して、次のコマンドを入力します。。\ kafka-console-producer.bat --broker-list localhost:9092 --topic test

最後に、1つ以上のコンシューマーを作成し、テストするトピックを設定して、次のコマンドを入力します。。\ kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

サバイバーで送信されたメッセージは、同じトピックの下で消費者が受信できます。簡単なKafkaの生産者/消費者の例を完了しました。おめでとうございます。

次に、SpringBoot統合Kafkaの2つの単純なプロデューサー/コンシューマーインスタンスが実装されます。

2.SpringbootでのKafka統合の例

最初に最初のものを紹介します。依存関係の紹介はorg.apache.kafkaです。このメソッドはkafkaの公式文書のメソッドであり、コードはより複雑です。

以前に遭遇した問題、SBについてお話しします。依存関係を導入した後、自分でカフカを起動する必要はないと思ったので、カフカは起動せず、失敗しました。実際、最初にKafkaを起動する必要があります。次のコードは、コンシューマーとサバイバーのインスタンスを作成するだけで、Kafkaの起動は含まれていません。

Zookeeperのデフォルトポート:2181

Kafkaのデフォルトポート:9092

1.まず、pom.xmlにorg.apache.kafkaの依存関係を導入します

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>1.1.0</version>
        </dependency>

ここで、依存するProducerAPIとConsumerAPIの実装のバージョンが少し異なる場合があることに注意する必要があります。ここにあるバージョンは1.5.10.RELEASEで、公式Webサイトはhttp://kafka.apache.org/documentation/にリンクできます。APIインスタンスの異なるバージョンを表示します。

2.プロデューサーインスタンスの実装を開始します

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

/**
 * @author ZZJ
 * @description:
 * @date 2019-10-10 15:23
 */
public class MyKafkaProducer {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092"); //kafka端口
        props.put("acks", "all");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("buffer.memory", 33554432);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); //key值序列化配置
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); //value值序列化配置

        Producer<String, String> producer = new KafkaProducer<>(props);
        producer.send(new ProducerRecord<>("test", "hello to MykafkaComsumer")); //topic和对应消息

        producer.close();
    }
}

main関数を実行して、testという名前のトピックへのメッセージを生成します

3.消費者の例の実装を開始します

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

import java.util.Arrays;
import java.util.Properties;

/**
 * @author ZZJ
 * @description:
 * @date 2019-10-10 15:48
 */
public class MyKafkaConsumer {
    public static void main(String[] args) {

        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("group.id", "myGroup"); 分组名
        props.put("enable.auto.commit", "true");
        props.put("auto.commit.interval.ms", "1000");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Arrays.asList("test")); //这边是消费者的topic订阅,可订阅多个
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(100); //循环拉取消息
            for (ConsumerRecord<String, String> record : records)
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
        }
    }
}

main関数を実行して、サブスクライブされたトピックをループで監視します

 

次に、spring.kafkaへの依存関係を導入するための2つ目があります。このメソッドのコードは非常に単純です。コンシューマーは、@ kafkalistenerを介して監視できます。

1.まず、pom.xmlにorg.springframework.kafkaの依存関係を導入します

        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>1.1.7.RELEASE</version>
        </dependency>

2.application.propertiesファイルにKafka構成を追加します

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=myGroup

3.プロデューサーインスタンスの実装を開始します

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

/**
 * @author ZZJ
 * @description:
 * @date 2019-10-10 11:09
 */
@Service
public class KafkaProducer2 {
    @Autowired
    KafkaTemplate kafkaTemplate;

    public void sender(String topic,String value){
        kafkaTemplate.send(topic,value);
    }
}

プロデューサーはKafkaTemplateクラスを介してメッセージを送信します

4.消費者の例の実装を開始します

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

/**
 * @author ZZJ
 * @description:
 * @date 2019-10-10 11:32
 */
@Service
public class KafkaConsumer2 {
    @KafkaListener(topics = "test")
    public void consumer(String message){
        System.out.println(message);
    }
}

ここの@KafkaListenerアノテーションはトピックを監視できます

5.テストクラスを作成し、プロデューサークラスとコンシューマークラスを挿入します

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class KafkaProducer2Test {

    @Autowired
    private KafkaProducer2 kafkaProducer2; //注入生产者
    @Autowired
    private KafkaConsumer2 kafkaConsumer2; //注入消费者,注入后即可监听

    @Test
    public void sender() {
        try { 
            Thread.sleep(3000); //这里sleep保证消费者开始监听后才发送消息
            kafkaProducer2.sender("test","8888----7777");//生产者发送消息
            Thread.sleep(80000000); //sleep方便消费者监听
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

上記の3つのインスタンスのプロデューサーとコンシューマーはメッセージを交換でき、同時にテストのために複数のインスタンスを開くことができます。これらは、私が複数のブログを研究した後の統合であり、初心者がKafkaを理解してすばやく実装するのに適しています。

 

 

おすすめ

転載: blog.csdn.net/qq_35530005/article/details/102484310
おすすめ