kafka中的push和pull设计
一、生产者到broker
-
生产者push消息到broker,采用推模式,生产者将消息推送给消费者。
-
push模式的目标是尽可能以最快速度传递消息。生产者采用pull的话,不是很适合有成千上万的生产者的情况,假如生产者写入日志,broker从日志中pull,当生产者非常多,成千上万的磁盘系统并不是时时可靠的,那样大大增加了系统的复杂性。
二、broker到消费者
-
broker到消费者采用pull,拉模式。消费者主动到服务器拉取消息。
-
push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成消费者来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。
-
另外它有助于消费者合理的批处理消息。不同的消费者消费速率,外部硬件环境都不一样,交由消费者自己决定以何种频率拉取消息更合适。
-
基于pull模式不足之处在于,如果broker没有数据,消费者会轮询,忙等待数据直到数据到达,为了避免这种情况,我们允许消费者在pull请求时候使用“long poll”进行阻塞,直到数据到达 。