Pulsar的订阅模式

前言

前面对pulsar整体的执行原理进行了一番介绍,下面来对使用实践相关,首先要介绍的就是订阅模式,订阅模式决定了消费者如何对一个topic/partition中的数据进行消费,了解其相关的知识对使用来说是至关重要的。

订阅模式

为了适用不同场景的需求,Pulsar 支持四种订阅模式:分别是Exclusive(独占)、Shared(共享)、Failover(灾备)、Key_Shared(key共享)。下面分别对这四种模式进行一个介绍

独占模式(Exclusive)

Exclusive 独占模式(默认模式):一个 Subscription 只能与一个 Consumer 关联,没错,是一个!!!只有这个 Consumer 可以接收到 Topic 的全部消息,如果该 Consumer 出现故障了就会停止消费。

Exclusive 订阅模式下,同一个 Subscription 里只有一个 Consumer 能消费 Topic,如果多个 Consumer 订阅则会报错,适用于全局有序消费的场景。

当启动多个消费者时,就会报错。

共享模式(Shared)

消息默认通过轮询机制(也可以自定义)分发给不同的消费者,并且每个消息仅会被分发给一个消费者。当消费者断开连接,所有被发送给他,但没有被确认的消息将被重新安排,分发给其它存活的消费者。

这也是我们使用最频繁的一种消费模式,目前我重构的vdc基本都是使用这种模式,可以在管理端看到如下多个消费者消费同一个topic

灾备模式(Failover)

当存在多个 consumer 时,将会按字典顺序排序,第一个 consumer 被初始化为唯一接受消息的消费者。当第一个 consumer 断开时,所有的消息(未被确认和后续进入的)将会被分发给队列中的下一个 consumer。

这种模式跟第一种独占模式很相似,优势就是有备胎,主消费者挂了,备胎就会马上顶替上来。

KEY 共享模式(Key_Shared)

当存在多个 consumer 时,将根据消息的 key 进行分发,key 相同的消息只会被分发到同一个消费者。这种消费模式也是使用比较频繁,当我们需要对消息进行分类消费时我们就可以使用这种模式,举个例子我们的vdc系统需要消费多款不同的引擎的扫描结果,我们需要把引擎分类做不同的逻辑处理,这时就可以使用到这种消费模式了。

总结

以上我们总结了pulsar的四种消费模式,了解其相关的原理对于我们使用上是至关重要哈。