95、Kafka是pull?push?优劣势分析

Kafka是pull?push?优劣势分析

一、pull模式

  • 根据consumer的消费能力进行数据拉取,可以控制速率
  • 可以批量拉取、也可以单条拉取
  • 可以设置不同的提交方式,实现不同的传输语义

缺点:

如果kafka没有数据,会导致consumer空循环,消耗资源

解决:

通过参数设置,consumer拉取数据为空或者没有达到一定数量时进行阻塞

二、push模式

不会导致consumer循环等待

缺点:

速率固定、忽略了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不断在循环中轮询,直到新消息到达。

相关推荐
OxYGC5 小时前
[RabbitMQ] 最新版本深度解析:4.0+ 新特性、性能飞跃与生产实践(2025 年更新)
分布式·rabbitmq
武子康6 小时前
Java-154 深入浅出 MongoDB 用Java访问 MongoDB 数据库 从环境搭建到CRUD完整示例
java·数据库·分布式·sql·mongodb·性能优化·nosql
Q飞了11 小时前
分布式存储Ceph与OpenStack、RAID的关系
分布式·ceph·openstack
回家路上绕了弯11 小时前
深入浅出:如何设计一个可靠的分布式 ID 生成器
分布式·后端
阿什么名字不会重复呢13 小时前
Hadoop报错 Couldn‘t find datanode to read file from. Forbidden
大数据·hadoop·分布式
在未来等你16 小时前
Kafka面试精讲 Day 25:Kafka与大数据生态集成
大数据·分布式·面试·kafka·消息队列
武子康17 小时前
大数据-134 ClickHouse 单机+集群节点落地手册 | 安装配置 | systemd 管理 / config.d
大数据·分布式·后端
王嘉俊92519 小时前
HarmonyOS 分布式与 AI 集成:构建智能协同应用的进阶实践
人工智能·分布式·harmonyos
The 旺20 小时前
【案例实战】HarmonyOS分布式购物车:多设备无缝协同的电商体验
分布式·wpf·harmonyos