Kafka学习与实战

1,阻塞队列

  • BlockingQueue(Java核心API的接口)

    解决线程通信的问题

    阻塞方法:put(存数据)、take(拿数据)。

Kafka学习与实战_第1张图片

  • 生产者消费者模式

    生产者:产生数据的线程。

    消费者:使用数据的线程。

  • 实现类

    ArrayBlockingQueue

    LinkedlockingQueue

    PriorityBlockingQueue、SynchronousQueue、DelayQueue等。

2.kafka

kafka是一个分布式的流媒体平台

应用:消息系统、日志收集、用户行为追踪、流式处理。

kafka特点:高吞吐量、消息持久化、高可靠性、高扩展性。

3.kafka入门安装启动

我使用的kafka版本为2.12-2.30

启动及入门请查看博客:kafka入门

springboot整合配置:pom引入,

#kafka配置
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=community-consumer-group
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=3000

4.kafka应用

具体应用于发送系统通知

触发事件:

评论后,发布通知

点赞后,发布通知

关注后,发布通知

处理事件

封装事件对象

开发事件的生产者

开发事件的消费者

以事件为主体进行封装,事件驱动。

接下来进行实战应用,kafka将在我的一个简单的社区项目中应用,主要业务就是上面三种,评论、点赞、关注。三种操作逻辑基本相同,在数据获取上有小部分差别。

首先建立一个消息实体,定义kafka从生产者到消费者的传输数据格式

public class Event {

private String topic;//主题名称

private int userId;//用户id

private int entityType;//实体类型:点赞 评论 关注

private int entityId;//实体id

private int entityUserId;//实体拥有者id 比如文章发布者,发出评论的用户

private Map data = new HashMap<>();//用来保存额外数据,提升应用的扩展性能

}

创建生产者类:

将实体类转成JSON格式传输

Kafka学习与实战_第2张图片

创建消费者类:

通过KafkaListener注解监听topic

Kafka学习与实战_第3张图片

业务代码很简单,将event实体的数据保存到消息表。

然后重构之前的点赞评论关注业务,这里以点赞业务为例,其他大同小异

Kafka学习与实战_第4张图片

当点赞状态是已点赞时,将数据封装好通过生产者发送,消费者会按照上面的格式封装好存储在message表中,

后续在系统消息展示界面从message表中获取相应数据就大功告成了。

你可能感兴趣的:(中间件,kafka,java)