在STICORP使用Apache Pulsar构建数据驱动的应用程序

“ Apache Pulsar 提供了太多无法忽视的好处。我们决定部署Apache Pulsar,并对此非常满意。我们已经将超过30%的生产数据迁移到Pulsar上,并计划在未来六个月内将所有数据迁移到Pulsar上。” 

原作者:Daniel Ferreira Jorge, STICORP运营总监。

译者:Sijie Guo

背景介绍

在一家商业公司,采用任何一项新技术,包括开源技术,都有一定的风险,即使这项技术具有显著的技术优势。Apache Pulsar的引入经过了我们的深思熟虑和充分调研。我想跟大家分享一下我们使用和调研Apache Pulsar的经验。因为我们相信肯定有其他和我们类似的公司也可以从Pulsar中受益。

Apache Pulsar是我们为了支持STICORP客户应用而采用的一项关键技术。STICORP是一家总部位于巴西的软件公司。我们提供软件解决方案来帮助7,000多家客户管理和自动化他们的税务报告,帮助他们确保税务报告的合规性,避免处罚,并确定可以节省税收的地方。这需要管理大量的税务文档,以及大量由客户行为触发产生的工作流程。这些税务文档包括发票,发货和付款等。在一天内,单个客户可能就会产生超过200,000个需要我们进行处理的税务文档。

我们的系统通过与客户和政府系统进行集成自动获取这些税务文档,并以便于客户分析这些文档背后的数据价值的方式组织它们。这些文档的内容和复杂性取决于需要解决的特定业务流程。例如,有些文档是基于发票,发货订单,和客户与供应商之间的付款记录等,而另外一些文档是用于记录这些活动完成时的附加文档。

处理这些文档中的所有不同信息需要一个包含多个步骤的工作流程。文件通常以加密形式到达,因此第一步是解密它们。然后将文档中的XML格式的原始消息内容转换为JSON格式。从那之后,这些文档会被划分到多个主题(Topic)并被丢到事件总线(Event Bus)上。其他工作流程会监听事件总线,并处理这些文档,最终将处理结构汇总到下游的Couchbase NoSQL数据库中,供其他应用程序访问。

性能和可扩展性对我们来说至关重要。因为生成这些文档的交易的天然性质,我们可以看到单个客户在突发高峰时刻可能就会产生每秒25,000条消息。能够支持大量主题对我们来说也很重要 - 能够将文档中的信息分解为多个主题,可以帮助我们更加轻松地组织和管理数据,将数据正确的分发和连接到相应的工作流进行处理;但这也意味着我们对于单个客户可能就需要使用30个不同的主题。

为什么我们需要新技术

我们最初使用Apache Kafka来实现事件总线。虽然我们有一个稳定的Kafka基础设施,并且决定去做出基础设施的改变通常并不容易,但我们意识到Kafka不是满足我们需求的最佳技术 - Kafka并不是为我们今天生活的云原生(Cloud Native)世界所设计的,因此我们需要花费大量时间才能使其适用于我们的应用程序。我们使用Kafka面临的主要挑战是它不善于处理大量主题。此外,Kafka的架构让我们感到痛苦 - 因为Kafka Broker是绑定存储状态的,扩展或缩小Kafka集群需要重新平衡分区,这会影响我们的性能和请求时延,并限制我们对工作负载变化做出反应的方式和速度。

部署Apache Pulsar

在寻找替代方案时,我们了解了Apache Pulsar并决定对其进行评估。由于Apache Kafka和Apache Pulsar使用类似的消息概念,因此我们看到所有的Kafka用例可以使用Pulsar实现,其方式与使用与Kafka完全相同。兼容是促使我们切换到Pulsar的原因之一。

我们还注意到了Pulsar在架构设计上与Kafka的一些重要差异。一个关键的区别是存储和计算的分离 - Pulsar Broker是无状态的,与存储相互分离;而在Kafka的数据直接存储在Broker上。这是架构设计差异上的一个例子,它允许Pulsar能够实现一些在Kafka上做很困难或不可能的事情。这其中的例子包括:

主题可扩展性:我们需要拥有超过100,000个主题(不考虑增长),这不仅有助于我们管理应用程序处理的不同类型的数据,还允许个别客户使用自定义应用程序连接到系统中的数据。Pulsar的架构可以轻松处理数百万个主题。

性能:由于Pulsar的分层架构,以及IO隔离的特性,读取和写入使用不同的物理存储。因此,读取的峰值根本不会影响写入性能,反之亦然。Pulsar还支持非持久性主题,允许非常高的吞吐量,完全不需要持久性的主题,这对于实时应用程序非常有用。

消息队列: Pulsar提供了统一的消息模型,不仅支持类似Kafka的消费模式,也支持消息队里的消费模式。在不需要考虑有序性的应用场景中,Pulsar可以直接当消息队列进行使用。Pulsar在订阅(Subscription)级别而不是主题级别执行此操作,因为你可以在同一个主题中同时有按序消费的消费者和不按序消费的消费者,这对于很多场景是非常有价值。另一个场景,如果新的消费者需要从头开始读取一个主题里面的所有消息,那么对于Kafka来说,你将被迫要么牺牲吞吐量,要么重新平衡分区,或者要么牺牲有序性。而使用Pulsar,您只需添加新订阅,Pulsar就会将消息扇出到新增的消费者,以增加新消费者的吞吐量。

操作更简单:使用Apache Kafka,任何容量扩展都需要重新平衡分区,同时还需要将被平衡的分区重新拷贝到新添加的Broker上。使用Pulsar,我们可以轻松添加和删除节点,而无需重新平衡整个集群。此外,使用Pulsar,你永远不必担心一个分区是否会超过Broker的物理磁盘空间;但是在Kafka中,一个分区的容量不能超过一台Broker的物理磁盘空间。

无限的数据保留期:我们的一些客户甚至需要在几个月后访问他们的文档。我们希望能够将数据保存在Pulsar中,而不会删除它,并在以后需要时使用它。这样我们不必重新从客户或者政府部门导入数据,我们也不必担心丢失消息。当我们需要使用新的一套系统来执行一个新的业务流程时,我们不需要访问数据库,我们可以简单地将文档从消息总线中拉取出并为新的业务流程重新处理它们即可。

由于Apache Pulsar提供了太多无法忽视的优点,我们决定实施并部署了Apache Pulsar,在使用的过程中也对Apache Pulsar非常满意。我们已经将超过30%的生产数据流迁移到Pulsar,并计划在未来六个月内将所有数据流都迁移到Pulsar。

相关资源

使用Apache Pulsar作为消息队列: 
https://pulsar.incubator.apache.org/docs/latest/cookbooks/message-queue/

如何将Apache Kafka应用程序迁移到Apache Pulsar: 
https://streaml.io/blog/kafka-pulsar-migration/

原文链接:https://mp.weixin.qq.com/s/DgBOJDwubic6TUBACWjxcA

原文地址:https://www.cnblogs.com/apachepulsar/p/9503253.html

时间: 2024-10-09 07:35:52

在STICORP使用Apache Pulsar构建数据驱动的应用程序的相关文章

分布式消息队列Apache Pulsar

Pulsar简介 Apache Pulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化.Plusar已经在Yahoo的生产环境使用了三年多,主要服务于Mail.Finance.Sports. Flickr. the Gemini Ads platform. Sherpa以及Yahoo的KV存储. Pulsar之所以能够称为下一代消息队列,主要是因为以下特性: 线性扩展.能够丝滑的扩容到成百上千个节点(Kafka扩容需要占用很多系统资源在

手动利用Apache Ant构建部署自己的Java项目

虽然Eclipse从3.0开始已经继承了Ant插件,大家的项目可以自动构建 部署,此篇文章看也没多大用处,但是手动去自己使用以下 Ant来构建自己的Java项目也是一件有意义的事情,虽然现在已经没用人用Javac Java命令行的方式 来搞程序.... Ant是Apache基金项目下的一个工具,在Apache官方给出的解释 是      一个帮助我们构建软件的 Java库和命令行工具 . Apache Ant is a Java library and command-line tool tha

基于jersey和Apache Tomcat构建Restful Web服务(一)

基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来越多网站的采用.那么问题来了,它是什么呢? 起源 REST(Representational state transfer)在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最重要的概念是资源(resources

基于jersey和Apache Tomcat构建Restful Web服务(二)

基于jersey和Apache Tomcat构建Restful Web服务(二) 上篇博客介绍了REST以及Jersey并使用其搭建了一个简单的“Hello World”,那么本次呢,再来点有趣的东西,当然也是很简单了,仅仅是在路径中包含参数而已了.接下来开始动手实践吧. 在路径中包含参数 接下来就在上次的基础上进行改动即可,或者是再添加一个方法,随意了,这个方法主要就是在路径中加入输入的参数,并且根据参数的不同,它的返回值也不同,返回值为“Hello”+你输入的参数.这里用到了“PathPar

个推基于 Apache Pulsar 的优先级队列方案

作者:个推平台研发工程师 祥子 一.业务背景 在个推的推送场景中,消息队列在整个系统中占有非常重要的位置.当 APP 有推送需求的时候, 会向个推发送一条推送命令,接到推送需求后,我们会把APP要求推送消息的用户放入下发队列中,进行消息下发:当同时有多个APP进行消息下发时,难免会出现资源竞争的情况, 因此就产生了优先级队列的需求,在下发资源固定的情况下, 高优先级的用户需要有更多的下发资源. 二.基于 Kafka 的优先级队列方案 针对以上场景,个推基于 Kafka 设计了第一版的优先级队列方

spring(5)构建 spring web 应用程序

[0]README 1)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  "spring(5)构建 spring web 应用程序" 的相关知识: [1]spring mvc 起步 [1.1]跟踪spring mvc的请求 1)请求时一个十分繁忙的家伙,下图展示了请求使用spring mvc所经历的 站点: 对以上调用过程的分析(Analysis):(不能再干货--请求使用spring mvc 所经历的调用过程) step

cordova构建和运行应用程序(安卓)

要构建和运行应用程序,需要为要定位的每个平台安装sdk. 检查您是否满足构建平台的要求的命令: cordova requirements 1.安卓平台指南: cordova for Android需要安装在OSX,Linux或Windows上的Android SDK. 安装要求: 1.java开发工具包(JDK) 下载安装好JDK之后,在终端输入JAVAC,如果跳出如下提示,说明JAVA环境已经配置好了 2.Android SDK 在这里,我选择安装Android Studio,以便于运行和调试

用 Sencha Touch 构建移动 web 应用程序

Sencha Touch 是一个使用 HTML5.CSS3 和 JavaScript 语言构建的移动 web 应用程序框架,在本文中,学习如何应用您当前的 web 开发技能进行移动 web 开发.下载和建立 Sencha Touch,通过一个样例应用程序探究基本原理.学习开始使用 Sencha Touch 框架所需的一切 2012 年 3 月 19 日 内容 概述 Sencha Touch 准备开始 UI components 结束语 参考资料 评论 概述 在软件开发领域中,有两个重要的趋势越来

用Gradle 构建你的android程序

用Gradle 构建你的android程序 前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是gradle 来构建项目, 下定决心把android gralde 构建项目的用户指南全部看完, 让不会用gradle 的人也用gradle构建android项目,让打包(注意,打包和构建是两码事)多版本android不再痛苦.最后,题外话:珍惜生命,远离ant.... Gradle build android 历史 Androi