Kafka的架构解析

ops/2025/2/11 14:34:51/

目录

  • 1 背景
  • 2 kafka架构来源
    • 2.1 增加消息队列
    • 2.2 高性能
    • 2.3 高可用
    • 2.4 持久化和过期策略
    • 2.5 Consumer Group
    • 2.6 Zookeeper
  • 3 Kafka架构
  • 4 Kafka的应用场景

1 背景

在这里插入图片描述

场景:
A服务每秒发送200个消息
B服务每秒处理100个消息

问题:
B服务会被压垮,那如何保证B能正常处理所有A的消息

方案:
增加中间层处理,该中间层可以是消息队列Kafka
在这里插入图片描述

kafka_18">2 kafka架构来源

2.1 增加消息队列

基于上面的背景,我们可以在可以在B服务的内存中加一个队列,那什么是消息队列呢?
在这里插入图片描述
如上图的队列其实就是个链表,链表的每个节点就是一个消息,每个节点也有个序号叫做offset
在这里插入图片描述
B服务消费消息队列的消息,更新offset,如果处理的不及时,消息就会堆积在队列里,如果B服务重启,消息就都丢失了!将消息队列从B中挪出来作为一个单独的进程,即单独的服务,这样就互不影响。这样就有了简陋的消息队列。
在这里插入图片描述

2.2 高性能

如果B服务消费情况较差,可以增加消费者,增大消息队列的消费速度,与此同时可以增加生产者的数量,提高消息的吞吐量
在这里插入图片描述
当生产者和消费者的数量增多后会争抢同一个消息队列,抢不到的一方就要等待,比较浪费时间!
在这里插入图片描述
这时候就要增加消息队列了!每个消息队列就是一个topic
生产者按照topic将数据投递到不同的消息队列中,消费者根据topic订阅不同的topic
但是单个topic的消息可能过多
在这里插入图片描述

可以将单个队列拆分好几段,每一段就是一个partition,每个消费者消费一个partition,
随着partition增多会影响单机性能,导致CPU过高,影响整体系统性能。
在这里插入图片描述可以增加节点去缓解CPU的压力

2.3 高可用

在这里插入图片描述

如果partition所在节点故障会导致消息丢失,那就谈不上高可用了。此时我们就可以给partition增加副本,叫做ReplicaSet。
在这里插入图片描述
leader 负责应付生产者和消费者的请求,followers只管同步leader 的数据
在这里插入图片描述
把leader 和follower 分别部署在两个主机上,当其中一台挂掉,也不会影响另外一台的工作。如果主节点挂了还能从follower 中选出新的leader

2.4 持久化和过期策略

在这里插入图片描述
如果一个partition的主文件及副本文件的机器都宕机了,那么数据就都丢了
在这里插入图片描述
所以我们的数据不应该放在内存里,应该放在磁盘上,即使服务挂了,重启服务后也可以从磁盘中读取数据

在这里插入图片描述

磁盘容量有限,日积月累,数据量极大,此时就有了保留策略(retention policy)

2.5 Consumer Group

在这里插入图片描述
新增消费者的时候只能根据最新的offset消费,如果想让新增的消费者从某个offset开始消费,如何处理?
在这里插入图片描述

于是就有了消费者组的概念,不同消费者组维护自己的消费进度

2.6 Zookeeper

在这里插入图片描述

组件过多,每个组件都有自己的数据和状态,所以需要有个组件来统一维护这些状态信息,于是我们有了Zookeeper,它会定期和broker通讯,获取Kafka状态,以此判断,是不是有broker挂了,某些消费组消费到哪里了

3 Kafka架构

在这里插入图片描述

4 Kafka的应用场景

削峰填谷:秒杀活动、大数据和日志异构同步等


http://www.ppmy.cn/ops/157545.html

相关文章

微信小程序如何使用decimal计算金额

第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…

用 Python 给 Excel 表格截图(20250207)

我搜索了网络上的方案,感觉把 Excel 表格转换为 HTML 再用 platwright 截图是比较顺畅的路径,因为有顺畅的工具链。如果使用的是 Windows 系统则不需要阅读此文,因为 win32com 库更方便。这篇文章中 Excel 转 HTML 的方案,主要弥补…

8、Python 面试题解析:实例方法、静态方法和类方法的区别

Python 实例方法、静态方法和类方法详解 在 Python 中,实例方法、静态方法和类方法是三种不同类型的方法,它们的主要区别在于调用方式、参数传递和使用场景。以下从定义、语法、使用场景等方面全面解析,并附代码示例。 一、核心区别 方法类…

信创领域的PostgreSQL管理员认证

信创产业,全称为信息技术应用创新产业,是中国为应对国际技术竞争、保障信息安全、实现科技自立而重点发展的战略性新兴产业。其核心目标是通过自主研发和生态构建,逐步替代国外信息技术产品,形成自主可控的国产化信息技术体系。 发…

计算机毕业设计SpringBoot+Vue.js遗传算法自动排课系统(源码+文档+运行视频+讲解视频)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

深入剖析 JVM 垃圾收集器之 CMS 和 G1

在 Java 虚拟机(JVM)的世界里,垃圾收集器是一个至关重要的组件,它负责自动回收不再被使用的内存空间,保证应用程序的稳定运行。本文将着重介绍两种具有代表性的垃圾收集器:CMS(Concurrent Mark …

【含文档+PPT+源码】基于微信小程序的校园志愿者管理系统的设计与实现

项目介绍 本课程演示的是一款 基于微信小程序的校园志愿者管理系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…

在线SQL转JSON-GO在线工具集

此工具提供多数据库 SQL 自动转换为 JSON 格式的工具,支持 MySQL、PostgreSQL、Oracle 等主流数据库。此工具将 SQL 查询结果转换为结构化的 JSON 数据,方便 JSON 处理和数据交换,优化数据管理和集成过程,提升工作效率。 gotool