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 )关注我们,并与我们的编辑和其他读者朋友交流。
评论