kafak+zookeeper在windows安装,并在springboot项目中使用教程
环境:jdk,maven,idea
大致分为四个步骤:
- 1.安装zookeeper
- 2.安装Kafka
- 3.安装kafka tool(kafka可视化工具)
- 4.在springboot中使用Kafka
一、安装zookeeper(资源协调,分配管理)
-
1、下载安装文件:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/
-
2、下载完成后,解压到一个目录:D:\zookeeper\zookeeper-3.4.10
-
3、conf目录下zoo_sample.cfg重命名为zoo.cfg
-
4、进入文件夹管理员身份运行zkServer.cmd
-
5、再打开一个cmd窗口运行 zkCli.cmd
zookeeper安装并启动成功。
二、安装Kafka
-
1、 下载安装包 http://kafka.apache.org/downloads
注意要下载二进制版本
-
2、 解压并进入Kafka目录,我的文件夹:D:\kafka\kafka_2.12-2.6.0
-
3、 进入config目录找到文件server.properties并打开
-
4、 找到并编辑log.dirs=D:\data\kafka-logs
-
5、 找到并编辑zookeeper.connect=localhost:2181
-
6、 Kafka会按照默认,在9092端口上运行,并连接zookeeper的默认端口:2181
-
7、 进入Kafka安装目录D:\kafka\kafka_2.12-2.6.0,按下Shift+右键,选择“打开命令窗口”选项,打开命令行,输入
.\bin\windows\kafka-server-start.bat .\config\server.properties
- 不要关了这个窗口,启用Kafka前请确保ZooKeeper实例已经准备好并开始运行
三、安装kafka可视化工具kafka tool
- 1、下载安装包 http://www.kafkatool.com/download.html
- 2、双击下载完成的exe图标,傻瓜式完成安装。
- 3、打开kafka tool,提示设置kafka集群连接,点击确定
- 4、设置 kafka的版本(默认就可以), zookeeper的地址和端口
- 5、设置kafka的地址
- 6、设置完了,点击Test测试是否能连接,连接通了,然后点击Add。
- 7、添加完成后出现如下界面
- 8、简单使用
- 配置以字符串的形式显示kafka消息体
- 或者通过如下界面配置
- 注释:更改完Content Types,要点击Update和Refresh按钮
再次查看kafka的数据:
四、在springboot中使用Kafka
- 1、新建一个springboot项目
- 2、pom引入jar依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--kafka-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
- 3、配置文件配置
#kafka配置地址 多个以 , 分割
spring.kafka.bootstrap-servers=127.0.0.1:9092
#生产者的序列化
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
#消费者的分组
spring.kafka.consumer.group-id=default_consumer_group
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=1000
#消费者的序列化
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
- 4、启动类
- 5、生产者的代码实现
package com.kafak.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProducerController {
@Autowired
private KafkaTemplate<String,Object> kafkaTemplate;
@RequestMapping(value = "/message/send/{msg}",method = RequestMethod.GET)
public String send(@PathVariable String msg){
kafkaTemplate.send("demo","shus1", msg); //使用kafka模板发送信息
return "success";
}
}
- 6、消费者的代码实现
package com.kafak.consumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
/**
* @author shiziyang
* 监听服务器上的kafka是否有相关的消息发过来
* @date by 2020/11
*/
@Component
public class ConsumerDemo {
/**
* 定义此消费者接收topics = "demo"的消息,与controller中的topic对应上即可
*
* @param record 变量代表消息本身,可以通过ConsumerRecord<?,?>类型的record变量来打印接收的消息的各种信息
*/
@KafkaListener(topics = "demo")
public void listen(ConsumerRecord<?, ?> record) {
System.out.printf("kafakDemo -> topic is %s, offset is %d, key is %s, value is %s \n", record.topic(), record.offset(), record.key(), record.value());
}
}
- 7、启动项目,postman请求生产者。生产者发消息到kafak,消费者会接受到消息。