kafka入门
一、kafka概述
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
kafka 主要应用场景是:日志收集系统和消息系统。
消息系统就是负责将数据从一个应用传输到另一个应用,有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。
1、kafka名词
主要分为 procuder、topics、partition、broker、consumer等。
详情查看博客,写的很明了:https://www.cnblogs.com/qingyunzong/p/9004509.html
二、入门应用
我们新建两个maven项目。
1、消息生产方
- 引入kafka依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
- 配置 kafka 地址
server:
port: 8080
spring:
#kafka配置
kafka:
bootstrap-servers: 192.168.16.100:9092
- 消息发送类
@RestController
public class KafkaTestController {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@GetMapping("/hello")
public String helloKafka(){
System.out.println("------>生成者发送消息");
sendMessage();
return "kafka消息已发送";
}
/**
* 发送消息
*/
public void sendMessage() {
try {
//生产消息
String message = "hello! 测试kafka ";
ListenableFuture<SendResult<String, String>> listenableFuture = kafkaTemplate.send("hello", message);
listenableFuture.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
@Override
public void onSuccess(SendResult<String, String> result) {
System.out.println("发送消息成功");
}
@Override
public void onFailure(Throwable ex) {
System.out.println("发送消息失败");
}
});
} catch (Exception e) {
System.out.println("发送消息出现异常");
}
}
}
- 测试
启动springboot项目,访问 http://localhost:8080/hello 即可发送。
启动前我们可以先用 cmd 窗口运行一个 kakfa 客户端,发送成功后可以直接在命令行中看到我们发布的消息。
2、消息消费方
- 引入kafka依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
- 配置 kafka 地址
server:
port: 8080
spring:
kafka:
consumer:
group-id: defaultConsumerGroup
listener:
missing-topics-fatal: false
- 创建监听类
我们可以通过@KafkaListener
来监听指定的topic,当topic中有新消息时就会执行下面的代码。
@Component
public class TopicComponent {
@KafkaListener(topics = {"hello"})
public void handMessage(ConsumerRecord<String,String> record){
String topic = record.topic();
String message = record.value();
System.out.println("消费者接收到kafka消息,topic---->"+topic+",消息内容:"+message);
}
}
- 测试
先启动消息生产方服务,再启动消息消费方服务,访问 http://localhost:8080/hello 查看控制台数据结果。
三、可视化工具
kafka可视化工具有很多种,比如 kafka-eagle(EFAK)、kafka-manager、kafka tool等。
在windows本地环境测试,我使用的kafka tool工具。kafka tool官网下载
下载对应版本按照即可,记得修改一下安装位置,保护保护你的C盘空间。
下载后打开软件界面如下,设置下zookeeper服务地址和端口,点击下面的 test 按钮测试下。
添加成功后就可以看到我们定义的topic和里面的数据了。
首次进来数据格式不对的话,可以修改一下默认的数据格式。