Pulsar是云原生分布式消息流平台(即可作为消息中间件),最初源于Yahoo,支持Yahoo应用服务140万个主题,日处理超过1000亿条消息。
一、订阅模式
pulsar的主题订阅模式包括四种:独占(exclusive)、共享(shared)、灾备(failover)、key共享(key_shared)。
独占:一个订阅只与一个消费者可以关联,只有这个消费者接收到topic的全部消息,如果这个消费者故障了就会停止消费。
灾备:一个订阅可以与多个消费者关联,但只有一个消费者会消费到数据,当该消费者故障时,由另一个消费者来继续消费。
共享:一个订阅可以与多个消费者关联,消息通过轮询机制发送给不同的消费者。YPulsar默认使用共享模式。
key共享:一个订阅可以与多个消费者关联,消息根据给定的映射规则,相同key的消息由同一个消费者消费。
二、架构设计
一个pulsar实例可以由多个集群组成,集群间的消息数据可以进行复制。单个集群由以下三部分组成:
一个或者多个broker:负责处理producer发出的消息,并将消息给consumer消费;
一个或多个BookKeeper(又称bookies):bookies提供消息的持久化存储能力,broker将消息存储在bookies中。
一个ZooKeeper集群:ZooKeeper提供分布式配置和协调能力,存储归属信息、broker负载报告、bookies ledger信息等。
三、Broker主逻辑
1. handleSend 命令
2、handleSubscribe 和newFlow 命令
sendFlowPermitsToBroker():当消费到队列的一半时,再次给broker发送flow命名,请求broker去推送消息
enqueueMessageAndCheckBatchReceive():放入待消费队列incomingMessages
internalReceive():从消费队列incomingMessages中取