1 消息的构成
组成部分 | 说明 |
---|---|
Value / data payload | 消息中的业务数据,必须符合 schema |
Key | 用于标记消息 |
Properties | 用户自定义属性的可选键/值对 |
Producer name | 生产消息的生产者名称 |
Topic name | 发布消息的主题名 |
Schema version | 消息的 schema 版本 |
Sequence ID | 消息的序列 ID 最初由其生产者分配,表示消息在该序列中的顺序。如果 brokerDeduplicationEnabled 设置为true ,则在 Partition 的生产者中是唯一的, |
Message ID | 消息 ID 在 Pulsar 集群中是唯一的,消息被持久化后 Bookies 分配的 |
Publish time | 消息发布的时间戳,由生产者自动生成的。 |
Event time | 应用程序附加到消息的可选时间戳。如果没有设置事件时间,则值为 0
|
2 四种订阅模式
2.1 独占 Exclusive 模式
Exclusive 模式只允许一个 Consumer,使用同一个订阅名订阅 Topic。如下图所示,只允许 Consumer A-0 消费消息。
image.png说明:
① 如果多个消费者使用同一个订阅订阅一个 Topic,则会发生客户端异常
② Exclusive 是默认订阅类型
2.2 容错 Failover 模式
Failover 模式允许多个 Consumer 添加到同一个订阅名。当主消费者断开连接时,所有未 ACK 的消息都会传递给排队的下一个 Consumer。如下图所示,Consumer-B-0 是主消费者,而如果 Consumer-B-0 断开连接, 则 Consumer-B-1 将是排队接收消息的下一个 Consumer。
image.png说明:
① 如果针对 Partitioned Topic,在 Failover 的消费模式下,Broker 首先按照优先级和消费者名称的 Hash 顺序对 Consumer 进行排序,然后选择优先级最高的 Consumer。
② 如果针对 Non-partitioned Topic,在 Failover 的消费模式下,Broker 会根据消费者订阅的顺序进行选择。
2.3 共享 Shared 模式
Shared 模式允许多个 Consumer 添加到同一个订阅名。消息在 Consumer 之间循环分发,任何给定的消息都只传递给一个 Consumer。当 Consumer 断开连接时,所有发送给它但未提交 ACK 消息将被重新安排发送给剩余的 Consumer。
image.png说明:Shared 模式不保证消息是顺序消费的,也不能使用累计提交 ACK
2.4 Key-Shared 模式
Key-Shared 模式允许多个 Consumer 添加到同一个订阅名。消息在 Consumer 之间分发,具有相同 Key 或相同排序 Key 的消息仅传递给一个 Consumer。无论消息被重新传递多少次,它都会传递给同一个 Consumer。当 Consumer 连接或断开连接时,将导致 Consumer 更改某些消息的 Key。
image.png
网友评论