【发布时间】:2017-01-27 22:30:46
【问题描述】:
为什么 Kafka 是基于拉的而不是基于推的?我同意 Kafka 提供了高吞吐量,正如我所经历的那样,但我看不出 Kafka 的吞吐量会如何下降,如果它是基于推送的。关于基于推送如何降低性能的任何想法?
【问题讨论】:
标签: apache-kafka
为什么 Kafka 是基于拉的而不是基于推的?我同意 Kafka 提供了高吞吐量,正如我所经历的那样,但我看不出 Kafka 的吞吐量会如何下降,如果它是基于推送的。关于基于推送如何降低性能的任何想法?
【问题讨论】:
标签: apache-kafka
在我们设计此类系统(拉式与推式)时,可扩展性是主要驱动因素。卡夫卡是非常可扩展的。 Kafka 的主要优势之一是可以非常轻松地添加大量消费者,而不会影响性能和停机时间。
Kafka 可以以每秒 100k+ 的速率处理来自生产者的事件。 因为Kafka消费者从主题中拉取数据,所以不同消费者可以以不同的速度消费消息。 Kafka还支持不同的消费模型。您可以让一个消费者实时处理消息,而另一个消费者以批处理模式处理消息。
另一个原因可能是 Kafka 不仅是为像 Hadoop 这样的单一消费者而设计的。不同的消费者可能有不同的需求和能力。
基于拉取的系统存在一些缺陷,例如由于定期轮询而浪费资源。 Kafka 支持“长轮询”等待模式,直到真实数据通过以缓解此缺点。
【讨论】:
请参阅详细说明特定设计决策的 Kafka 文档:Push vs pull
支持拉取的要点是:
基于拉取的系统(消费者在没有可用数据时轮询数据)的缺点通过“长轮询”等待模式直到数据到达而有所缓解。
【讨论】:
其他人已经根据 Kafka 的文档提供了答案,但有时产品文档应该作为绝对的技术参考而有所保留。例如:
有趣的是,在 1990 年代后期开发了各种推拉式消息传递系统,作为优化吞吐量的一种方式。结果从未令人震惊,系统复杂性和其他因素通常超过这种优化。我相信这是 Jay 关于真实数据中心网络的实际性能的总体观点,更不用说开放互联网之类的东西了。
【讨论】: