需求
每一个商品被卖出去一条就以以下格式通过kafka发送过来,只对status=101的productId进行统计:
#格式:productId,statusCode
a1001,101
a1001,102
a1001,101
a1003,101
a1002,101
假设每过60s有上述内容被发送过来,那么flink应该会形成以下这样的一个排行榜在Redis内并且随着kafka传送过来的数据变化面实时变化着这个排行榜:
#productId, 被卖次数
#按照被卖次数从上到下显示最大到最小
a1001,2
a1003,1
a1002,1
为什么a1001是2而不是3?因为只统计statusCode为101的商品
进入开发前需要解决的问题
时间窗口的问题;
每60秒一统计,这就是标准的流式计算了。我们假设每隔60秒进入的数据都是不同的,第一次60秒可能进入10条数据,那么这10条数据的“排行榜”情况和下一个60秒内进入的数据会有差别,因此每个“时间窗口”进入的数据都不一样,我们的统计就是根据这个“时间窗口”内的数据进行计算的,因此才叫实时处理。
它和传统的做法的区别在于如下根本区别。
传统的做法:
假设目前mysql内有100万条记录,取出最近60s数据虽然可能取出的结果只有10条但是数据量的底有100万,即你表