参考答案
Kafka 遵循了一种大部分消息系统共同的传统的设计:producer 将消息推送到 broker,consumer 从 broker 拉取消息。
有一些消息系统,例如Scribe 和 Apache Flume 采用了 push 模式,将消息推送到下游的consumer。
这样操作有利有弊:
- 由 broker 决定消息推送的速率,对不同消费速率的consumer 不太好处理。
- 消息系统都致力于让 consumer 以最大的速率最快速的消费消息。但是,在push 模式下,当 broker 推送的速率远大于 consumer 消费的速率时,consumer 可能会崩溃。
- Push模式,必须在不知道下游 consumer 消费能力和消费策略的情况下,决定是立即推送每条消息,还是缓存之后批量推送。如果为了避免 consumer 崩溃而采用较低的推送速率,可能导致一次只推送较少的消息,从而造成浪费。
Kafka 最终选择了传统的 pull 模式:
- Pull 模式 ,consumer 可以自主决定是否批量的从 broker 拉取数据,也可以根据自己的消费能力去决定这些策略。
- Pull 模式,其缺点是如果 broker 没有可供消费的消息,将导致 consumer 不断在循环中轮询,直到新消息到达。为了避免这个问题,Kafka 有个参数可以让 consumer 阻塞知道新消息到达。
以上,是 Kafka 面试题【Kafka 消息是采用 Pull 模式,还是 Push 模式】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—