クイックJava、春、カフカ&ZooKeeperセットアップ



からのイメージ源

このチュートリアルでは、非常にシンプルかつ迅速な経験を体験します。

  • ジャバ
  • スプリングブーツ
  • アパッチカフカ
  • 動物園
  • 要件

  • Homebrew
  • テストPostman . 詳細を学ぶには、これを見ることができます.
  • 割賦


  • インストールJava 8
  • $ brew tap adoptopenjdk/openjdk
    $ brew cask install adoptopenjdk8
    

  • カフカをインストール
  • $ brew install kafka
    

  • 第1ターミナルを開き、ZooKeeperを起動する
  • $ zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
    

  • カフカを始めるために第2のターミナルを開けてください
  • $ kafka-server-start /usr/local/etc/kafka/server.properties
    

  • 第3ターミナルを開き、カフカトピックを作成します
  • $ kafka-topics --bootstrap-server localhost:9092 --topic <enter-a-topic> --create --partitions 1 --replication-factor 1
    

    SpringbootでMavenプロジェクトを作成する

  • オープンstart.spring.io
  • アパッチカフカ依存症のためにスプリングウェブと春を選んでください

  • IDEでプロジェクトを開きます
  • Kafkaプロデューサーと消費者を構成してください

  • これを加えるapplication.properties インsrc/main/resources フォルダー、およびハイライトを変更します
  • spring.datasource.url=jdbc:mysql://localhost:3306/<your-db-name>?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
    spring.datasource.username=<your-db-username>
    spring.datasource.password=<your-db-password>
    
    app.topic=<same-topic-created-in-terminal>
    
    spring.kafka.bootstrap-servers=localhost:9092
    spring.kafka.groupId=<any-group-id>
    
    spring.kafka.consumer.bootstrap-servers=localhost:9092
    spring.kafka.consumer.group-id=<any-group-id>
    spring.kafka.consumer.auto-offset-reset=earliest
    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.bootstrap-servers=localhost:9092
    spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
    spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
    
  • 新しい端末を開き、トピックを作成します.
  • kafka-topics --bootstrap-server localhost:9092 --topic <same-topic-in-application.properties> --create --partitions 1 --replication-factor 1
    

    カフカプロデューサー&レシーバー

  • パッケージ内部com.example , これらのフォルダを作成します$ mkdir controller model repository service
  • プロデューサーとレシーバサービス$ touch service/KafkaConsumer.java service/KafkaProducer.java
  • これをKafkaconsumerに追加します.
  • package <enter-your-package-here>;
    
    import org.springframework.kafka.annotation.KafkaListener;
    import org.springframework.stereotype.Service;
    import java.util.ArrayList;
    import java.util.List;
    @Service
    public class KafkaConsumer {
        public static List<String> messages = new ArrayList<>();
        private final static String topic = "<same-topic-in-resources>";
        private final static String groupId = "<same-group-id>";
    
        @KafkaListener(topics = topic, groupId = groupId)
        public void listen(String message) {
            messages.add(message);
        }
    }
    
  • このコードをKafkaproducerに追加します.
  • package <enter-your-package-here>;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.kafka.core.KafkaTemplate;
    import org.springframework.stereotype.Service;
    
    @Service
    public class KafkaProducer {
    
        @Autowired
        private KafkaTemplate<String, String> kafkaTemplate;
    
        @Value("${app.topic}")
        private String topic;
    
        public void produce(String message) {
            kafkaTemplate.send(topic, message);
        }
    }
    

    クリエーターカフカ

  • Kafkaコントローラファイルを作成します$ touch controller/kafkaController.java を追加します.
  • package server.controller;
    
    import org.springframework.web.bind.annotation.*;
    
    import server.service.KafkaConsumer;
    import server.service.KafkaProducer;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import java.util.List;
    
    @RestController
    public class KafkaController {
      @Autowired
      private KafkaConsumer consumer;
    
      @Autowired
      private KafkaProducer producer;
    
      @PostMapping("/send")
      public void send(@RequestBody String data) {
        producer.produce(data);
      }
      @GetMapping("/receive")
      public List<String> receive() {
        return consumer.messages;
      }
    
      public KafkaConsumer getConsumer() {
        return consumer;
      }
    
      public KafkaProducer getProducer() {
        return producer;
      }
    
      public void setConsumer(KafkaConsumer consumer) {
        this.consumer = consumer;
      }
    
      public void setProducer(KafkaProducer producer) {
        this.producer = producer;
      }
    }
    
    注意:モデルとリポジトリでも、データベースで設定するために使用しますが、このチュートリアルでは必要ありません.

    最終プロジェクト構造



    テスト


    プロデューサーからメッセージを送信する2つの方法があります.
    トピックを作成するために使用した3番目の端末を開きます
    $ kafka-console-consumer --bootstrap-server localhost:9092 --topic <enter-your-topic> --from-beginning
    
    1 .郵便配達人
    ポスト/メソッドを使用してlocalhostを入力します.
    {
       "message": "Hello from Postman"
    }
    
    第2ターミナル
    4番目の端末を開き、次のように入力します.
    $ kafka-console-producer --broker-list localhost:9092 --topic <enter-your-topic>
    > Hello from the terminal
    
    端末をチェックすると、Postmanと端末経由でリアルタイムで送信されたメッセージが表示されます.

    完了&おめでとう!

  • フォローアップしてくださいGithub | |