前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单实时计算方案(kafka+flink+druid/es)

简单实时计算方案(kafka+flink+druid/es)

作者头像
actionzhang
发布2022-11-30 17:09:45
4970
发布2022-11-30 17:09:45
举报

    最近在从事实时方面的工作,主要涉及到数据处理、加工及可视化,在采坑的过程中总结出一套比较简单的实时计算方案,供大家参考。主要涉及到几个组件,kafka,flink,redis,druid和es。相信大家对以上几个组件都比较熟悉了,这里就不细说了。我们从一个简单的需求,来说明各个组件是怎么协作的。

     假如现在我们有一个电商平台,每天访问的流量巨大,主要访问流量都集中在衣服类、家电类页面,那么我们想实时看到这两类页面的访问量走势(十分钟出一个统计量),当做平台的重要指标,可视化的数据如下。

时间段

页面类型

访问量

07:00am

衣服类

100000

07:00am

家电类

60000

07:10am

衣服类

80000

07:10am

家电类

70000

数据采集    

为了计算访问量,前提就是要进行数据采集,假设平台在每一次用户访问的时候,我们可以获取到信息包括:手机号,访问页面类型,访问时间。数据采集的方式有很多,一般我采用埋点的方式,将【手机号,访问页面类型,访问时间】,形成一条埋点计入日志,然后采用flume或其他组件,将埋点日志收集进入kafka(根据访问量,设置partition数量)

数据处理

数据处理是最关键的阶段,这里选用flink处理kafka的流,该过程包括过滤、格式转换、分组等等、去重、附加字段、聚合等。针对我们的需求,我们可以分为几个阶段:

1.数据过滤

数据过滤,就是为了过滤掉非法数据,针对我们的需求,比如过滤掉手机号为空的记录

2.数据分组

数据分组是一个比较重要的阶段,这涉及到我们数据统计的方式,在分组的时候我们一般按照数据最低维度来分组,增加数据灵活性,如果我们这里先按照页面类型分组,分组的结果就是我相同页面类型的数据会在同一个分组。

3.数据window

window选择

数据window是实时处理中比较重要的特点,因为我们需要看到数据的统计结果,所以必须先给数据流划分批次,然后对批中的数据做聚合,flink的window比较丰富,包括time window,thumb window等等。在我们的需求中要看到10分钟内的访问量,所以这里选用time window,为了应对灵活多变的需求,我们需要选择合适的窗口时长,比如现在的需求要看到10分钟内的访问量,如果想要看到每分钟的访问量该怎么办呢,所以一般我们窗口时长会选择最小的粒度,这里我们选择1分钟的窗口时长。

time 类型

选用time window时需要注意,我们的时间标准,有两个概念需要注意,一个是event time指时间发生时间,另一个是process time指消息处理时间,这两个时间是有差别的,比如用户在7:01:23的时候访问了平台,但是埋点经过flume,kafka再到flink延迟至7:01:45的时候才到,那么event time是7:01:23,process time是7:01:45,我们如果想准确统计访问量,就需要选用event time,值得注意的是,如果以event time为时间标准的话,需要kafka中的消息,带有时间戳。

4.数据聚合

当分组和window都设定好以后,就可以对数据做聚合了,比如分组之后的数据,我们直接可以做reduce,或count,sum,max,min。这里我们做reduce,对记录做count。需要注意的是,如果需求变了,需要对手机号做去重,那么在去重的时候还要加入去重的逻辑,去重如果量小的话可以再flink中做,如果量大的话,可以依赖redis等中间kv存储,做去重。

数据落地

数据聚合完之后,就需要将数据落地,这是可以选择直接落入存储,或发送到下游topic用来进行更加复杂的计算,我一般为了灵活扩展会将数据sink到下游topic,然后由kafka直接接入druid或es。在落入druid的时候需要注意,因为druid特有的预聚合方式,你要指定维度,指标,聚合时间戳字段以及时间段长度,所以聚合结果中需要带上,event time的时间戳,同时决定预聚合时长。回到需要:10分钟统计一次,因此预聚合时长可以在1~10分钟内任意选择。需要说明的是,数据不需要做特殊加工(比如不需要去重、不需要关联、数据量没那么大)的时候可以跳过flink阶段,直接落入druid中,因为druid本身就带有多种预聚合功能。

数据校验

本需求可能比较简单,但是在实际需求可能复杂的多,为了确保数据的正确性,需要把明细数据备份下来,方便数据校验,一般备份的数据不需要实时性的时候,可以将数据落入hive中,而需要实时校对的时候,可以将数据落入es中。

      在实际场景中,数据多种多样,该方案仅使用于特定场景,如有不足之处欢迎大家,评论指正!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据采集    
  • 数据处理
    • 1.数据过滤
      • 2.数据分组
        • 3.数据window
          • window选择
          • time 类型
          • 4.数据聚合
      • 数据落地
      • 数据校验
      相关产品与服务
      大数据
      全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档