09_Pulsar如何实现生产和消费流程、Pulsar数据生产流程、Pulsar数据读取流程、Pulsar数据生产流程、Pulsar数据读取流程、Pulsar数据读写故障处理流程

2.2.3.Pulsar如何实现生产和消费流程
2.2.3.1.Pulsar数据生产流程
2.2.3.2.Pulsar数据读取流程
2.2.3.2.1.Pulsar数据生产流程
2.2.3.2.2.Pulsar数据读取流程
2.2.3.2.3.Pulsar数据读写故障处理流程

2.2.3.Pulsar如何实现生产和消费流程

2.2.3.1.Pulsar数据生产流程

在这里插入图片描述

  • 1)客户端调用pulsar提供给客户端的API, 进行数据的生产操作, 将生产的消息传递给producer
  • 2)在生产端内部有一个MessageWriter的类, 基于这个类实现数据分发操作, 默认方案为round-robin(轮询),同时为了提高效率, 在一
    定的时间内, 只会选择一个partition
    (除了支持轮询方案外,如果在传递消息指定key,会采用hash取模的方式确定要发送到那个partition,同时pulsar支持自定义分发策略)
  • 3)客户端在此连接broker, 根据要发送的partition获取对应服务的broker节点。
  • 4)broker收到消息后调用bookkeeper的客户端并发去写多个副本。
  • 5)broker端会等待bookkeeper写入完成,当broker收到所有副本的ack之后,会认为这条消息已经写入成功,broker会返回客户端,告知这条消息已经被持久化完成。

说明:整个写入操作,客户端不会跟zookeeper打交道,也不会和bookeeper打交道,只需要和broker即可。

2.2.3.2.Pulsar数据读取流程
2.2.3.2.1.Pulsar数据生产流程

在这里插入图片描述
Consumer在消费数据时候,主要有二种情况,一种为broker中已经缓存了消息,一种为broker中没有缓存信息。

  • 1)消费者连接broker地址,根据要读取的对应的分配,确定要连接的最终的broker地址,如果没有指定分片,那么就连接每一个分片对应的broker地址。
  • 2)对应的broker首先判断消息是否已经有缓存数据,如果存在,直接从内存中采用推的方式发送给消费者,将消息放置在一个receiver队列中,消费端从队列中读取即可,如果没有缓存,此时broker端通过bookkeeper的客户端到bookie中读取数据(内部可以读取任意副本的数据)
2.2.3.2.2.Pulsar数据读取流程

在这里插入图片描述

  • 1)客户端调用pulsar提供给客户端的API, 进行数据的生产操作, 将生产的消息传递给producer
    1. 在生产端内部有一个MessageWriter的类, 基于这个类实现数据分发操作, 默认方案为round-robin(轮询),同时为了提高效率, 在一定的时间内, 只会选择一个partition 。
      (除了支持轮询方案外, 如果在传递消息指定key, 会采用hash取模的方式确定要发送到那个partition , 同时pulsar支持自定义分发策略)
  • 3)客户端在此连接broker, 根据要发送的partition获取对应服务的broker节点。
  • 4)broker收到消息后调用bookkeeper的客户端并发去写多个副本。
  • 5)broker端会等待bookkeeper写入完成, 当broker收到所有副本的ack之后, 会认为这条消息已经写入成功, broker会返回客户端,告知这条消息已经被持久化完成。

说明: 整个写入操作, 客户端不会跟zookeeper打交道,也不会和bookkeeper打交道, 只需要和broker即可。

2.2.3.2.3.Pulsar数据读写故障处理流程
  • 生产端产生失败:
    当出现 [发消息网络断开, broker宕机] 等情况时候, 这个时候producer有 pending 队列, 会在设置的超时时间内进行重试
    策略。

  • Broker端出现宕机
    因为broker是没有状态的, 所以它不保存任何数据, 一旦宕机后, topic的管理权会被其他broker掌管, 这个时候, 服务会被
    快速恢复。

  • Bookkeeper出现宕机
    存储节点只负责数据存储, bookkeeper本身是一个集群, 故如果只挂掉一个bookie, 并不影响, 所以broker是不会感知的,
    除非所有的bookie都挂掉, 没有足够的副本去写入数据。

  • 消费端产生失败
    一个订阅同时只有一个消费者, 但是可以拥有多个备份消费者, 一旦主消费者故障, 则备份消费者接管, 进行消费即可, 同
    时pulsar还支持一个分区对应多个消费者, 或者一个消费端对应多个分片的情况。

同时只要消息没有被消费者所消费,在pulsar中消息就没有变成确认状态,下次依然是可以再次消费的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值