你好,欢迎来到第 28 课时,本课时主要讲解 Flink 中的 TopN 功能的设计和实现。
TopN 在我们的业务场景中是十分常见的需求,比如电商场景中求热门商品的销售额、微博每天的热门话题 TopN、贴吧中每天发帖最多的贴吧排名等。TopN 可以进行分组排序,也可以按照需要全局排序,比如若要计算用户下单总金额的 Top 10 时,就需要进行全局排序,然而当我们计算每个城市的 Top10 时就需要将订单按照城市进行分组然后再进行计算。
下面我们就详细讲解 TopN 的设计和实现。
整体设计
我们下面使用订单数据进行讲解,整体的数据流向如下图所示:
订单数据由业务系统产生并发送到 Kafka 中,我们的 Flink 代码会消费 Kafka 中的数据,并进行计算后写入 Redis,然后前端就可以通过读取 Redis 中的数据进行展示了。
订单设计
简化后的订单数据如下,主要包含:下单用户 ID、商品 ID、用户所在城市名称、订单金额和下单时间。
public class OrderDetail {
private Long userId