ArchSummit深圳站7折本周截止,点击立减2640元>> 了解详情
写点什么

Pulsar:来自 eBay 的开源实时分析平台

  • 2015 年 3 月 19 日
  • 本文字数:1655 字

    阅读完需:约 5 分钟

Pulsar 是一个来自 eBay 的高扩展性、高可用性、基于事件驱动的开源实时分析平台和流处理框架,它能够实时收集和处理用户行为和业务事件。Pulsar 使用一种类似 SQL 的事件处理语言并通过对数据进行加工(如聚合、补充、变异和过滤等)以实现流的自定义创建。Pulsar 具有实时 Session 化、多维度量聚合等功能,并具有每秒百万级流量处理能力和基于标准的分布式和跨越多个数据中心云部署架构等特征。

作为全球性的商务平台和支付行业领先者,eBay 拥有海量的用户行为数据。过去,eBay 使用面向批处理的数据平台(如 Hadoop)对用户行为进行分析以提供良好的用户体验。近来,eBay 商务平台出现了新的需求和使用场景,如实时生成报表和仪表盘、业务活动监控、个性化设置、市场营销和广告、不良行为监测等。至此,批量的大数据处理平台已不能满足业务对实时性的要求。于是,eBay 研发团队基于 Pulsar CEP( Complex Event Processing 即复杂事件处理)框架并实现了 Pulsar 实时分析数据管道,从而开发出了 Pulsar。eBay 的 CEP 框架提供了一个基于 Java 的 CEP 框架和用来在云环境中构建、部署和管理 CEP 应用的工具。Pulsar 实时分析数据管道由一些松耦合的阶段组成,从而提供了一个高可靠性和高扩展性的扩展模型。实时分析数据管道处理过程包括:补充、过滤、变异、聚合以及状态处理。

Pulsar 的主要组件包括:

  • 收集组件(Collector):具有 Rest 风格的事件收集 API;
  • Session 化组件(Sessionizer):事件 Session 化、维护 Session 状态和生成 Session 开始和结束的标示事件,该组件还包括插件式的接口,该接口可用来集成第三其他存储系统从而实现 Session 的持久化;
  • 分发组件(Distributor):对数据进行过滤和变异操作以满足不同的消费者;负责事件的路由转发;
  • 度量计算组件(Metric Calculator):通过多维度进行计算并将计算结果持久化;
  • 回放组件(Replay): 为了避免数据的丢失,在其它阶段重传发送失败或未处理的事件;
  • 配置组件(ConfigApp): 为 Pulsar 实时分析数据管道配置和提供处理逻辑。

Pulsar 的系统架构如下图所示:

从 Pulsar 的官网得知,Pulsar 具有以下主要特征:

  • 高可扩展性:Pulsar 能够跨集群节点对事件处理进行动态分区,并能够扩展为每秒处理数百万事件;此外,Pulsar 能够集成 Druid 或 Cassandra 等存储系统;
  • 高可用性:Pulsar 具有基于标准的分布式、跨多个数据中心云部署架构,所以在软件更新、流处理规则和拓扑结构改变过程中,无需停止服务;
  • 富有灵活性:类 SQL 的语言和注解能够用来定义流处理规则,包括声明式的管道拼接以做到在运行时能够自动适应动态拓扑改变;
  • 实时分析:Pulsar 能够基于时间窗口实现多维度聚合和通过对数据进行加工处理(如补充、变异和过滤等)并自定义流的创建;
  • Session 化:Pulsar 的实时逻辑能够将用户事件分组到 Session 中,还能够事件 Session 化、维护 Session 状态和持久化 Session 等;
  • 高精确度:达到 99.9% 的数据精确度;
  • 支持云端部署:在跨数据中心的情况下,Pulsar 通过 Docker 镜像能够将节点分布到标准的云计算基础架构环境中。

Pulsar CEP 的处理逻辑能够部署在跨数据中心的许多节点(即 CEP 单元)上,每个节点都能够使用输入通道、输出通道以及处理逻辑进行配置,事件通常基于一个 Key(如用户 id)被分配到对应的节点上处理。在集群中扩展节点时,Pulsar 借助 Zookeeper 实现了自动检测新的单元、重新平衡事件处理以及对故障节点的处理。Pulsar 的部署架构如下图所示:

Pulsar 已经在 eBay 生成环境中用来对用户行为事件进行分析。近日,eBay 还宣布将 Pulsar 基于 GPLv2 协议开源,代码托管在 GitHub ,且 Pulsar 开放团队仍继续以开放的方式开发 Pulsar。更多关于 Pulsar 信息,请读者阅读 eBay 官方提供的一篇介绍 Pulsar 的文章、Pulsar 的 FAQ 内容以及 GitHub 提供的 Wiki 页面入门指南


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015 年 3 月 19 日 03:137722
用户头像

发布了 46 篇内容, 共 48.3 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

数据也需要滴血认亲?

Justin

大数据 数据治理 28天写作

我的应用 OOM 了,我该做点什么?

JavaEdge

JVM 签约计划第二季

大厂算法面试之leetcode精讲17.栈

全栈潇晨

LeetCode 算法面试

react源码解析11.生命周期调用顺序

zz1998

React React Hooks

AOP+MybatisPlus 优化特殊的日志模块

4ye

Java spring 程序员 后端 签约计划第二季

听说过python协程没?听说过 asyncio 库没?都在这一篇博客了

梦想橡皮擦

12月日更

react源码解析12.状态更新流程

zz1998

React React Hooks

Prometheus Exporter (十四)MySQL Server Exporter

耳东@Erdong

MySQL Prometheus 28天写作 12月日更

自定义规则删除过期文件(linux)

liuzhen007

28天写作 12月日更

1.《重学JAVA》开篇

杨鹏Geek

Java Java 25 周年 28天写作 12月日更

生产环境的线程池出问题了,我到底该如何正确使用线程池?

JavaEdge

Java java 并发 签约计划第二季

Java本地事务失效了,线上应该如何排查?

JavaEdge

Spring Framework 签约计划第二季

dart系列之:HTML的专属领域,除了javascript之外,dart也可以

程序那些事

flutter dart 程序那些事 12月日更

模块五作业

小鹿

DDD 领域驱动设计落地实践系列:微服务拆分之道

慕枫技术笔记

后端 签约计划第二季

架构实战营第五课作业微博评论高性能高可用架构

Geek_99eefd

架构实战营 「架构实战营」

微信小程序开发:新建文件报错Error:pages/xxx/xxx.json Expecting ’STRING’,’NUMBER’,’NULL’,’TRUE’

三掌柜

28天写作 12月日更

面试官:重写 equals 时为什么一定要重写 hashCode?

王磊

Git进阶(五):git 分支管理策略

No Silver Bullet

git 学习 12月日更

模块五作业

panxiaochun

架构实战营

从deadline和被狗追说起(2/28)

赵新龙

28天写作

服务器宕机了,除了坐等,我还能做点什么?

JavaEdge

JVM 签约计划第二季

我的Spring AOP没生效,我该如何排查?

JavaEdge

Spring Framework 签约计划第二季

大厂算法面试之leetcode精讲18.队列

全栈潇晨

算法 LeetCode

Rust 元宇宙 12 —— 序列化和存储

Miracle

rust 元宇宙

架构训练营 - 模块五作业

VegetableBird

架构实战营 架构师实战营 「架构实战营」

有人问你什么是CAP?你就把这篇文章发给他

李子捌

redis CAP理论 28天写作 12月日更

模块五课后作业-设计微博系统中评论架构

断水风春

架构实战营

架构训练营 Week1 作业

红莲疾风

「架构实战营」

博客?Newsletter?付费订阅?Papyrus 都帮你搞定!

遇见

程序员 博客 Blog newsletter

为什么我们需要Pulsar?

博文视点Broadview

头号云话题:进击的开源操作系统

头号云话题:进击的开源操作系统

Pulsar:来自eBay的开源实时分析平台_语言 & 开发_李小兵_InfoQ精选文章