key shared 消费者增加减少需要解决的问题?
1.解决顺序问题
让新加进来的consumer 等前面的消息都签收掉在分发给他消息就可以。
缺点:增加所有消费者的消费延迟时间!(所有的消费者暂停,直到新的消费者加入之前,读取的所有消息被确认为止)
1.1缓冲区优化: 加了一个缓冲区,把消息发到缓冲区,老的消费者根据hash算法消费属于自己的消息。发给新消费者的消息暂存在缓冲区。新的消费者属于暂停状态。老的消费者可以继续消费新的消息。
1.2新增缓存区缺点:当频繁变动消费者数量时,需要复杂的逻辑处理,来保证消息的顺序性。缓存区满后,所有消费者进入暂停状态
2解决hash分配均匀问题
2.1一致性hash槽,类似redis 集群hash槽
2.2hash range 2 分法(扩容找到最大的平均分配,缩容找到最小的)
1.解决顺序问题
让新加进来的consumer 等前面的消息都签收掉在分发给他消息就可以。
缺点:增加所有消费者的消费延迟时间!(所有的消费者暂停,直到新的消费者加入之前,读取的所有消息被确认为止)
1.1缓冲区优化: 加了一个缓冲区,把消息发到缓冲区,老的消费者根据hash算法消费属于自己的消息。发给新消费者的消息暂存在缓冲区。新的消费者属于暂停状态。老的消费者可以继续消费新的消息。
1.2新增缓存区缺点:当频繁变动消费者数量时,需要复杂的逻辑处理,来保证消息的顺序性。缓存区满后,所有消费者进入暂停状态
2解决hash分配均匀问题
2.1一致性hash槽,类似redis 集群hash槽
2.2hash range 2 分法(扩容找到最大的平均分配,缩容找到最小的)
https://github.com/apache/pulsar/pull/6977 https://github.com/apache/pulsar/pull/7106
https://github.com/apache/pulsar/pull/6791
topic
游标
0-100
1.
游标0-5 游标6-10 | (游标为10的时候c3加入)
c1 c2 c3加入
2. 缓存区(c1,c2继续消费属于自己的消息 | c3等游标10确认后推给c3消息)
0-5(11-13) | 6-10 (14-16) | 17 - 20
c1 c2 c3
https://pulsar-summit.org/ 有兴趣也可以报名听听
智联当时也用 pulsar sql https://streamnative.io/blog/tech/2020-05-07-zhaopin-tech-blog/
https://streamnative.io/blog/tech/2018-12-05-simplifying-zhaopin-event-center-with-apache-pulsar/
智联当时也用 pulsar sql https://streamnative.io/blog/tech/2020-05-07-zhaopin-tech-blog/
https://streamnative.io/blog/tech/2018-12-05-simplifying-zhaopin-event-center-with-apache-pulsar/
来源:oschina
链接:https://my.oschina.net/xiaominmin/blog/4298534