Kafka消费者再均衡
在Kafka中,一个分区只能有一个消费者,处于一个消费组的消费者,处理消息的时候是排他的,也就是说:一条消息,只能由消费组里面的一个消费者消费到。消费者再均衡的时候,处于同一消费组中的所有消费者将是不可用的,等再均衡动作完成后,才会按照重新分配的策略进行消费。我们肯定需要避免消费者再均衡的情况发生。但是在实际生产中,想避免发生再均衡是相当困难的,很多时候它会频繁发生的。
引起再均衡的情况如下:
1、主题或者主题分区变化。
2、消费者变化。
新的消费者加入到组内,或者有消费者下线。
3、GroupCoordinator发生变化
比如集群重启,节点宕机引起的GroupCoordinator选举。
我们在生产环境中,经常由于网络等原因,消费者频繁的上下线。导致消费者再均衡。
Pulsar消费者分配器
Pulsar没有分区再均衡的情况,或者说其简化了再均衡的流程。Pulsar中消息由分配器(Key_Shared消费模式对应的类是PersistentStickyKeyDispatcherMultipleConsumers)进行分发,类似Group Coordinator的角色,但是处理的方法与Kafka不一样。Kafka的思路是,所有消费者暂停,由GroupCoordinator进行再均衡,分配完成后,消费者服务才能正常工作。而Pulsar这方面做得更好一些,新加入的消费者进入暂停状态,只能接收旧消息,直到加入之前读取的所有内容都被确认。我们来看看Pulsar新推出的Key_Shared消费模式,整个流程如下:
在Key_Shared类型中,多个消费者可以附加到同一个订阅。消息在消费者之间分发,具有相同密钥或相同排序密钥的消息仅传递给一个消费者。无论消息被重新传递多少次,它都会传递给同一个消费者。当消费者连接或断开连接时,将导致服务消费者更改某些消息键。每条消息需要指定:key或者orderingKey字段,各消费者都是对等的,分配器将相同key的消息分配给同一个消费者。
总结
两者相比,Pulsar的处理方式更好一些,更轻量级。优先保证可用性,新加入的消费者不会立即消费最新消息的,待加入之前的旧消息都确认处理完毕后,才开始正常工作。
网友评论