热点文章-实时计算

1 今日内容

1.1 定时计算与实时计算

image-20210730201509223

 

1.2 今日内容

kafkaStream

 

实时计算

2 实时流式计算

2.1 概念

一般流式计算会与批量计算相比较。在流式计算模型中,输入是持续的,可以认为在时间上是无界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果在时间上也是无界的。流式计算一般对实时性要求较高,同时一般是先定义目标计算,然后数据到来之后将计算逻辑应用于数据。同时为了提高计算效率,往往尽可能采用增量计算代替全量计算。

image-20210731090637590

流式计算就相当于上图的右侧扶梯,是可以源源不断的产生数据,源源不断的接收数据,没有边界。

2.2 应用场景

2.3 技术方案选型

3 Kafka Stream

3.1 概述

Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature。它是提供了对存储于Kafka内的数据进行流式处理和分析的功能。

Kafka Stream的特点如下:

 

image-20210730201706437

 

3.2 Kafka Streams的关键概念

image-20210731090727323

 

3.3 KStream

(1)数据结构类似于map,如下图,key-value键值对

image-20210731090746415

(2)KStream

image-20210730201817959

KStream数据流(data stream),即是一段顺序的,可以无限长,不断更新的数据集。 数据流中比较常记录的是事件,这些事件可以是一次鼠标点击(click),一次交易,或是传感器记录的位置数据。

KStream负责抽象的,就是数据流。与Kafka自身topic中的数据一样,类似日志,每一次操作都是向其中插入(insert)新数据。

为了说明这一点,让我们想象一下以下两个数据记录正在发送到流中:

(“ alice”,1)->(“” alice“,3)

如果您的流处理应用是要总结每个用户的价值,它将返回4alice。为什么?因为第二条数据记录将不被视为先前记录的更新。(insert)新数据

3.4 Kafka Stream入门案例编写

(1)需求分析,求单词个数(word count)

image-20210730201911566

 

(2)引入依赖

在之前的kafka-demo工程的pom文件中引入

(3)创建原生的kafka staream入门案例

(4)测试准备

结果:

3.5 SpringBoot集成Kafka Stream

(1)自定配置参数

修改application.yml文件,在最下方添加自定义配置

(2)新增配置类,创建KStream对象,进行聚合

测试:

启动微服务,正常发送消息,可以正常接收到消息

3 app端热点文章计算

3.1 思路说明

image-20210621235620854

3.2 功能实现

3.2.1 用户行为(阅读量,评论,点赞,收藏)发送消息,以阅读和点赞为例

①在heima-leadnews-behavior微服务中集成kafka生产者配置

修改nacos,新增内容

②修改ApLikesBehaviorServiceImpl新增发送消息

定义消息发送封装类:UpdateArticleMess

topic常量类:

完整代码如下:

③修改阅读行为的类ApReadBehaviorServiceImpl发送消息

完整代码:

3.2.2 使用kafkaStream实时接收消息,聚合内容

①在leadnews-article微服务中集成kafkaStream (参考kafka-demo)

②定义实体类,用于聚合之后的分值封装

修改常量类:增加常量

③ 定义stream,接收消息并聚合

3.2.3 重新计算文章的分值,更新到数据库和缓存中

①在ApArticleService添加方法,用于更新数据库中的文章分值

实现类方法

②定义监听,接收聚合之后的数据,文章的分值重新进行计算