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不断在循环中轮询,直到新消息到达。

相关推荐
Elastic 中国社区官方博客9 小时前
使用 Elastic 中的 OpenTelemetry 为 Nginx 实现端到端分布式追踪的实用指南
大数据·运维·分布式·elasticsearch·搜索引擎·信息可视化·全文检索
win x9 小时前
Redis 分布式锁
数据库·redis·分布式
进阶的小名13 小时前
[超轻量级延时队列(MQ)] Redis 不只是缓存:我用 Redis Stream 实现了一个延时MQ(自定义注解方式)
java·数据库·spring boot·redis·缓存·消息队列·个人开发
a努力。14 小时前
字节跳动Java面试被问:一致性哈希的虚拟节点和数据迁移
java·开发语言·分布式·算法·缓存·面试·哈希算法
qq_3181215914 小时前
互联网大厂Java面试故事:支付与金融服务微服务架构、消息队列与AI风控全流程解析
java·spring boot·redis·微服务·kafka·支付系统·金融服务
安科瑞小许15 小时前
分布式光伏车棚的智慧化运维:从数据采集到AI赋能
运维·人工智能·分布式·能源·光伏
论迹17 小时前
【RabbitMQ】-- 七种工作模式
分布式·rabbitmq
论迹18 小时前
【RabbitMQ】-- 高级特性
数据库·redis·分布式·消息队列·rabbitmq
萧曵 丶19 小时前
Kafka 全面解析
分布式·kafka
Lansonli20 小时前
大数据Spark(七十六):Action行动算子reduce和take、takeSample使用案例
大数据·分布式·spark