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

Kafka 消费模型

文章目录

    • 1. 一个消费者组中只有 1 个消费者
    • 2. 一个消费者组中有 2 个消费者
    • 3. 消费者数量 > 分区数量
    • 4. 多个消费者读取同一个分区
    • 5. 消费者放入消费者组
        • 5.1 何时放入同一个消费者组
        • 5.2 何时放入不同的消费者组

1. 一个消费者组中只有 1 个消费者

假设我们有一个 TopicT1,它包含 4 个分区(partition),并且有 1 个消费者组(consumer group),这个消费者组中只有 1 个消费者(consumer)。此时,唯一的消费者订阅了 TopicT1,会被分配到 所有的 4 个分区,负责读取这些分区中的全部消息。这个场景可以用下图表示:
在这里插入图片描述

2. 一个消费者组中有 2 个消费者

下面扩展一下上面的场景,同样是 TopicT1,但同一个消费者组中有 2 个消费者。在这种情况下,Kafka 会自动将 不同的分区分配给不同的消费者。例如:

  • Consumer1 被分配读取分区 02
  • Consumer2 被分配读取分区 13

在这里插入图片描述

:Kafka 如何保证在同一个消费者组内,一条消息不会被多个消费者重复消费?
:在同一个消费者组内,Kafka 会自动将 每个分区分配给 唯一一个消费者,确保一个分区只会被一个消费者读取。由于同一个 Topic 的不同分区中存储的是 不同的消息序列,因此两个消费者之间 不会读取到相同的消息,从而避免了重复消费。

3. 消费者数量 > 分区数量

如果消费者组中的消费者数量 多于 Topic 的分区数量,会发生什么呢?假设 TopicT1 依然有 4 个分区,但此时消费者组中有 5 个消费者,那么:

  • 4 个消费者会各自被分配到一个分区;
  • 多余的消费者(例如 Consumer5)会处于空闲状态,因为没有多余的分区可以分配给它。
    在这里插入图片描述

4. 多个消费者读取同一个分区

对于 多个消费者同时读取同一个分区的需求,不能通过同一个消费者组实现,因为 Kafka 的原则是:同一个分区在同一个消费者组中只能被一个消费者消费。

解决方案是:

  • 将这些消费者 放到不同的消费者组中
  • 然后让这些消费者组都 订阅同一个 Topic

例如:

  • ConsumerGroup1 中的 Consumer1 会读取 TopicT1Partition0
  • ConsumerGroup2 中的 Consumer1 也会读取 TopicT1Partition0
    这样,两个不同消费者组中的消费者可以同时读取同一个分区中的消息。

在这里插入图片描述

5. 消费者放入消费者组

5.1 何时放入同一个消费者组

如果需求是:提高消费吞吐量,或 加快消息消费速度,应该将多个消费者 放到同一个消费者组中,并让该消费者组订阅同一个 Topic。若TopicT1 有 4 个分区,如果消费者组中有 4 个消费者,那么每个消费者会各自消费一个分区中的消息,达到 并行消费的效果。

5.2 何时放入不同的消费者组

如果需求是:让多个消费者读取同样的消息,需要将消费者放在 不同的消费者组中。每个消费者组都会 独立地消费同一个 Topic 中的所有消息,不会互相影响。

http://www.dtcms.com/a/357993.html

相关文章:

  • 本地运行的检索PDF文件中出现关键字的python程序
  • 2025年如何批量下载雪球帖子和文章导出pdf?
  • 2025 批量下载雪球和东方财富帖子和文章导出excel和pdf
  • kind集群应用
  • 《云原生架构从崩溃失控到稳定自愈的实践方案》
  • 「鸿蒙系统的编程基础」——探索鸿蒙开发
  • 第12章:推荐算法与实践
  • 科技感网页计时器.html
  • 设计模式:抽象工厂模式(Abstract Factory Pattern)
  • 在word以及latex中引用zotero中的参考文献
  • 单例模式的mock类注入单元测试与友元类解决方案
  • 云存储(参考自腾讯云计算工程师认证)
  • Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200%
  • 使用电脑操作Android11手机,连接步骤
  • 【序列晋升】21 Spring Cloud Gateway 云原生网关演进之路
  • DVWA靶场通关笔记-CSRF(Impossible级别)
  • 【90页PPT】新能源汽车数字化转型SAP解决方案(附下载方式)
  • 汽车加气站操作工证考试的复习重点是什么?
  • 【自然语言处理与大模型】多机多卡分布式微调训练的有哪些方式
  • C++ constexpr:编译时计算的高效秘籍
  • 复现论文块体不锈钢上的光栅耦合表面等离子体共振
  • 10.2 工程学中的矩阵
  • hadoop安欣医院挂号看诊管理系统(代码+数据库+LW)
  • 使用 Ansible 和 Azure Pipelines 增强您的 DevOps
  • Midjourney绘画创作入门操作创作(广告创意与设计)
  • 腾讯云centos7.6的运维笔记——从yum的安装与更新源开始
  • C++ 之 【map和set的模拟实现】(只涉及map和set的插入、迭代器以及map的operator[]函数)
  • Altium Designer中电路板设计
  • 流式HTTP MCP服务器开发
  • Android中handler机制