2025-12-09 Kafka

https://www.bilibili.com/video/BV1TT421y79S?spm_id_from=333.788.videopod.sections&vd_source=ed89f81ec70f5a5933f8a8a3b71dbcc0

在单消息队列场景下,随着生产者和消费者增多,生产者和消费者会出现争抢问题

解决方案:

对消息进行分类,每个分类就是一个 topic,
根据 topic 增加队列的数量
生产者将数据按 topic 投递到不同的队列中
消费者根据需要订阅不同的 topic

单个 topic 中消息过多问题

解决方案:

将单个队列拆分成好几段,每段就是一个 partition 分区
每个消费者负责一个 partition

高扩展性:

所有 partition 在同一台机器上就会导致单机 CPU 和内存过高

解决方案:

将 partition 分散部署到多台机器上
每台机器就代表一个 broker
通过增加机器横向扩展来解决 CPU 和内存过高带来的性能问题

高可用

如果 partition 所在的 broker 挂了, partition 中的数据就会丢失,如何解决?

解决方案:

增加副本,统称为 replicas
副本可以放在不同的 broker 上
其中有一个叫做 leader 剩下的叫做 follower
leader 负责生产者和消费者的读写请求, follower 只负责备份
leader 挂了,则从剩余的 follower 中选举一个 leader

持久化和过期策略

如果所有 borker 都挂了,数据就会丢失

解决方案:

将数据保存到硬盘中,borker 重启后可以从硬盘将数据加载到内存

一直往硬盘写数据,硬盘写满怎么办?

解决方案:

增加保留策略(retention policy)
设置保存在硬盘中的数据最大值,超过后,则删除最旧的数据;
设置硬盘中数据的最长时间,超过删除保存时间最长的数据;

每次新增的消费者只能跟着最新的 offset 接着消费,如何让新增的消费者从某个 offset 开始消费?

offset:消费者的消费进度

解决方案:

引入消费者组(consumer group)
不同消费者组维护自己的消费者进度

如何 检测 broker 的状态,以及如何记录消费者组的消费进度?

解决方案:

引入 zookeeper,
/定时检测每个 broker 的状态,如果挂了,触发故障转移机制
记录每个消费者组的消费进度0

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Kafka高级特性解析(三) 物理存储 日志存储概述 Kafka 消息是以主题为单位进行归类,各个主题之间是彼此独...
    奋斗的蛐蛐阅读 794评论 0 0
  • 参考链接: javaguide https://juejin.cn/post/684490388900361011...
    senzx阅读 613评论 0 0
  • 消息中间件的背景分析 场景分析 前面跟着我看过 zk 的源码,学过并发编程的同学应该知道,我们可以使用阻塞队列+线...
    悠娜的奶爸阅读 381评论 0 2
  • Kafka 官网: Kafka 主要设计目标如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 T...
    灯火gg阅读 885评论 0 2
  • 一、Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Ka...
    笔名辉哥阅读 2,388评论 0 48

友情链接更多精彩内容