Kafka中的长轮询
Kafka在拉请求中有参数,可以使得消费者请求在 “长轮询”中阻塞等待。
简单的说就是消费者去Broker拉消息,定义了一个超时时间,也就是说消费者去请求消息,如果有的话马上返回消息,如果没有的话消费者等着直到超时,然后再次发起拉消息请求。
并且Broker也得配合,如果消费者请求过来,有消息肯定马上返回,没有消息那就建立一个延迟操作,等条件满足了再返回
总结
可以看到Kafka都是采用“长轮询”的机制,具体的做法都是通过消费者等待消息,当有消息的时候Broker会直接返回消息,如果没有消息都会采取延迟处理的策略,并且为了保证消息的及时性,在对应队列或者分区有新消息到来的时候都会提醒消息来了,及时返回消息。
一句话说就是消费者和Broker相互配合,拉取消息请求不满足条件的时候hold住,避免了多次频繁的拉取动作,当消息一到就提醒返回。