最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-8-16 15:58:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

最近在从事实时方面的工作,主要涉及到数据处理、加工及可视化,在采坑的过程中总结出一套比较简单的实时计算方案,供大家参考。主要涉及到几个组件,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.数据windowwindow选择

数据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中。

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


楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-6-16 16:20

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表