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