当前位置: 首页 > news >正文

kafka概念之间关系梳理

核心数据流关系:生产者 -> 主题 -> 消费者

这是 Kafka 最核心、最顶层的关系,描述了数据的基本流向:

  • 生产者 (Producer) 是数据的来源,它负责创建消息并将其发送到 Kafka。
  • 主题 (Topic) 是消息的目的地。生产者总是将消息发布到特定的主题。它是一个逻辑上的分类,比如“订单主题”或“日志主题”。
  • 消费者 (Consumer) 是数据的最终使用者,它订阅一个或多个主题,并从 Kafka 中拉取(Pull)消息进行处理。

image.png

图解说明:

  • 生产者 (Producers): 位于最左侧,是数据的起点。它们将消息发布到 Kafka 集群。
  • Kafka 集群 (Kafka Cluster): 位于中间,由多个 代理 (Brokers) 组成。这是 Kafka 的核心,负责接收、存储和管理消息。图中展示了集群内的逻辑概念——主题 (Topics)
  • 消费者组 (Consumer Groups):- 位于最右侧,是数据的终点。组内的 消费者 (Consumers) 订阅并处理来自主题的消息。
  • Zookeeper: (图中未 explicit 显示, 但在实际架构中非常重要) 负责管理和协调整个 Kafka 集群,比如选举 Leader、存储集群元数据等。

逻辑与物理的映射关系:主题、分区与代理

一个逻辑上的“主题”是如何在物理上存储和管理的呢?这就涉及到了分区和代理:

  • 主题 (Topic) 与 分区 (Partition):
    • 一个主题可以被分成一个或多个分区。分区是物理上的概念,是数据存储的基本单元。
    • 一个主题的所有消息数据被分散存储在它的所有分区中。比如一个有3个分区的主题,它的数据就被分成了3份。
    • 关键点:分区是 Kafka 实现高并发和水平扩展的核心。多个消费者可以同时消费不同分区的消息,从而极大地提高了处理能力。
  • 分区 (Partition) 与 代理 (Broker):
    • 代理是一台 Kafka 服务器。一个 Kafka 集群由多个代理组成。
    • 每个分区都存储在某一个代理上。通过将一个主题的多个分区分布到不同的代理上,Kafka 实现了负载均衡和分布式存储。

分区内部的结构:分区、文件段与偏移量

我们再深入到单个分区的内部来看数据是如何组织的:

  • 分区 (Partition) 与 文件段 (Segment File):
    • 一个分区并不是一个单一的大文件,而是由多个文件段 (Segment File) 组成的。
    • 当一个文件段写满后(达到一定大小或时间),Kafka 会创建一个新的文件段来写入后续消息。这种设计便于日志的清理和管理。
  • 消息与偏移量 (Offset):
    • 分区内的每条消息都有一个唯一的、递增的序号,称为偏移量 (Offset)。
    • 偏移量保证了单个分区内的消息是严格有序的。消费者通过记录自己消费到的偏移量来跟踪消费进度。

高可用性关系:分区、副本与 ISR

为了防止代理宕机导致数据丢失,Kafka 设计了副本机制:

  • 分区 (Partition) 与 副本 (Replica):

    • 每个分区都可以配置多个副本,这些副本存储着完全相同的数据。
    • 副本分为两种角色:
      • Leader 副本:每个分区有且仅有一个 Leader。所有生产者和消费者的读写请求都由 Leader 处理。
      • Follower 副本:被动地从 Leader 处同步数据。当 Leader 宕机时,会从 Follower 中选举一个新的 Leader。
    • 副本被分布在不同的代理上,这样即使某台代理挂了,其他代理上的副本依然可用,保证了数据不丢失和服务的高可用性。
  • 副本与 ISR (In-Sync Replicas):

    • ISR 是一个动态的、与 Leader 副本保持同步的副本集合(包括 Leader 自己)。
    • 只有 ISR 列表中的 Follower 才有资格被选举为新的 Leader,这确保了新选出的 Leader 拥有最完整的数据。
      image.png

图解说明:

  • 唯一写入点: 生产者和消费者的所有请求(读和写)都只发送到 Leader 副本 (位于 Broker 1)。这是 Kafka 高效读写的保证。
  • 数据同步: Leader 副本负责将数据变更同步给所有的 Follower 副本 (位于 Broker 2 和 Broker 3)。图中用虚线表示了数据的复制流向。
  • 故障转移 (Failover): 如果 Broker 1 宕机,Kafka 控制器 (由 Zookeeper 协调) 会从 Broker 2 或 Broker 3 的 Follower 副本中选举出一个新的 Leader,从而保证服务的持续可用性

消费模型关系:消费者、消费者组与分区

Kafka 如何让多个消费者协同工作呢?这就需要消费者组:

  • 消费者 (Consumer) 与 消费者组 (Consumer Group):

    • 多个消费者可以组成一个消费者组,它们共同消费一个或多个主题。
    • 核心规则:一个主题的同一个分区,在任意时刻只能被同一个消费者组内的一个消费者消费。
    • 这个机制保证了组内的每个消费者都能处理一部分独立的数据,从而实现了消费端的负载均衡。
  • 消费者组 (Consumer Group) 与 分区 (Partition):
    消费者组中消费者的数量通常不应多于它所订阅主题的分区总数。如果消费者比分区多,那么就会有消费者闲置,因为没有分区可供它消费。

image.png

图解说明:

  • 组内负载均衡 (Consumer Group 1):

    • 这个消费者组有 3 个消费者来消费一个有 4 个分区的主题。
    • Kafka 将分区分配给了组内的消费者。在这个例子中,消费者 C1 负责消费分区 P0 和 P1,C2 负责消费 P2,C3 负责消费 P3。
    • 关键规则: 组内的每个分区只能被一个消费者处理。这保证了消息不会被重复消费,并实现了负载均衡。
  • 广播消费 (Consumer Group 2): 广播消费 (消费者组 2):

    • 这是一个全新的消费者组,它也订阅了同一个 “Topic A”。
    • Kafka 会为这个新组独立地进行分区分配。C4 消费 P0 和 P1,C5 消费 P2 和 P3。
    • 关键特性: 不同的消费者组之间互不影响,它们会各自收到主题中的全量数据。这就实现了发布-订阅 (Publish-Subscribe) 模型,一条消息可以被多个不同的应用(由不同的消费者组代表)处理。

总结关系图

我们可以用一个层次关系来总结:

  1. 集群 (Cluster) 由多个 代理 (Broker) 组成。
  2. 数据被组织成逻辑上的 主题 (Topic)。
  3. 一个 主题 (Topic) 被分成多个物理上的 分区 (Partition),这些分区分布在不同的 代理 (Broker) 上。
  4. 为了高可用,每个 分区 (Partition) 都有多个 副本 (Replica) (一个 Leader, 多个 Follower),它们也分布在不同的 代理 (Broker) 上。
  5. 生产者 (Producer) 将消息写入特定 主题 的 Leader 分区 中。
  6. 消费者 (Consumer) 组成 消费者组 (Consumer Group),从 Leader 分区 中拉取消息。一个分区只能被组内的一个消费者消费。
  7. 分区内的消息通过 偏移量 (Offset) 标识,并存储在 文件段 (Segment File) 中。
http://www.dtcms.com/a/364360.html

相关文章:

  • mac idea 配置了Gitlab的远程地址,但是每次pull 或者push 都要输入密码,怎么办
  • 项目中常用的git命令
  • python基础案例-数据可视化
  • Streamlit 数据看板模板:非前端选手快速搭建 Python 数据可视化交互看板的实用工具
  • 【Linux】为什么死循环卡不死 Linux?3 个核心逻辑看懂进程优先级与 CPU 调度密码
  • Langchain4j 整合MongoDB 实现会话持久化存储详解
  • 电表连网不用跑现场!耐达讯自动化RS485转Profinet网关 远程配置+技术支持,真能做到!
  • 单元测试数据库回滚问题
  • 如何在FastAPI中巧妙隔离依赖项,让单元测试不再头疼?
  • 10 分钟掌握 Selenium 8 大元素定位法:从踩坑到精通
  • Python分布式任务队列:万级节点集群的弹性调度实践
  • 深入剖析Spring Boot中Spring MVC的请求处理流程
  • 电脑接入企业中的网线,为啥网卡上面显示AD域名
  • 智能电视小米电视浏览器兼容性踩坑电视黑屏或者电视白屏,Vue项目从Axios到Fetch的避坑指南
  • 【Pytest】解决Pytest中Teardown钩子的TypeError:实例方法与类方法的调用差异
  • 腾讯Hunyuan-MT-7B翻译模型完全指南:2025年开源AI翻译的新标杆
  • 线性代数第一讲—向量组
  • 强化学习中的模仿学习是什么?
  • HR不会告诉你的秘密:学术简历中,这个内容会被秒标“高光“
  • 亚马逊云代理商:配置安全组规则步骤
  • 日志分析与安全数据上传脚本
  • 迅为RK3568开发板体验OpenHarmony—烧写镜像-安装驱动
  • 技术框架之脚手架实现
  • Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案
  • HTML `<datalist>`:原生下拉搜索框,无需 JS 也能实现联想功能
  • kvm 虚拟机如何安装 qemu-guest-agent
  • C++ 面试高频考点 力扣 162. 寻找峰值 二分查找 题解 每日一题
  • C# Activator.GetObject 原理与示例:理解.NET Remoting远程调用
  • 前端学习 10-2 :验证中的SV
  • 时序数据库选型指南:为何Apache IoTDB成为工业物联网首选