windows環境下 springboot 集成kafka(詳細篇)

一、配置zookeeper

(使用外部zookeeper,如果使用kafka自帶的直接看二)

1.首先kafka是幹什麼的,大家可以自行百度,原理等等,不在這裏贅述

2.kafka的運行需要zookeeper提供環境,所以首先去apache下載zookeeper

下載地址爲https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/    選擇某個版本後記得下載帶bin的那個包

這裏舉例爲

如果下載的不是bin的而是第二個,則執行zkserver命令的時候會報錯(大家可以嘗試一下)

3.下載完成後解壓然後將config目錄下的zoo_sample.cfg複製一份在當前路徑命名爲zoo.cfg或者直接將zoo_sample.cfg改爲zoo.cfg

然後編輯zoo.cfg將其中的dataDir改爲dataDir=D:\\aa\\apache-zookeeper-3.5.6-bin\\data   路徑大家自行指定

4.然後配置zookeeper環境變量,首先在系統環境變量中添加ZOOKEEPER_HOME  值爲zookeeper的根路徑 我這裏是D:\aa\apache-zookeeper-3.5.6-bin

5.然後在環境變量中找到path並編輯在最後追加;%ZOOKEEPER_HOME%\bin;

6.然後大家可以直接cmd調出命令行 執行zkserver即可成功啓動 zookeeper

二、配置kafka(附加使用自帶zookeeper)

1.首先去官網下載kafka,下載地址爲 http://kafka.apache.org/downloads,記得選擇scala這個子選項下的任意一個都行,我這裏選的是2.12

2.然後解壓下載的壓縮包,然後修改config目錄下的server.properties 將log.dirs的值進行修改!一定要修改,如果用自帶的路徑,後面命令後會報集羣屬性異常,因爲自帶的路徑是不確定的,這裏我修改的爲log.dirs=D:\\aa\\kafka_2.12\\temp\\kafka

3.修改config目錄下的zookeeper.properties將datadir的值進行修改 這裏我修改爲dataDir=D:\\aa\\kafka_2.12\\temp\\zookeeper

4.然後進入bin\windows執行 zookeeper-server-start.bat  ../../config/zookeeper.properties將zookeeper啓動

5.然後另開一個cmd命令窗口然後進入bin\windows 執行kafka-server-start.bat ../../config/server.properties將kafka啓動

三、集成SpringBoot

首先要保證zookeeper服務和kafka服務已經啓動,且兩個命令行不能關閉!

這裏我們演示的是在名爲demo的topic下進行數據傳輸,因此必須先創建一個名爲demo的topic

我們首先回到kafka的bin\windows下執行如下命令 創建名爲demo的topic

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo

然後通過如下命令查看是否創建成功

kafka-topics.bat --list --zookeeper localhost:2181

成功後開始操作SpringBoot

-------------------------------------------------------------------------------------------------

1.添加依賴

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

2.修改SpringBoot配置 

server:
  port: 8888
spring:
  main:
    banner-mode: off
  kafka:
    bootstrap-servers: 127.0.0.1:9092 #指定kafka server的地址,集羣配多個,中間,逗號隔開
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: default_consumer_group #羣組ID
      enable-auto-commit: true
      auto-commit-interval: 1000
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

3.創建生產者

@RestController
public class KafkaController {
    @Resource
    KafkaTemplate<String,Object> kafkaTemplate;

    @PostMapping("/postMessage")
    public ResponseEntity sendMessage(){
        User user = new User();
        user.setId(1).setNickName("深藍夢境").setTelNumber("13811999999").setPassword("admin").setSex(SexEnum.MALE.value);
        kafkaTemplate.send("demo", JSONObject.toJSONString(user));
        return R.ok("發送成功");
    }
}

4.創建消費者

@Component
public class FirstConsumer {
    /**
     * 定義此消費者接收topics = "demo"的消息,與controller中的topic對應上即可
     * @param record 變量代表消息本身,可以通過ConsumerRecord<?,?>類型的record變量來打印接收的消息的各種信息
     */
    @KafkaListener(topics = "demo")
    public void userListener(ConsumerRecord<?,?> record){
        System.out.println(record.topic());
        System.out.println(record.offset());
        System.out.println(record.value());
    }

}

執行的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章