consumer 是推还是拉?
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了consumer 是推还是拉?相关的知识,希望对你有一定的参考价值。
Kafka 最初考虑的问题是,customer 应该从brokes 拉取消息还是brokers 将消息推送到consumer,也就是pull 还push。在这方面,Kafka 遵循了一种大部分消息系统共同的传统的设计:producer 将消息推送到broker, consumer 从broker 拉取消息。
一些消息系统比如Scribe 和Apache Flume 采用了push 模式,将消息推送到下游的consumer。这样做有好处也有坏处:由broker 决定消息推送的速率,对于不同消费速率的consumer 就不太好处理了。消息系统都致力于让consumer 以最大的速率最快速的消费消息,但不幸的是, push 模式下, 当broker 推送的速
率远大于consumer 消费的速率时, consumer 恐怕就要崩溃了。最终Kafka 还是选取了传统的pull 模式。
Pull 模式的另外一个好处是consumer 可以自主决定是否批量的从broker 拉取数据。Push 模式必须在不知道下游consumer 消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免consumer 崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull 模式下,consumer 就可以根据自己的消费能力去决定这些策略。
Pull 有个缺点是,如果broker 没有可供消费的消息,将导致consumer 不断在循环中轮询,直到新消息到t 达。为了避免这点,Kafka 有个参数可以让consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发送)。
以上是关于consumer 是推还是拉?的主要内容,如果未能解决你的问题,请参考以下文章