Apache kafka 为什么卡夫卡是拉式的而不是推式的?

Apache kafka 为什么卡夫卡是拉式的而不是推式的?,apache-kafka,Apache Kafka,为什么卡夫卡是拉式的而不是推式的?我同意卡夫卡提供了高吞吐量,正如我所经历的那样,但我不认为如果卡夫卡是基于推送的,它的吞吐量会下降。关于推送会如何降低性能的任何想法?请参阅卡夫卡文档,其中详细介绍了特定的设计决策: 有利于拉动的要点有: Pull更适合处理多样化的消费者(没有经纪人决定所有人的数据传输速率) 消费者可以更有效地控制个人消费率 更简单、更优化的批处理实现 拉式系统(消费者在没有可用数据的情况下轮询数据)的缺点通过“长轮询”等待模式在一定程度上得到缓解,直到数据到达。可伸缩性是我们

为什么卡夫卡是拉式的而不是推式的?我同意卡夫卡提供了高吞吐量,正如我所经历的那样,但我不认为如果卡夫卡是基于推送的,它的吞吐量会下降。关于推送会如何降低性能的任何想法?

请参阅卡夫卡文档,其中详细介绍了特定的设计决策:

有利于拉动的要点有:

  • Pull更适合处理多样化的消费者(没有经纪人决定所有人的数据传输速率)
  • 消费者可以更有效地控制个人消费率
  • 更简单、更优化的批处理实现

  • 拉式系统(消费者在没有可用数据的情况下轮询数据)的缺点通过“长轮询”等待模式在一定程度上得到缓解,直到数据到达。

    可伸缩性是我们设计此类系统(拉式与推式)的主要驱动因素。卡夫卡的可扩展性非常强。卡夫卡的一个关键好处是,在不影响性能和不停机的情况下,很容易添加大量消费者

    卡夫卡可以每秒处理来自制作人的超过100k的事件因为卡夫卡消费者从主题中提取数据,不同的消费者可以以不同的速度消费消息。卡夫卡还支持不同的消费模式。您可以让一个使用者实时处理消息,另一个使用者以批处理模式处理消息

    另一个原因可能是卡夫卡不仅仅是为Hadoop这样的单一消费者设计的。不同的消费者可以有不同的需求和能力


    基于Pull的系统存在一些缺陷,例如由于定期轮询而造成的资源浪费。卡夫卡支持“长轮询”等待模式,直到实际数据通过才能缓解此缺点。

    其他人根据卡夫卡的文档提供了答案,但有时产品文档应作为绝对技术参考。例如:

    • 许多基于推送的消息传递系统都支持实时消费 不同的速率,通常通过会话管理原语。 您可以在以下情况下建立/恢复活动的应用程序层会话: 想要使用和挂起会话(例如,不 响应小于keepalive窗口且大于正在运行的窗口…或使用显式消息)如果需要 停止/暂停。例如,MQTT和AMQP都提供此功能 (就MQTT而言,从90年代末开始)。考虑到没有任何行动 需要暂停消费(根据定义),并且需要更少的流量 在稳定状态下需要(无要求),很难 看看卡夫卡的拉式模型如何更有效

    • 推送消息与拉送消息相比的一个关键优势是 没有请求流量可以按潜在的 活跃话题增加。如果你有一百万个潜在的活跃的 主题,您必须对所有这些主题发出查询。这 关注在规模上变得特别重要
    • 拉式消息传递与推式消息传递的关键优势是可重放性。这在很大程度上影响了下游系统是否能够提供处理方面的保证(例如,在这样做之前,它们可能会失败,必须重新启动,或者无法以可恢复的方式写入消息)
    • 拉式消息传递与推式消息传递的另一个关键优势是缓冲区分配。消费进程可以显式地请求预分配缓冲区中所能容纳的数据,而不必一次又一次地分配缓冲区。这弥补了查询扩展带来的goodput损失和推送消息损失(但不多)。但是,如果您的消息大小变化很大(例如,几KB->几百MB),那么这里的影响是可以测量的
    • 认为拉式消息传递比推式消息传递具有结构性可伸缩性优势是错误的。分区通常用于在消息传递应用程序中提供可扩展性,而与消费模型无关。在有线本地集群上,推送消息系统的运行速度超过3亿毫秒/秒……125K毫秒/秒甚至不足以购买展会入场券。事实上,从定义上讲,拉式消息传递的性能不如卡夫卡,而像卡夫卡这样的系统通常会使用更多的硬件来达到相同的性能水平。上面提到的好处往往使它值得付出代价。我不知道有人在高频交易中使用卡夫卡进行信息传递,例如,在高频交易中,微秒很重要

    值得注意的是,各种推拉式消息传递系统是在20世纪90年代末开发的,作为优化goodput的一种方式。结果从来都不是惊人的,系统复杂性和其他因素往往超过这种优化。我相信这是Jay关于实际数据中心网络的实际性能的观点,更不用说开放式互联网了

    你把它完全倒过来了。从文档中可以看出:“然而,基于推送的系统很难处理不同的消费者……”哦,这是一个打字错误,我应该更加小心,。更正了它,非常感谢您的通知。拉式系统的另一个缺点是延迟会更大,因为在数据显示的轮询请求和正在等待拉式的轮询请求之间会出现暂停。只是好奇而已。第一点和第二点不一样吗?这就是拉动的好处,不同的消费者可能会有不同的消费率?不是以英语为母语的人,因此,我只是混淆了第1点和第2点,以及为什么它们是分开的,而不是在一个点/句子中?了解基于推送的优势是很有趣的。卡夫卡还支持在我看来不是基于拉的发布子模型。@YugSingh OP特别指的是主题消费者负责的事实获取(拉取)消息;而不是br