1 消息消费
目前的消息流式架构中,消息用例被分为两类:队列和流
Apache Pulsar将队列和流统一为消息传递模型:producer-topic-subscription-consumer。主题(分区)是用于发送消息的命名通道。每个主题分区都由存储在Apache BookKeeper中的分布式日志支持。发布者发布的每条消息仅存储在主题分区上一次,复制以存储在多个bookies(BookKeeper服务器)上,并且可以根据消费者的需要多次消费使用。主题是消费真相的来源,尽管消息仅在主题分区上存储一次,但是可以有不同的方式来消费这些消息。消费者被组合在一起以消费消息。每组消费者都是对主题的订阅,每个消费者群体都可以拥有自己的消费方式 - 独占,共享或故障转移 - 这些消费群体可能会有所不同。这在一个模型和API中结合了队列和流,它的设计和实现目标是不影响性能和引入成本开销,同时还为用户提供了很多灵活性,以最适合当前用例的方式使用消息。
-
独占订阅(流)
独占订阅
在任何给定时间内,消费者中只有一个消费者消费主题分区。上图说明了独占订阅的示例。有一个有订阅A的活动消费者A-0消息m0到m4按顺序传送并由A-0消费。如果另一个消费者A-1想要附加到订阅A,则不允许这样做。
-
故障转移订阅(流)
故障转移订阅
使用故障转移订阅,多个消费者可以附加到同一订阅。但是,对于给定的主题分区,将选择一个使用者作为该主题分区的主使用者,其他消费者将被指定为故障转移消费者,当主消费者断开连接时,分区将被重新分配给其中一个故障转移消费者,而新分配的消费者将成为新的主消费者。发生这种情况时,所有未确认的消息都将传递给新的主消费者,这类似于Apache Kafka中的使用者分区重新平衡。上图说明了故障转移订阅,消费者B-0和B-1订阅B消费消息.B-0是主消费者并接收所有消息,B-1是故障转移消费者,如果消费者B-0出现故障,将接管消费。
-
共享订阅(队列)
共享订阅
使用共享订阅,可以将所有的消费者附加到同一订阅。消息以多个消费者的循环尝试分发形式传递,并且任何给定的消息仅传递给一个消费者。当消费者断开连接时,所有传递给它并且未被确认的消息将被重新安排,以便发送给该订阅上剩余的消费者。上图说明了共享订阅。消费者C-1,C-2和C-3都在同一主题分区上消费消息。每个消费者接收大约1/3的消息。如果您想提高消费率,您可以在不增加分区数量的情况下为更多的消费者提供相同的订阅(尽可能多的消费者)。
总结:
独占和故障转移订阅仅允许每个订阅每个主题分区仅有一个消费者。它们按分区顺序使用消息。它们最适用于需要严格排序的流用例。共享订阅允许每个主题分区有多个消费者,同一订阅中的每个消费者仅接收发布到主题分区的一部分消息。共享订阅最适用于不需要排序的并且可以扩展超出分区数量的使用者数量的队列用例。
2 扩展
Pulsar中的subscription(订阅)实际上与Apache Kafka中的消费者群体相同。创建订阅具有高度可扩展性且非常低廉的。可以根据需要创建任意数量的订阅,对同一主题的不同订阅不必具有相同的订阅类型。这意味着可以在同一主题上有20个消费者的故障转移订阅或有20个消费者的共享订阅。如果共享订阅处理事件的速度很慢,则可以在不更改分区数的情况下向共享订阅添加更多消费者。下图描绘了一个包含3个订阅A,B和C的主题,并说明了消息如何从生产者流向消费者。
image.png
网友评论