Apache Pulsar 2.1 重磅发布

本文转载自Apache Pulsar的微信公众号
[原文连接][1] 

Apache Pulsar正式发布了2.1.0版本!距离2.0版本的发布,相距不到两个月的时间。在这短短两个月的时间内,社区的贡献很是迅猛。2.1版本包含了不少新的特性和改进,这些改进帮助Pulsar从一个分布式消息系统演进成一个完整的流原生(Stream Native)实时数据平台。git

在这个版本中,你能够看到如下几个重要特性:github

  • Pulsar IO: 一套基于Pulsar Functions实现的无服务器化的链接器(Connectors)框架,以及一组内置的链接器实现
  • Tiered Storage: 层级存储
  • Stateful Functions: 状态函数
  • Clients:Go语言客户端
  • Schema: 支持Avro 和 Protobuf 

Pulsar IO

在Pulsar 2.0版本中,咱们首次引入了Pulsar Functions,一套基于无服务器化(Serverless)的轻量级计算框架。这套计算框架为用户提供了最为简便的方式进行流计算逻辑的编写。自从Pulsar Functions发布以后,社区的反响程度十分热烈,不少社区的用户很是喜欢这个特性。由于使用它的学习成本基本为零,只要能写Java或者Python的函数,就能够编写在Pulsar进行流计算的逻辑。apache

咱们将这种极简至上(simplicity first)的理念延续在开发Pulsar 2.1的过程当中。咱们在Pulsar Functions上实现了一套无服务器化的链接器(Connectors)框架Pulsar IO,用来简化用户导入数据到Pulsar和从Pulsar中导出数据。用户在使用链接器的时候,不须要编写任何的代码。你所须要作的事情只是准备一个关于你须要链接的系统的配置文件,而后就可使用Pulsar提供的管理工具向Pulsar提交相应的链接器。Pulsar就会负责剩下的事情,包括容错管理,负载均衡,随着负载自动伸缩扩容。服务器

另外,2.1版本包含六个内置的链接器实现。他们分别是:微信

  • Aerospike链接器
  • Cassandra链接器
  • Kafka链接器
  • Kinesis链接器
  • RabbitMQ链接器
  • Twitter Firehose链接器

你能够参考Pulsar 2.1的教程来学习使用Cassandra链接器,将数据从Pulsar导出到Cassandra里。架构

咱们计划在将来的发布版本中包含更多的链接器实现。若是你对Pulsar感兴趣,想成为Pulsar的代码贡献者,咱们十分欢迎你为Pulsar开发不一样的链接器。开发链接器也十分简单,跟编写一个Pulsar函数进行流处理同样简单。app

层级存储

相比于其余消息/流系统,Apache Pulsar最大的优点是它基于Apache BookKeeper的分块存储(Segment Storage)架构。在Pulsar里面,一个主题分区(Topic Partition,或者称为一个流)会被切分红分块(Segments)存储在BookKeeper里面。这就意味着,一个主题分区的容量不受限于单台机器的容量。只要整个集群有足够的容量,你就能够往一个主题分区里面无限追加数据。若是你的集群开始没有容量,你只需简单地往集群里面添加存储节点便可,Pulsar就会开始自动使用新的存储节点,而不须要从新均衡已有的数据分区。可是,若是一直在BookKeeper里面累积存储历史数据,那么整个集群的开销就会变得昂贵。负载均衡

Pulsar经过提供层级存储(Tiered Storage)的方式来解决容量和开销的权衡。层级存储经过将老的数据分块从BookKeeper卸载到更廉价的存储系统(好比AWS S3, Google GCS和HDFS),从真正意义上把Pulsar变成了真正的无限数据流(Infinite Streams)存储。对于终端用户而言,他们不须要知道数据是存储在BookKeeper仍是存储在更廉价的存储系统中,整个流程对用户是透明的。这也意味着用户主要编写一套代码便可同时消费最新的流数据和历史数据。框架

目前2.1版本只支持S3。在将来的2.2版本中,咱们即将支持更多的云存储,好比Google GCS,Azure Blobstore和HDFS。若是你对层级存储感兴趣,也想贡献对其余云存储的支持,咱们也十分欢迎来自你的代码贡献。less

状态函数

流计算中最充满挑战的一个问题是解决状态(State)的管理。Pulsar Functions也面临一样的问题。咱们开发Pulsar Functions的初衷就是为开发者简化编写原生流处理的逻辑。咱们一样也但愿简化流计算中的状态的管理。由于在2.1版本中,咱们引入了状态(State)API,开发者可使用状态API来将计算的一些状态存储到底层的存储系统中。这套状态API跟Apache BookKeeper的表服务进行了深刻的整合。目前支持简单的key/value操做以及对于计数支持的inc操做。

状态函数在2.1版本中做为一个开发者预览(Developer Preview)特性发布。咱们但愿经过收集社区的意见完善出一套真正简化流计算状态管理的API。若是你有好的想法和建议,欢迎经过Pulsar的邮件列表,Github或者Slack来跟咱们交流。

Schema

在2.0版本中,Pulsar引入了对Schema的原生支持。这意味着你能够在建立Pulsar主题的时候定义消息相应的Schema,而后Pulsar会根据你指定的Schema保证发布消息的完整性。2.0版本只支持String,Bytes和JSON三种内置Schema。从2.1版本开始,Pulsar原生支持Avro和Protobuf这两种类型。

Schema将Pulsar从一个只支持非结构化数据的消息系统变成了也支持结构化数据的流数据平台。在接下来的2.2版本中,Schema将做为最重要的基石组件用来实现流数据的可查询化,也就是传说中的Pulsar SQL。

客户端

在2.1发布版本中,咱们正式发布了官方的Go语言客户端。该Go语言客户端是基于原生的C++客户端实现,因此是一个直接用在生产线上的客户端实现。除了官方原生的客户端,Comcast也在这段时间发布了他们使用原生Go语言编写的用在生产线上的客户端。

结语

Apache Pulsar是Yahoo开源的下一代消息系统。在2017年初,Yahoo将Pulsar贡献给Apache进行孵化。在过去一年的时间内,Apache Pulsar一共发布了6个版本,其中包括在六月份发布的2.0里程碑。最新的2.1版本延续Pulsar极简至上的原则,从真正意义上将Pulsar由一个分布式消息系统演变成一个完整的流原生数据平台。在将来一个月,也就是2.2版本中,咱们将会有更多强悍的特性发布。欢迎关注和参与到Pulsar社区。

Pulsar 2.1的下载连接:https://pulsar.incubator.apac...

Pulsar的项目连接:https://pulsar.incubator.apac...

Pulsar的Github代码库:https://github.com/apache/inc...

Pulsar的Slack Channel:https://apache-pulsar.herokua...

Pulsar的邮件列表:https://pulsar.incubator.apac...