当前位置: 首页 > news >正文

Ebay开源基于大数据的可视化框架:Pulsar Reporting

作者:汪明明,王巧玲


ebay又新添了一个开源项目PulsarReporting – 基于大数据的可视化框架

 

Pulsar作为一个实时和近实时大数据分析处理系统,包含了Pulsar Pipeline和Pulsar Reporting. 在今年三月, eBay Pulsar团队开源了实时大数据分析平台– Pulsar Pipeline,作为一个实时大数据分析平台,PulsarPipeline可以对海量数据进行实时收集,处理和分析,从而使eBay海量的数据实时分析成为可能;然而Pulsar又面临一个新的挑战,就是大数据的实时可视化。用户的需求就是Pulsar团队的动力,经过半年多的努力,eBay Pulsar团队研发了一个新的基于大数据的可视化框架– Pulsar Reporting


Pulsar Reporting

Pulsar Reporting 是一个基于大数据的可扩展和可定制的可视化平台, 用户通过Pulsar 可以提供更为清晰直观的数据洞察力,将错综复杂的数据和数据之间的关系,通过图形的形式呈现出来,从而给用户带来实时的洞察力和有效的决策力。同时Pulsar Reporting 也提供了非常友好的数据交互体验以及从宏观到微观的灵活切换,从而为用户对数据进行实时多角度分析和可视化成为可能。

 

主要特点

 

Ÿ   实时数据可视化 – 基于实时数据生成报表,并支持定期刷新

Ÿ   可视化报表编辑器 – 通过可视化界面生成自定义报表,且无需任何编程

Ÿ   丰富的图形库 – 可以创建各种图形报表:线图,饼图,柱状图,趋势图等

Ÿ   Reporting API支持– 支持标准化SQL脚本和结构化JSON格式

Ÿ   动态数据源管理 – 支持‘热插拔’增加和删除数据源

Ÿ   基于Angular JS的UI框架 – 易于增加和扩展现有的图形库

Ÿ   基于BootStrap的响应式设计 – 可以支持不同的终端设备,如手机,平板等

 

使用场景

Pulsar Reporting框架作为Pulsar生态系统的一个部分,使得Pulsar可以提供一个端到端的实时大数据分析解决方案,包括从后端的数据收集,数据流处理分析到前端的数据实时展现。Pulsar Pipeline具有每秒百万级流量的处理能力,而数据可视化则是最好的途径去直观且有效得展现大数据的魅力。然而基于大数据进行实时分析并进一步为决策者提供有用的数据报表并非一件易事,Puslar Reporting正好解决这方面的困扰;它允许用户通过Pulsar Reporting简单便捷的界面来制定他们所需的报表而无需考虑后端复杂的数据处理和前段的界面展现的问题;另一方面,Reporting强大的API,允许开发人员自由得扩展现有的数据报表,从而定制自己特色的报表。

 

体系架构

在Pulsar Reporting,来自Pulsar Pipeline的原数据和session数据,通过Pulsar Kafka通道中指定的topics流入到Kafka集群,然后再通过Kafka topics分别注入到Druid的原数据和Session数据表中,而数据导入Druid之前,数据预先经过秒级粒度的聚合,从而保证在可视化阶段能达到实时秒级的响应。而且在Pulsar Reporting中,我们也支持Reporting API – 一组抽象的数据分析和查询接口,用户可以通过调用相应的接口来获取处理过的原数据和Session数据,并生成不同维度的报表。图中红色部分就是Pulsar Reporting的主要功能模块。


案例分析

Ÿ   作为实时大数据处理可视化平台,Pulsar Reporting提供了丰富的API来支持对网站性能的分析需求

a)        网站活跃用户分析:现在以网站活跃用户分析为例,通过基于SQL接口,分析指定时间内基于流量来源(Traffic Source)维度的网站活跃用户指标;包括基于指定流量来源(Traffic Source)维度的新用户比率(New Session Rate), 用户浏览的总页面数(Total Pages),总活跃用户数(Total Sessions)以及总活跃用户停留时间(Total Sesssion Duration). 以下是实现细节,仅供参考。

         

Endpoint: http://<API_Server>/prapi/v2/sql

Method: POST

Body: {"sql" : "SELECT (count(session) - sum(retvisitor)) * 1.0 / count(session) newSessionRate, sum(sessionDuration) * 1000 totalSessionDurations, count(session) sessions, sum(sessionDuration) totalSessions, sum(totalpagect) totalPages, country, trafficSource FROM pulsar_session WHERE site=0 and country='usa' GROUP BY country, trafficSource ORDER BY sum(totalpagect) ASC limit 20",

"intervals": "2015-11-11 03:00:32/2015-11-18 01:00:32",

"granularity": "day"}

 

返回结果:

[

    {

                   "timestamp": "2015-11-11 03:00:32",

                   "result":

                   {

                            "sessions": 28465,

                            "trafficsource": "Social Media",

                            "newsessionrate": 0.7841,

                            "totalpages": 70911,

                            "totalsessions": 419763,

                            "totalsessiondurations": 419747000,

                            "country": "usa"

                   }

         },

         {

                   "timestamp": "2015-11-11 03:00:32",

                   "result":

                   {

                            "sessions": 40,

                            "trafficsource": "Paid Campaign",

                            "newsessionrate": 0.9840,

                            "totalpages": 51,

                            "totalsessions": 2631,

                            "totalsessiondurations": 226000,

                            "country": "usa"

                   }

         },

……

]

a)          网站浏览量分析:作为商业网站,网站浏览量是一个关键的指标来衡量一个网站的活跃程度,接下来介绍如何通过结构化的Json接口来获取基于流量来源(Traffic Source)分类的网站浏览量的分析。以下是实现细节,仅供参考。

Endpoint: http://<API_Server>/prapi/v2/realtime

Method: POST

Body: {"metrics" : [ "pageviews" ], "dimensions" : [ "trafficsource" ], "filter" : "site=0" }

 

返回结果:

[

         {

                   "timestamp": "2015-11-17 19:38:20",

                   "result":

                   {

                            "pageviews": 272393,

                            "totaldwell": 670162705,

                            "trafficsource": "Direct"

                   }

         },

         {

                   "timestamp": "2015-11-17 19:38:20",

                   "result":

                   {

                            "pageviews": 186139,

                            "totaldwell": 781712501,

                            "trafficsource": "Referral"

                   }

         },

……

]

Ÿ   Pulsar Reporting也提供了可视化编辑工具来帮助用户快速生成基于特定需求的分析报表集。用户可以通过Reports Creator来订制自己的报表集;在可订制报表页面,用户首先创建自己的报表集:


在创建的报表集内,根据业务需求制定报表:


最后通过调整报表的布局,就能看到下面类似的报表集了。




后续计划

继往开来,Pulsarteam将继续完善Pulsar Reporting,以下是我们未完成的功能:

1.  Pathing图和漏斗图

2.  报表输出管理

3.  更多数据源支持

 

同时我们也期待有更多的项目能采用我们Pulsar Reporting去解决大数据的可视化问题,并热切期待您的贡献。了解更多Pulsar Reporting,请访问http://gopulsar.io/html/reporting.html。

 

关于作者

Ÿ   汪明明,PulsarReporting Commiter和架构师

Ÿ   王巧玲,PulsarReporting 产品经理

Pulsar团队



参考资料

Ÿ   Pulsar Reporting技术文档: http://gopulsar.io/html/reporting.html

Ÿ  Pulsar Reporting源码: https://github.com/pulsarIO/pulsar-reporting-ui

Ÿ   Pulsar技术文档: http://gopulsar.io/

Ÿ   Pulsar Pipeline技术文档: http://gopulsar.io/html/pipeline.html

Ÿ   eBay techblog:  http://www.ebaytechblog.com/2015/11/05/announcing-pulsar-reporting-near-real-time-metrics-reporting-framework/

Ÿ  Druidhttp://druid.io/

Ÿ  Kafkahttp://kafka.apache.org/

Ÿ  JSONhttp://www.json.org/

Ÿ  Hadoophttp://hadoop.apache.org/

Ÿ  AngularJShttps://angularjs.org/

Ÿ  AngularBootstrap https://angular-ui.github.io/bootstrap/

Ÿ  Boostraphttp://getbootstrap.com/

Ÿ   jQuery: https://jquery.com/


相关文章:

  • JavaScript 异步原理
  • 从数据仓库到数据视图
  • Griffin – 模型驱动的数据质量服务平台
  • 细数Kubernetes Service那些事-kubernetes 服务发布以及在eBay的实践
  • TCP BBR拥塞控制算法解析
  • React同构漫谈
  • 基于PWA的异步监控
  • 从dedup说起之JS数组去重
  • java中怎么把一组数字的变量赋值给数组_写给小白看的入门级 Java 基本语法,强烈推荐...
  • 去哪儿网查不到历史订单_前端vue 2.5 去哪儿(慕课网Dell Lee视频教学) 项目实战视频...
  • 一致性分析_一致性哈希算法的分析与实现
  • echarts vue 酷炫图_Vue怎么使用Echarts创建图表
  • kt条件例题运筹学_管理科学与工程 846运筹学 2015真题回忆+经验分享
  • acdsee扫描没有图像_ACDSee Photo Studio 6 for Mac(最好用的图像处理软件)
  • dlopen linux 实例_linux动态链接库中函数的运行时加载
  • AngularJS指令开发(1)——参数详解
  • Fundebug计费标准解释:事件数是如何定义的?
  • jQuery(一)
  • Python十分钟制作属于你自己的个性logo
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Twitter赢在开放,三年创造奇迹
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue 2.3、2.4 知识点小结
  • vue-cli3搭建项目
  • 离散点最小(凸)包围边界查找
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 手写双向链表LinkedList的几个常用功能
  • 系统认识JavaScript正则表达式
  • 鱼骨图 - 如何绘制?
  • #数学建模# 线性规划问题的Matlab求解
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (二)springcloud实战之config配置中心
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .net core 6 redis操作类
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net MVC4 上传大文件,并保存表单
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .ui文件相关
  • /etc/sudoers (root权限管理)
  • @Autowired @Resource @Qualifier的区别
  • @Builder用法
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ solr入门 ] - 利用solrJ进行检索
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [hdu 1247]Hat’s Words [Trie 图]
  • [hdu 1711] Number Sequence [kmp]
  • [javaSE] 看知乎学习工厂模式
  • [Jquery] 实现鼠标移到某个对象,在旁边显示层。
  • [Leetcode] 寻找数组的中心索引
  • [LeetCode][LCR190]加密运算——全加器的实现
  • [leetcode]_String to Integer (atoi)