图解Kafka:Kafka架构演化与升级!

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 图解Kafka:Kafka架构演化与升级!

了解了 Kafka 架构就掌握了 Kafka 最核心的知识,Kafka 作为业界最知名、最流行的消息系统和流式处理组件,在面试中和日常工作中经常会见到。那么今天,我们就来聊聊 Kafka 的架构演化与升级,并通过图解的方式让你一目了然。

1.Kafka 初印象

Kafka 最初由 LinkedIn 公司开发,后来成为了 Apache 软件基金会的一个开源项目。它的主要设计目标是提供一个高吞吐量、可持久化、分布式的消息系统。

2.Kafka 基础架构

Kafka 最简单的基础架构如下:

Kafka 主要是由以下 4 部分组成:

  1. Producer(生产者):消息发送方,生产者负责创建消息,然后将其投递到 Kafka(Broker)中。
  2. Consumer(消费者):接收消息方,消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理。
  3. Broker(代理):一个 Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言,我们更习惯使用首字母小写的 broker 来表示服务代理节点。
  4. ZooKeeper:ZooKeeper 是 Kafka(集群)中使用的分布式协调服务,用于维护 Kafka(集群)的状态和元数据信息,例如主题和分区的分配信息、消费者组和消费者偏移量等信息。

    Kafka 2.8.0 之后,Kafka 引入了 KRaft(Kafka Raft)模式,它提供了一种新的内置的共识机制来替代对 Zookeeper 的依赖。此时,Kafka 可以脱离 Zookeeper 单独运行,但需要配置 KRaft 控制器才行,Kafka 默认服务还是要配合 Zookeeper 运行的。

3.不同的消息类型怎么办?

在上述最基础的 Kafka 架构中我们会发现一个问题,那就是如果是不同的消息类型要怎么办?例如以下情况:

此时,我们可以把不同类型的消息存放在一起,但这样就需要给消息添加 type 字段,以区分不同的消息。

但添加了 type 字段之后,后面的维护和扩展又不方便,而且 type 越多,代码中的判断代码就越复杂,想象一下:一个复杂项目的消息类型是有成千上万个分类的,那我们的判断代码也要写成千上万个 if-else 判断不可?这要怎么解决呢?

这时候,我们就需要一个“消息分类机制”,这个机制在 Kafka 里被称之为 Topic(主题),如下图所示:

引入了 Topic 之后,不同的消息就可以发送到不同的 Topic 了,不同业务的生产者和消费者就可以实现相互隔离、互不影响了。

Broker 和 Topic 的关系:一个 Broker 中可以包含多个 Topic

4.如何保证高性能?

4.1 数据分片

想要提升 Kafka 性能就需要水平扩展 Broker 数量,如下图所示:

在 Kafka 中,Topic 是用 Partition(分区)存储的,所以它正确的交互流程如下所示:

这小节核心知识点:

  1. Partition(分区)就是真正存储数据的消息队列
  2. 有了集群和多个 Partition 之后,Kafka 的数据就可以实现分片存储了,性能也得到很大的提升。

    什么是数据分片?

    数据分片存储是一种将大量数据分散存储在多个不同位置或设备上的技术。

在数据量庞大的情况下,为了提高数据的存储效率、访问性能和可扩展性,将数据分割成较小的片段,然后分别存储在不同的节点或存储设备中。

以下是一些数据分片存储的特点和优势:

  1. 提高性能:通过将数据分散存储,可以并行地处理数据请求,从而加快数据的读取和写入速度。例如,在一个分布式数据库中,不同的分片可以同时响应查询,减少了总体的响应时间。
  2. 增强可扩展性:当数据量不断增长时,可以方便地添加更多的分片来扩展存储容量,而无需对整个系统进行大规模的重构。
  3. 避免单点性能瓶颈:数据分片可以使数据的存储和访问负载更加均衡地分布在多个节点上,避免单个节点成为性能瓶颈。

    4.2 消费组

    如果没有消费组,那么一个 Topic 只能被一个消费者消费,性能会很低,如下图所示:

    消费组(Consumer Group)是一个由多个消费者(Consumer)组成的逻辑概念,用于实现对一个主题(Topic)中消息进行并发消费和负载均衡的机制。

    特性分析

    Kafka 消费组特性如下:

  4. 并发执行:将一个主题内的消息分给多个消费者并发处理,提升了消息消费的性能。

  5. 容错性好:如果组内的某个消费者发生故障,Kafka 能够自动地将该消费者负责的分区重新分配给其他健康的消费者,确保消息不会被遗漏。
  6. 支持多种消费模式:通过调整消费者组的配置,可以实现不同的消费模式,如发布订阅模式(一对多)和队列模式(一对一)。在发布订阅模式下,一个消息可以被多个消费者组同时消费,每个消费者组内的消费者则共享该消息;在队列模式下,一个消息只能被一个消费者组内的某个消费者消费。这种灵活性使得Kafka可以适应不同的业务需求和数据处理场景。
  7. 动态扩展:随着业务规模的扩大或缩小,可以动态地增加或减少消费者组的成员。新加入的消费者会自动从已有的副本中拉取数据并开始消费;而离开的消费者会自动感知并停止消费。这种动态的扩展性使得 Kafka 能够随着业务的发展而灵活地扩展处理能力。

    消费组和分区的关系:消费者(数量) <= 分区数

5.如何保证高可用?


Partition 备份节点叫做 Follower 节点,负责数据读写的节点叫做 Leader 节点。

Kafka 分区类型有以下两种:

  1. Leader Partition:主节点,负责数据写入和读取。
  2. Follower Partition:副本节点,用于数据备份和主节点宕机之后的分区选举,保证了 Kafka 服务的高可用。

    小结

    Kafka 架构最终组成如下:

    它们分别是:

  3. 生产者(Producer):负责将消息发送到 Kafka 集群。

  4. 消费组(Consumer Group):用于实现对一个主题(Topic)中消息进行并发消费和负载均衡的机制。
  5. 消费者(Consumer):负责从 Kafka 集群中读取、消费消息。
  6. 代理(Broker):Kafka 服务器(Kafka 服务),负责存储和转发消息。
  7. 主题(Topic):消息的逻辑分类,生产者将消息发送到特定的主题,消费者从特定的主题订阅消息。
  8. 分区(Partition):主题可以被分为多个分区,每个分区是一个有序的、不可变的消息序列。分区可以分布在不同的 broker 上,实现水平扩展。分区分为 Leader 分区,和 Follower 分区。
  9. Zookeeper:用于管理 Broker 集群的元数据,如分区分配、领导者选举、消费者组和消费者偏移量等信息等。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

相关文章
|
26天前
|
存储 调度 C++
16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
大规模数据如何进行语义检索? 当前 SLS 已经支持一站式的语义检索功能,能够用于 RAG、Memory、语义聚类、多模态数据等各种场景的应用。本文分享了 SLS 在语义检索功能上,对模型推理和部署、构建流水线等流程的优化,最终带给用户更高性能和更低成本的针对大规模数据的语义索引功能。
190 15
|
1月前
|
弹性计算 前端开发 应用服务中间件
解决方案体验 | 基于阿里云高效实现前后端分离架构升级
阿里云ECS助力企业快速实现前后端分离架构升级,通过Nginx+ALB实现高效请求分发与负载均衡,支持前后端独立部署、弹性扩展。结合ROS一键部署、多可用区高可用设计,显著降低改造门槛,提升系统稳定性与开发效率,助力数字化转型。
|
29天前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
3月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
223 7
|
5月前
|
存储 运维 Java
官宣 | Fluss 0.7 发布公告:稳定性与架构升级
Fluss 0.7 版本正式发布!历经 3 个月开发,完成 250+ 次代码提交,聚焦稳定性、架构升级、性能优化与安全性。新增湖流一体弹性无状态服务、流式分区裁剪功能,大幅提升系统可靠性和查询效率。同时推出 Fluss Java Client 和 DataStream Connector,支持企业级安全认证与鉴权机制。未来将在 Apache 孵化器中继续迭代,探索多模态数据场景,欢迎开发者加入共建!
527 8
官宣 | Fluss 0.7 发布公告:稳定性与架构升级
|
4月前
|
人工智能 安全 Cloud Native
Nacos 3.0 架构升级,AI 时代更安全的 Registry
随着Nacos3.0的发布,定位由“更易于构建云原生应用的动态服务发现、配置管理和服务管理平台”升级至“ 一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台 ”。
|
7月前
|
消息中间件 大数据 关系型数据库
RocketMQ实战—3.基于RocketMQ升级订单系统架构
本文主要介绍了基于MQ实现订单系统核心流程的异步化改造、基于MQ实现订单系统和第三方系统的解耦、基于MQ实现将订单数据同步给大数据团队、秒杀系统的技术难点以及秒杀商详页的架构设计和基于MQ实现秒杀系统的异步化架构。
527 64
RocketMQ实战—3.基于RocketMQ升级订单系统架构
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
34_GPT系列:从1到5的架构升级_深度解析
大型语言模型(LLM)的发展历程中,OpenAI的GPT系列无疑扮演着至关重要的角色。自2018年GPT-1问世以来,每一代GPT模型都在架构设计、预训练策略和性能表现上实现了质的飞跃。本专题将深入剖析GPT系列从1.17亿参数到能够处理百万级token上下文的技术演进,特别关注2025年8月8日发布的GPT-5如何引领大模型技术迈向通用人工智能(AGI)的重要一步。
|
7月前
|
资源调度 运维 容灾
中国广电云,全国首个多Region2.0架构升级正式完成并亮相2025CCBN!
2025年4月25日,中国国际广播电视信息网络展览会(CCBN)在北京圆满落幕,在中国广电集团的展台上,阿里云支持建设的“国家文化专网基础设施——中国广电云”接待国家广电总局领导及广电传媒行业专家的参观指导,安全自主、文化特色、全国覆盖、产业智能等中国广电云的鲜明特点给莅临展位的行业同仁留下了深刻的印象。
354 4
|
2月前
|
存储 JSON 数据处理
ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
随着越来越多企业在实际业务中使用 ClkLog,数据规模和分析需求也不断提升,部分用户日活已经超过10万,为了顺应这一趋势,ClkLog 秉持 “开放透明、持续演进”的理念,推出了迄今为止最重要的一次性能优化升级。新版本在大规模数据处理与复杂查询场景中,性能表现实现了跨越式提升。经过多轮研发与严格测试,新版本现已正式上线:在原有付费版 1.0 的基础上架构全面升级,并同步发布全新的 2.0 版本。为用户带来更强的性能与更广的适用场景。