学习kafka 花了一天时间 , 当demo写出来后 感觉就2个小时就可以入手的东西;讲点通俗易懂的东西吧
环境linux
下载kafka 地址:http://kafka.apache.org/downloads
选择 Binary downloads:
传到linux服务器中 放到自己存放的文件夹
tar -zxvf kafka_2.13-2.6.0.tgz
cd kafka_2.13-2.6.0
新版kafka自带zookeeper 因此先启动zookeeper
启动方式: bin/zookeeper-server-start.sh config/zookeeper.properties &
再启动kafka 启动方式:bin/kafka-server-start.sh config/server.properties &
命令说明: &是为了能退出命令行 也可以用-demon 例如:bin/zookeeper-server-start.sh -demon onfig/zookeeper.properties
停止命令:1.bin/kafka-server-stop.sh 2. bin/zookeeper-server-stop.sh
详细:https://www.cnblogs.com/rainy-shurun/p/5131394.html
如果需要想看到控制台 那么就不加& 启动zookeeper后 再开启一个shell 进入到kafka_2.13-2.6.0执行命令即可
到这一步 kafka就部署完成(非集群)
java操作 发布消息
idea开发工具:File -> new Project -> Spring Initializr 直接next -> 填写Group、Artifact -> 点击选择消息中间件 Messaging ,右侧Spring for Apache Kafka 打勾 直接下一步
略等一会 初始springBoot项目完成后
application.properties更名为application.yml(没有为什么,就是习惯配置格式而已)
spring:
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
server:
port: 8500
添加生产者
package com.tgxun.kafka.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProducerController {
@Autowired
private KafkaTemplate kafkaTemplate;
@GetMapping("/send")
public String send(String msg){
kafkaTemplate.send("topic01",msg);
return "success";
}
}
添加消费者
package com.tgxun.kafka.controller;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
/**
* 监听服务器上的kafka是否有相关的消息发过来
*/
@Component
public class ConsumerController {
/**
* 定义此消费者接收topics = "topic01"的消息,与controller中的topic对应上即可
* @param record 变量代表消息本身,可以通过ConsumerRecord,?>类型的record变量来打印接收的消息的各种信息
*/
@KafkaListener(topics = "topic01")
public void listen(ConsumerRecord record){
System.out.printf("topic is %s, offset is %d, value is %s \n", record.topic(), record.offset(), record.value());
}
}
测试: 浏览器输入 http://localhost:8500/send?msg=测试kafka01
看控制台即可 不出意外 应该是Expiring 1 record(s)......
回到linux 这是因为本机访问不到,由于hostname 配置文件中默认是无法确定机器的ip的, 这里没明白直接往下看
来到kafka_2.13-2.6.0/config 找到server.properties
在最后加都行
host.name=192.168.1.1 # 这里就是自己虚拟机的ip 每个人的都不一样,所以没法默认给出
listeners=PLAINTEXT://192.168.1.1:9092 #这里同上
加完以后 保存 停止zookeeper+kafka 再按顺序启动
回到springboot项目 重新启动, 浏览器输入测试路径 ok 然后kafka就差不多这样了(非集群) 然后花1个小时看kafka的名词就行了 例如什么是topic queue作用 发布订阅等等, 一开始就来理论的 看的会很晕,等你看完了来做项目,如果看的时间太长, 看到某些名词 你会有好像有这么回事,但又记不起来具体是个啥,这种感觉让人很难受, 又会导出搜资料. 然后花时间. 如上操作完成,梳理下基本就差不多会kafka了 ,具体看业务应用