一、配置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());
}
}
執行的結果