customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是 pull还pusho在这方面,Kafka遵循了一种大部分消息系统的传统设计: producer将消息推送到broker, consumer从broker拉取消息。
push模式,将消息推送到下游的consumero这样做有好处也有坏处:由broker 决定消息推送的速率,对于不同消费速率的consumer就不太好处理了。消息系统 都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式 下,当broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩 溃了。最终Kafka还是选取了传■统的pull模式。
Pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数 据。Push模式必须在不知道下遊consumer消费能力和消费策略的情况下决定是 立即推送每条消息还是缓存之后批量推送。如果为了避免consumer崩溃而釆用较 低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull模式下, consumer就可以根据自己的消费能力去决定这些策略。
Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环 中轮询,直到新消息到t达。为了避免这点,Kafka有个参数可以让consumer阻 塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以 批量发送)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。