这周我们将从 Pulsar 最基本的概念角度分享其订阅模型,更多的是结合实际代码进行展示,所以此次博客不会涉及太多的文字整理,更细节的可以参考文末视频回放。
首先回顾一些最近一周 Pulsar 的相关进展:
Pulsar Summit 2020 线上峰会将在 6 月 17-18 日举行。想要参与的小伙伴可以去官网查看更多细节:https://pulsar-summit.org 。
Pulsar 2.6.0 版本也已在计划中,敬请期待!
接下来就一起看看关于 Pulsar 订阅模式的相关细节吧!
订 阅 类 型
关于 Pulsar 最基本的概念和架构描述,大家平时可以查看官网,进行更多的信息参考。这些内容会从开发者角度让你更容易的理解和使用 Pulsar。
https://pulsar.apache.org/docs/en/concepts-overview/
消息中间件最核心的点就是——消息。消息里可能出现额外添加的属性,比如 value、key等。这些属性是 Pulsar 提供给用户在创建消息时可以选择性添加的。
具体在代码内如何进行添加,可以参考回放视频 07:40-10:00 时间段。
在 producer 生产消息和 consumer 消费消息时,就产生了 consumer 的消息订阅。不同的订阅类型代表一个消费组,它可以消费到完整的一份消息。所以订阅类型就决定了不同的消费组如何进行消费消息的行为。
Pulsar 允许在同一个消息上,既有顺序消费,也有乱序消费。这里跟其他中间件不太一样的是,它是由订阅模式来决定消费方式。这也是为什么 Pulsar 具有消息队列和流模式融合的特性。
目前 Pular 的订阅模式主要是以下四种:
Exclusive:独占订阅
Failover:故障转移订阅
Shared:共享订阅
Key_Shared:Key 保序共享订阅
下面就通过简单地文字和实际代码操作进行每种类型的讲解。
不管有多少个 consumer 同时存在,只会有一个 consumer 是活跃的,也就是只有这一个 consumer 可以接收到这个 topic 的所有消息。这种模式就为 Pulsar 订阅模式中的独占订阅(Exclusive)。
Failover(故障转移订阅)则是多个 consumer 可以附加到同一订阅。但是,对于给定的主题分区,将选择一个 consumer 作为该主题分区的主使用者,其他 consumer 将被指定为故障转移消费者,当主消费者断开连接时,分区将被重新分配给其中一个故障转移消费者,而新分配的消费者将成为新的主消费者。
发生这种情况时,所有未确认的消息都将传递给新的主消费者,这类似于 Apache Kafka 中的使用者分区重新平衡。
关于这两种订阅类型的代码操作详情和运行效果,可以参考回放视频 13:50-38:08 时间段。
Shared(共享订阅)是可以将所需数量的 consumer 附加到同一订阅。消息以多个 consumer 的循环尝试分发形式传递,并且任何给定的消息仅传递给一个 consumer。当消费者断开连接时,所有传递给它并且未被确认的消息将被重新安排,以便发送给该订阅上剩余的 consumer。
关于这 Shared 订阅类型的代码操作详情和运行效果,可以参考回放视频 39:30-48:00 时间段。
Key_Shared 订阅模式是 2.4.0 以后一个新订阅模式。类似于共享订阅,但又不是按照循环模式,是按照 key 进行分发,比如同一特征(奇数、偶数等)。总的来说是融合了 Failover 的有序性和 Shared 的消费扩展性、更均衡的一种订阅模式。
关于 Key_Shared 订阅类型的代码操作详情和运行效果,可以参考回放视频 49:10-58:31 时间段。
这四种方式里,究竟哪种方式是最适合自己产品的呢?
在很多情况下,如果不在乎消息顺序,那么 Shared 模式可能是最理想的模式。因为可以通过添加更多的消费者来提高消费能力。
如果你在使用架构里有与 Flink 进行集成结合的,那么 Failover 和 Key_Shared 模式可能更适合。因为可以通过记录消费状态,来保证集成不会出现重复的数据。
最后一点需要补充的是,在使用订阅模式时,还需要考虑的一个因素是——确认。即收到消息处理完成后,需要传递给 broker 并告知“已确认”的状态。在 Pulsar 里有两种确认方式,一种是单条确认,另一种是累积确认。
具体两种确认方式的实际操作,可以参考回放视频 60:00-70:00 时间段.
总 结
本次分享还是基于消息队列和流统一的消费模型,进行不同消息订阅方式的讲解。大家也可以参考 pulsar-example repo 下进行相关 demo 的查看。
https://github.com/streamnative/pulsar-examples/tree/master/pulsar
5 月 31 日上午十一点,将由来自腾讯计费平台的大佬刘德志为大家分享关于 Pulsar 如何应用在腾讯系软件的细节,敬请期待!
????????点击「阅读原文」,查看往期所有直播回放