编辑
Debra
本文整理自Streamlio核心创始人翟佳在QCon北京站的演讲,在本次演讲中,翟佳介绍了ApachePulsar的架构、特性和其生态系统的组成,并展示了ApachePulsar在消息、计算和存储三个方面进行的协调、抽象和统一。
Messaging:Pulsar对pub/sub和queue两种模式提供统一的支持,同时保证了一致性,高性能和易扩展性。
Computing:Pulsar内部的Pulsar-Functions提供了Stream-native的轻量级计算框架,保证了数据的即时流式处理。
Storage:Pulsar借助ApacheBookKeeper提供了以segment为中心的存储架构,保证了存储的性能,持久性和弹性。
实时数据处理在刚刚兴起的时候,一般企业会采用λ架构,维护两套系统:一套用来处理实时的数据;另一套用batch的方式处理历史数据。两套系统带来了资源的冗余占用和维护的不便。
为了消除冗余,逐渐演化出κ架构,使用一套系统来满足实时数据处理和历史数据处理的需求。
不管是λ架构还是κ架构,在实时处理的系统中,系统的核心由消息、计算和存储三个子系统组成,比如消息系统有Kafka、RabbitMQ、Flume等;计算系统有SparkStreaming、Flink、Heron等;存储系统有各种分布式的文件系统,DB、K/Vstore等。由于三个部分中,每个部分都有相应的不同产品,三个部分之间也相互分隔和独立很少关联,这带来了一些问题,比如需要更多人力维护,部署复杂,调优难度大,监管难,数据丢失风险大等等。
为什么要选择ApachePulsar?
面对消息,存储和计算三个部分分隔的现状,ApachePulsar在这三个方面进行了很好的协调、抽象和统一。具体到ApachePulsar内部,消息部分由PulsarBroker来负责;存储部分使用了ApacheBookKeeper,计算部分由PulsarFunctions来负责。
ApachePulsar是年yahoo开源的下一代大规模分布式消息系统,目前在Apache基金会下孵化。在Yahoo的生产环境中大规模部署并使用了近4年,服务于Mail、Finance、Sports、Flickr、theGeminiAdsplatform、Sherpa以及Yahoo的KV存储等,在Yahoo全球8个数据中心之间维护了全联通的复制,并包含了多万个Topics。
ApachePulsar有几个明显区别于其他消息系统的特点:
优秀的数据持久性和顺序性。每一条消息都提供了全局唯一的ID,多副本,并都是在实时刷盘后再返回给用户。
统一的消费模型:支持Stream(如Kafka)和Queue(如RabbitMQ)两种消费模型,支持exclusive、failover和shared三种消费模式。
灵活的扩展性:节点扩展的线性和瞬时完成,在扩展中不会有数据的拷贝和迁移。
高吞吐低延迟,在实时刷盘的前提下,依然提供了高带宽(万messages/秒)和低延迟(5msat99%)。
除了这些特性,ApachePulsar也具备了优秀的企业级特性,比如多机房互联互备(Geo-replication),多租户等。
ApachePulsar在架构上最明显的优势是采用了消息服务和消息存储分层的策略。它包括了无状态的消息服务层(broker节点)和消息存储层(BookKeeper中Bookie是基本的存储节点)。这为系统带来了极好的扩展性和健壮性。
在消息服务层和存储层,系统所