Apache Pulsar的数据写入和读取流程,及读写异常处理流程

1. 数据写入流程

说明: 写入操作客户端只和broker交互, 不和zookeeper和bookkeeper交互

  1. 客户端通过produce进行消息的发送
  2. produce基于内部的MessageWriter类进行分区操作。分区方法有round-robin(默认)、根据key进行hash分区、自定义分区
  3. produce连接partition对应的broker节点
  4. broker调用Bookkeeper客户端并发写多个副本到Bookie
  5. 当broker收到所有副本的ack确认之后, broker通知客户端消息已经被持久化完成

2. 数据读取流程

  1. consume连接broker,获取到读取消息的topic的分片所在的broker地址,然后连接该broker地址
  2. 如果消息在broker有缓存,将消息放入receiver队列,consume从队列读取;如果broker没有缓存,broker通过Bookeeper客户端从bookie的任意副本读取数据,返回给客户端

3. 读写异常处理流程

  • produce产生失败:当出现网络原因等,在超时时间内进行重试一定次数
  • broker端出现宕机:broker是无状态的。由其它broker继续提供服务
  • Bookkeeper出现宕机:由其它副本提供消息读取服务
    存储节点只负责数据存储, bookkeeper本身是一个集群, 故如果只挂掉一个bookie, 并不影响, 所以broker是不会感知的, 除非所有的bookie都挂掉, 没有足够的副本去写入数据.
  • consume产生失败:消息没有被consume进行ack确认,下次可以继续消费。也可以通过failover的subscription进行consume故障转移
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值