1、从消息系统到流原数据平台-什么是Apache Pulsar20032010201220062011“Flexible Pub/Sub messagingbacked by durable log/stream storage”为什么要“造轮”没有系统能够解决遇到的问题和规模多租户百万Topics低延时持久化跨地域复制为什么要“造轮” (2)已有的系统存在问题分区模型紧耦合存储和计算,不是云原(Cloud Native)的设计存储模型过于简单,强依赖于件系统想开持久化保证数据不丢,或者,增加Topics的数量,性能下降太厉害IO不隔离:消费者在清除Backlog的时候会影响其他产者和消费者运维太
2、痛苦 - 替换机器、服务扩容都需要很漫的重新均衡数据的过程为什么要“造轮” (3)基础架构从物理机时代往容器化转型需要个新的向容器编排设计的原系统项状态2012在Yahoo内部启动,经历了数的迭代2016年九Yahoo将Pulsar开源2017年六Yahoo将Pulsar捐献给了Apache软件基会2018年九Pulsar毕业成为顶级项2353 commits - 22 Yahoo releases - 9 Apache releases23 committers from 7 companies, 59 contributors30+ companies on production简介不同在
3、哪灵活的、统的消息模型:队列 + 流云原:存储(storage)和计算(serving/messaging)分离降维:从物理分区到逻辑分Pulsar概念Pulsar概念 (2)队列 + 流流:独占式订阅流:灾备式订阅队列:共享式订阅例: Event Center例: Event Center (2)存储和计算分离分层架构: Broker s & Bookies独扩展灵活容错快速扩容分存储分区(Par tition)是逻辑上的个概念分区按照时间或者被切成分(Segment)分被打散存放到集群中的所有节点读写流程 (1)(1) 产者发送消息给Broker读写流程 (2)(2) Broker并发写N
4、个副本读写流程 (3)(3) Broker等待来于Bookies的Quorum Acks读写流程 (4)(4) Broker返回确认给产者,并投递给消费者Broker容错Bookie容错扩容分区 vs 分物理分区逻辑分区Segment 1Segment 2Segment nBrokerBrokerBrokerBrokerBrokerBroker存储和计算分离紧耦合分区(主副本)分区(拷)分布从拷)(Segment 1Segment 2Segment 2Segment 3Segment 3Segment 1. . . . . . .Segment 1Segment 2. . . .Segment
5、 nSegment nSegment nSegment n分区架构 物理分区 存储和计算紧耦合分架构 容错恢复需要拷物理分区 扩容需要迁移物理分区来达到负载均衡“ ”逻辑分区, 物理 分存储和计算分离 失效处理相互分离,快速、痛点 弹性扩容分区 vs 分https:/jack- Broker的硬盘,是不是也可以达到你要的存储和计算分离?”“多了层,是不是时延就了,性能就不好了”分区 vs 分 - Write逻辑分区物理分区BrokerBrokerBrokerBrokerBrokerBroker分区(主副本)分区拷分布从拷)()(分区 vs 分 - Tailing Read逻辑分区物理分区Bro
6、kerBrokerBrokerBrokerBrokerBroker分区(主副本)分区拷分布从拷)()(分区 vs 分 - Catch-up Read逻辑分区物理分区BrokerBrokerBrokerBrokerBrokerBroker分区(主副本)分区拷分布从拷)()(分区 vs 分 - IO隔离逻辑分区物理分区BrokerBrokerBrokerL1 CacheL2 CacheBrokerBrokerBroker分区(主副本)分区拷分布从拷)()(“太多的移动部件了,运维复杂了?”云原弹性计算和存储资源容器时代,Kubernetes化势不可挡云原架构不是为物理机设计的,是为容器化设计存储和
7、计算分离是云原的架构设计Pulsar + Kubernetes = 完美Pulsar其他特性丰富的客户端:Java, C, C+, Python, Go, WebSocket丰富的Policy:存储配额,流量控制,数据保留策略,TTL等灵活的租户控制:软件隔离,物理隔离多机房、跨地域复制:异步复制,同步复制机架感知、地域感知的数据放置策略Pulsar 2.0Pulsar是什么消息中间件 - MQ流存储、流平台 - Stream ComputingEvent CenterEvent BusEvent Gateway“实时时代的数据中台”Pulsar IOMySQLCassandraKinesis
8、MongoDBMessagingPulsar BrokersEvent ProcessingComplex StreamProcessingPulsar FunctionsStream StorageAnalyticsOtherFrameworksBookKeeperPresto SQLTiered StorageGoogle CloudStorageAzure BlobStorageAWS S3HDFSMessagingPulsar BrokersStream StorageBookKeeperTiered StorageGoogle CloudStorageAzure BlobStorag
9、eAWS S3HDFS层级存储Infinite Stream: 以“流”的式“永远”保存原始数据分区的容量不再受限充分利云存储或者现有的廉价存储(e.g. HDFS)数据统表征:客户端不需要关数据究竟存在哪层级存储Infinite Stream: 以“流”的式“永远”保存原始数据L1 Cache分区的容量不再受限充分利云存储或者现有的廉价存储(e.g. HDFS)数据统表征:客户端不需要关数据究竟存在哪L3 CacheL2 CacheSchema Registry数据是有结构的,结构也是在变化产者和消费者关于数据结构的个“合同”兼容性:向前、向后、全兼容、不兼容数据合法性的强制检查Type-S
10、afe客户端客户端与Schema Registr y进整合端到端Type Safety Broker进Schema的验证保证数据合法性Consumer consumer = clientProducer producer = client.newProducer(Schema.JSON(MyClass.class).topic(my-topic).newConsumer(Schema.JSON(MyClass.class).topic(my-topic).subscriptionName(my-subscription).subscribe();.create();producer.send(
11、new MyClass(1, 2);Message msg = consumer.receive();MessagingEvent ProcessingPulsar FunctionsPulsar BrokersStream StorageBookKeeperTiered StorageGoogle CloudStorageAzure BlobStorageAWS S3HDFSFunctions - 轻量化计算Functions (1)简单、易,懂Java或者Python就托管部署,或者选择你喜欢的任何式进部署Function Worker (Process / Thread), Kubern
12、etes, 个函数(Function)从个或者多个Topics进消费每条消息到来时,函数就会被调次函数的输出可以写到个或者多个TopicsFunctions (2)SDK-less and SDKPython Example:def process(input):return input + !持Java, Python Go和Nodejs正在路上Functions (3)State: Managed State (Stored in BookKeeper)Python Example:def process(sentence, context):words = sentence.split(
13、)for word in words:context.incr_counter(word, 1)Functions (4)使场景:“杀鸡不”ETLData EnrichmentData FilteringRoutingFunctions (5)部署式localrun - 动本地运个函数,适于开发模式managed - Worker Service来运和管理functions (Process/Thread)k8s - 每个函数会部署成为个k8s的StatefulSet,利k8s进弹性扩展Function部署 - Thread ModeFunctionwordcount-1Functiontra
14、nsform-2Functiontransform-1Functiondataroute-1Functionwordcount-2Functiontransform-3WorkerWorkerWorkerBroker 1Node 1Broker 1Node 2Broker 1Node 3Function部署 - Process ModeFunctionwordcount-1Functiontransform-2Functiontransform-1Functiondataroute-1Functionwordcount-2Functiontransform-3WorkerNode 1Worke
15、rNode 2WorkerNode 3Broker 1Node 4Broker 2Node 5Broker 3Node 6Functions部署 - K8SFunctionwordcount-1Functiontransform-1Functiontransform-3Pod 1Pod 2Pod 3Functiondataroute-1Functionwordcount-2Functiontransform-2Pod 4Pod 5Pod 6Broker 1Pod 7Broker 2Pod 8Broker 3Pod 9MessagingEvent ProcessingComplex Stream
16、ProcessingPulsar FunctionsPulsar BrokersStream StorageBookKeeperTiered StorageGoogle CloudStorageAzure BlobStorageAWS S3HDFSComplex Computing与现有计算框架进整合SparkFlinkStormHeronPulsar IOMySQLCassandraKinesisMongoDBMessagingPulsar BrokersEvent ProcessingComplex StreamProcessingPulsar FunctionsStream Storag
17、eBookKeeperTiered StorageGoogle CloudStorageAzure BlobStorageAWS S3HDFSPulsar IO - 基于Functions的连接器框架Pulsar IOSource: 从外部系统导数据到Pulsar中,如Kafka, Kinesis等Sink: 将Pulsar的数据导出到外部系统,如Cassandra,HDFS等Pulsar内嵌了些常的IO Connectors户可以像编写Function样容易地编写想要的IO ConnectorCDC and Pulsar IOCDC - Change Data Capture跟Debeziu
18、m进深度整合MongoDBMySQLOracleSQL ServerPulsar IOMySQLCassandraKinesisMongoDBMessagingPulsar BrokersEvent ProcessingComplex StreamProcessingPulsar FunctionsStream StorageAnalyticsOtherFrameworksBookKeeperPresto SQLTiered StorageGoogle CloudStorageAzure BlobStorageAWS S3HDFSPulsar SQL2.2 release的个预览特性对存储在P
19、ulsar上的数据(论在BK还是层级存储),进交互式的SQL查询实时数据和历史数据的交互查询:只要数据进到Pulsar中,就可以被查Pulsar SQL (2)基于Facebook的Presto进深度开发Presto是个分布式的SQL查询引擎不重复造轮Presto可以查询不同的数据源,你不需要把所有数据都导到Pulsar中再进查询。Pulsar SQL (3)63 62 61 6043 42 41 4023 22 21 204 3 2Segment 1Segment 3Segment 2Segment 2Segment 1Segment 4SegmenSegment 1Segment 4Seg
20、ment 3Segment 4Segment 2SegmentReaderSegmentReaderSegmentReaderSegmentReaderCoordinatorPulsar SQL (4)与Presto集成从BK或者层级存储直接读数据,不需要访问Brokers多对多的数据访问Pulsar的数据是分存储的,所以多个Presto worker可以并发访问同个分区中的不同分时间索引:根据PublishTime快速定位分,只需要读取相应分Pulsar IOMySQLCassandraKinesisMongoDBMessagingPulsar BrokersEvent Processing
21、Complex StreamProcessingPulsar FunctionsStream StorageAnalyticsOtherFrameworksBookKeeperPresto SQLTiered StorageGoogle CloudStorageAzure BlobStorageAWS S3HDFS场景与案例Pulsar的应场景流数据的转化和处理实时计算数据分发事件驱动的作流!$Transaction clearanceand settlement实时监控和通知交互式实时应事件监查志物联分析案例:Yahoo!使Pulsar作为核的Event Data Bus整合不同的技术和集群成统的解决案全球多机房(8+)复制每处理千亿量级的消息,多达230万个topics案例:BookKeeper Twitter整个消息系统(EventBus)的存储案Search、Ads、Stream computing、Manhattan Database1000+ Bookies per datacenter17PB/day, 1.5 trillion records/second更多案例社区与规划