Kafka之消费者组与消费者

news2024/11/24 11:28:53

消费者(Consumer)在Kafka的体系结构中是用来负责订阅Kafka中的主题(Topic),并从订阅的主题中拉取消息后进行处理。

与其他消息中间件不同,Kafka引入一个逻辑概念——消费组(Consumer Group),我们可以理解为消费者的分类,每个消费者都对应一个消费组,消费组与消费组之间的关系是完全独立的,互不影响。

1 消费组

我对消费组的理解是这样的:(为了便于理解)我将它看做一个“大号的消费者”,既然它是一个“消费者”,那它就能订阅主题(即从主题那里拉取消息),所以对于主题中的一个消息来说,订阅了该主题的所有“大号的消费者(即消费组)”们都能拉取到该消息(实际上是消费组中的消费者),如下图:
在这里插入图片描述

  • 图①的理解是:将消费组A和消费组B看做两个“大号的消费者”,并且都订阅了主题A。
  • 图②的理解是:由于“大号的消费者A”和“大号的消费者B”都订阅了主题A,所以【消息A-1】会发送给这两个“大号的消费者(实际是消费组)”。
  • 图③的理解是:实际上【消息A-1】是被“大号消费者A”(即消费组A)和“大号消费者B”(即消费组B)中的【消费者A-1】和【消费者B-1】拉取了并处理了。

再进一步来说,消费组内的消费者们实质上都处理相同的业务(可以将他们理解为同一个消费者的多个副本),而不同消费组的消费者通常来说处理的都是不同的业务。 我们再举个例子来解释下:

假设这样一个场景:
一个请假的审批流程,请假审批通过后,会分别通知请假申请人和人力资源部门。

从中我们定义出一个主题和二个消费者:

  • 主题:请假审批结果
  • 消费者A0:通知请假申请人
  • 消费者B0:通知人力资源部门

期初公司人员较少请假审批的申请并不多(也就是说要消费的消息并不多),此时一个处理“通知请假申请人”的消费者节点和一个处理“通知人力资源部门”的消费者节点就可以支撑业务了,如下图:
在这里插入图片描述
假设公司团队迅速扩张(员工人数大量增加),请假也越来越多,之前分别处理“通知请假申请人”、“通知人力资源部门”的单节点无法快速的处理消息,所以这个时候我们就需要增加节点,如下图:
在这里插入图片描述

2 分区分配逻辑

基于默认的分区分配策略,我们再来看下消费组内的消费者数量变化会对分区分配有怎样的影响(也就是分配逻辑是什么样的),如下图:
在这里插入图片描述

  • 图①表示:消费组内只有一个消费者时,所有分区的消息将都分配给该消费者。
  • 图②、图③表示:将原本分配给【消费者A-0】的部分分区分配给【消费者A-1】和【消费者A-2会】。
  • 图④表示:当消费组内消费者的数量等于分区数量的时候,则每个分区都会被分配一个对应消费者。
  • 图⑤表示:当消费组内的消费者数量大于分区数量的时候,并不能提高消费的效率,因为多出来的消费者分配不到任何分区也就无法消费任何消息。

3 Kafka的消息投递模式

消息的投递方式主要有以下两种:

  • 点对点(P2P,Point-to-Point)模式:点对点模式是基于队列的,消息生产者(Producer)将消息发送给队列,消息消费者(Consumer)从队列中接收消息并进行消费。
  • 发布/订阅(Pub/Sub)模式:发布/订阅模式是基于主题(Topic)的,消息生产者(Producer)将消息发送给主题,消息消费者(Consumer)接收所订阅主题的消息并进行消费。

这两种消息投递方式Kafka同时支持,那么Kafka是如何实现的点对点模式和订阅/发布模式的呢?

  • 点对点模式:将所有订阅某主题的消费者放到一个消费组中,这样的话该主题的每条消息就只会被消费组中的一个消费者消费掉,也就相当于点对点模式的应用了。 在这里插入图片描述
    以上图为例,被分配到【分区0】的消息,只能被【消费者A-0】拉取到。
  • 订阅/发布模式:使订阅某主题的所有消费者都隶属一个专属的消费组,这样的话该主题的每条消息将会被所有消费者都处理一遍,也就相当于发布/订阅模式的应用了。
    在这里插入图片描述
    以上图为例,被分配到【分区0】的消息,会被【消费者0】、【消费者1】、【消费者2】…【消费者N】拉取到。

上一篇:《Kafka之生产者》
下一篇:《Kafka之消费者客户端开发》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2216270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用excel.js(layui-excel)进行layui多级表头导出,根据单元格内容设置背景颜色,并将导出函数添加到toolbar

本段是菜狗子的碎碎念,解决办法请直接从第二段开始看。layui多级表头的导出,弄了两天才搞定,中途一度想放弃,还好坚持下来了。一开始用的是layui的toolbar里自带的那个导出,但是多级表头没有正常导出,单元格…

FPGA学习(6)-基础语法参数化设计阻塞与非阻塞

目录 1.两种参数化不改变源文件,只改仿真文件的值 2.参数化设计实现模块的重用 2.1不用参数化方法 2.1.1源文件 2.1.2仿真文件 2.1.3仿真波形及实验 2.2 用参数方法 2.2.1调用之前写的led灯闪烁模块,在本源函数中,例化4次调用之前的模…

【pyspark学习从入门到精通7】DataFrames_2

目录 创建 DataFrames 生成我们自己的 JSON 数据 创建 DataFrame 创建临时表 简单的 DataFrame 查询 DataFrame API 查询 SQL 查询 创建 DataFrames 通常,您会通过使用 SparkSession(或在 PySpark shell 中调用 spark)导入数据来创建 …

SpinalHDL之错误集(一)

本文作为SpinalHDL学习笔记第七十六篇,作为错误集使用,类似高中生的错题集,记录使用SpinalHDL过程中遇到的问题,小到语法错误、版本兼容问题,大到SpinalHDL库函数错误等等,持续更新。 SpinalHDL学习笔记总…

记录 ruoyi-vue-plus在linux 部署遇到的问题

整理 linux 文件不要放在 /, 根目录下,要放在 home 文件夹下。docker 启动mysql 容器,映射的 my.cnf 文件不能设置太高权限,权限太高有安全问题,无法读取。 linux 使用注意事项 docker 文件夹 部署在home文件夹下 总结学习到的…

Asp.Net Core 发布 IIS、docker、Azure、文件夹、AAS、ASF、AWM等

发布 微软资料 微软资料 在 IIS 工作进程 (w3wp.exe) 内托管 ASP.NET Core 应用,称为进程内托管模型。 将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用,称为进程外托管模型。 发布到IIS 》》》Asp.net 之前 》》》 Asp.net Core …

JavaScript 网页设计案例:使用 Canvas 实现趣味打气球小游戏

JavaScript 网页设计案例:使用 Canvas 实现趣味打气球小游戏 在网页设计中,交互性和趣味性是吸引用户的重要因素。借助 JavaScript 和 HTML5 的 canvas 元素,我们可以轻松实现各种动画效果,今天将带你打造一个有趣的 打气球小游戏…

Vxe vue vxe-table 分享实现打印表格以及同时打印两张表

Vxe vue vxe-table 分享实现打印表格以及同时打印两张表 vxe-table 默认情况下支持单表打印。 在有些情况下,页面上同时有几张表,这时需要一次性打印出来。可以利用 Vxe 自带的分页打印功能,实现多张表同时打印。 效果 点击打印后自动调起预…

Redis --- 第四讲 --- 常用数据结构 --- set、zset

一、set类型的基本介绍 谈到一个术语,这个术语很可能有多种含义。Set一个含义是集合,一个含义是设置。 集合就是把一些有关联数据放到一起。 1、集合中的元素是无序的! 2、集合中的元素是不能重复的。 和list类似,集合中的每…

数据治理为何如此简单?

欢迎来文末免费获取数据治理相关PPT和文档 引言 随着大数据技术的迅速发展,企业积累的数据量呈现爆炸式增长。有效的数据管理已经成为企业提高决策效率、增强竞争优势的重要手段。在这样的背景下,数据治理逐渐成为企业数据管理中不可或缺的一环。它不仅…

15分钟学Go 第1天:Go语言简介与特点

Go语言简介与特点 1. Go语言概述 Go语言(又称Golang)是由谷歌于2007年开发并在2009年正式发布的一种开源编程语言。它旨在简单、高效地进行软件开发,尤其适合于网络编程和分布式系统。 1.1 发展背景 多核处理器:随着计算机硬件…

MFC扩展库BCGControlBar Pro v35.1新版亮点:改进网格控件性能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.1已全新发布了,这个版本改进网格控件的性能、增强工具栏编辑器功能等。 …

hadoop集群搭建-克隆虚拟机,安装jdk,hadoop

2.2 hadoop运行环境的搭建 2.2.1 环境准备 1)安装模板虚拟机,IP地址 192.168.10.100,主机名hadoop100,内存41GB,硬盘50GB 2)虚拟机配置 首先测试虚拟机是否可以正常上网,测试方法ping www.b…

HarmonyOS Next模拟器异常问题及解决方法

1、问题1:Failed to get the device apiVersion. 解决方法:关闭模拟器清除用户数据重启

centos7.9调整磁盘分区大小

在安装centos7.9时我们一般采用默认分区设置,使用LVM来管理磁盘空间,根分区只有50GB,其余的所有可用空间都分配在/home分区下。可是centos7中大多数的应用软件都是安装在根分区的,在使用过程中经常会出现明明系统还有很大的磁盘空…

CSS 选择器简单回顾

引言 当我们探讨网页设计和开发时, CSS(层叠样式表) 无疑是一个不可或缺的技术, 它使我们能够精确控制网页的外观和布局, 为用户创造出独特的视觉体验、以及良好的交互体验!! 而一个完整的 CSS 规则则是由两个主要部分组成: 选择器和声明块 那么今天我们就来盘点下常见的几种选…

jmeter使用csv数据

背景 使用jmeter对系统进行压测。测试数据存储在了csv中,多线程压测的时候,csv中的一条数据不能多个线程同时使用,数据全部使用过后,需要终止压测。 功能点 从csv读取数据后,完成接口数据拼接。多线程依次从csv文件…

蓝牙HCI的log分析方法

一 前言: Bluetooth HCI log 的最主要功能是用于分析蓝牙设备之间的交互行为是否符合预期,以及是否符合 蓝牙规范之规定。 基本上,在手机应用平台上,除了蓝牙功能无法打开以及蓝牙引起的 system crash 问题之外,蓝牙相 关的问题,均可以通过分析 HCI log 来定位问题。 具…

MacOS Sublime Text 解决中乱码

1. 安装Package Control 官方安装指南 手动安装 通过以此点击菜单 Sublime Text > Preferences > Browse Packages 打开Packages目录找到Packages的同级目录Installed Packages下载PackageControl.sublime-package并保存到Installed Packages中在菜单 Sublime Text &g…

[含文档+PPT+源码等]精品基于springboot实现的原生微信小程序小型电子拍卖系统

基于Spring Boot实现的原生微信小程序小型电子拍卖系统的背景,可以从以下几个方面进行详细阐述: 一、技术背景 Spring Boot框架: Spring Boot是一个开源的Java应用框架,它基于Spring框架,旨在简化Spring应用的开发、配…