[1] 点对点消息传递模式消息从生产者传输到Queue使用的是推模型,发布订阅消息传递模式消息从生产者传输到Topic也使用推模型。通常所说的消息队列使用的是推模型还是拉模型,指的是消息从Queue/Topic传输到消费者使用的推模式还是拉模型。点对点消息传递模式消息从Queue传输消费者到使用的是推模型,而消息从Topic传输到消费者使用的是拉模型。
[2] push模型很难适应消费速率不同的消费者,如果push的速度太快,容易造成消费者拒绝服务或网络拥塞;如果push的速度太慢,容易造成消费者性能浪费。但是采用pull模型也有一个缺点,就是当Broker没有消息时,消费者会陷入不断地轮询中,为了避免这点,kafka有个参数可以让消费者阻塞知道是否有新消息到达(即长轮询的方式)。
[3] 长轮询
- Kafka 在拉请求中有参数,可以使得消费者请求在 “长轮询” 中阻塞等待。
- 简单的说就是消费者去 Broker 拉消息,定义了一个超时时间,也就是说消费者去请求消息,如果有的话马上返回消息,如果没有的话消费者等着直到超时,然后再次发起拉消息请求。
- 并且 Broker 也得配合,如果消费者请求过来,有消息肯定马上返回,没有消息那就建立一个延迟操作,等条件满足了再返回。