分布式 - 消息队列Kafka:Kafka消费者和消费者组

news2024/11/26 3:29:12

文章目录

      • 1. Kafka 消费者是什么?
      • 2. Kafka 消费者组的概念?
      • 3. Kafka 消费者和消费者组有什么关系?
      • 4. Kafka 多个消费者如何同时消费一个分区?

1. Kafka 消费者是什么?

消费者负责订阅Kafka中的主题,并且从订阅的主题上拉取消息。与其他一些消息中间件不同的是:在Kafka的消费理念中还有一层消费组的概念,每个消费者都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者。

2. Kafka 消费者组的概念?

假设我们有一个应用程序,它从一个Kafka主题读取消息,在对这些消息做一些验证后再把它们保存起来。应用程序需要创建一个消费者对象,订阅主题并开始接收消息、验证消息和保存结果。但过了一阵子,生产者向主题写入消息的速度超过了应用程序验证数据的速度,这时候该怎么办呢?如果只使用单个消费者来处理消息,那么应用程序会远远跟不上消息生成的速度。显然,此时很有必要对消费者进行横向伸缩。就像多个生产者可以向相同的主题写入消息一样,也可以让多个消费者从同一个主题读取消息。

Kafka消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者负责读取这个主题的部分消息。

① 假设主题T1有4个分区,我们创建了消费者C1,它是群组G1中唯一的消费者,用于订阅主题T1。消费者C1将收到主题T1全部4个分区的消息。

② 如果在群组G1里新增一个消费者C2,那么每个消费者将接收到两个分区的消息。假设消费者C1接收分区0和分区2的消息,消费者C2接收分区1和分区3的消息。

③ 如果群组G1有4个消费者,那么每个消费者将可以分配到一个分区。

在这里插入图片描述

④ 如果向群组里添加更多的消费者,以致超过了主题的分区数量,那么就会有一部分消费者处于空闲状态,不会接收到任何消息。

向群组里添加消费者是横向扩展数据处理能力的主要方式。Kafka消费者经常需要执行一些高延迟的操作,比如把数据写到数据库或用数据做一些比较耗时的计算。在这些情况下,单个消费者无法跟上数据生成的速度,因此可以增加更多的消费者来分担负载,让每个消费者只处理部分分区的消息,这是横向扩展消费者的主要方式。于是,我们可以为主题创建大量的分区,当负载急剧增长时,可以加入更多的消费者。不过需要注意的是,不要让消费者的数量超过主题分区的数量,因为多余的消费者只会被闲置。

⑤ 除了通过增加消费者数量来横向伸缩单个应用程序,我们还经常遇到多个应用程序从同一个主题读取数据的情况。实际上,Kafka的一个主要设计目标是让Kafka主题里的数据能够满足企业各种应用场景的需求。在这些应用场景中,我们希望每一个应用程序都能获取到所有的消息,而不只是其中的一部分。只要保证每个应用程序都有自己的消费者群组就可以让它们获取到所有的消息。不同于传统的消息系统,横向伸缩消费者和消费者群组并不会导致Kafka性能下降。

在之前的例子中,如果新增一个只包含一个消费者的群组G2,那么这个消费者将接收到主题T1的所有消息,与群组G1之间互不影响。群组G2可以增加更多的消费者,每个消费者会读取若干个分区,就像群组G1里的消费者那样。作为整体来说,群组G2还是会收到所有消息,不管有没有其他群组存在。

在这里插入图片描述

总的来说,就是为每一个需要获取主题全部消息的应用程序创建一个消费者群组,然后向群组里添加更多的消费者来扩展读取能力和处理能力,让群组里的每个消费者只处理一部分消息。

3. Kafka 消费者和消费者组有什么关系?

消费者组是一个逻辑上的概念,它将旗下的消费者归为一类,每一个消费者只属于一个消费者组。每一个消费组都会有一个固定的名称,消费者在进行消费前需要指定其所属消费者组的名称,这个可以通过消费者客户端参数group.id来配置,默认值为空字符串。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由同一个消费者组内的一个消费者来消费。

消费者组的作用是实现负载均衡和容错性,因为每个消费者只能读取主题中的一部分消息,而消费者组中的所有消费者共同读取整个主题中的所有消息。

4. Kafka 多个消费者如何同时消费一个分区?

Kafka 中的每个分区只能被一个消费者消费,如果多个Kafka消费者要同时消费相同主题下相同分区的数据,需要将它们放到不同的消费者组中。在Kafka中,一个消费者组中的每个消费者会消费主题下不同分区的消息,而不同消费者组中的消费者则可以同时消费相同分区的数据。这样可以实现多个消费者同时消费相同分区的数据,提高消费效率和可靠性。同时,Kafka还提供了一些负载均衡策略,可以根据消费者组中消费者的数量和消费能力来自动分配Partition,以实现更好的负载均衡。

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

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

相关文章

最新版本的Anaconda环境配置、Cuda、cuDNN以及pytorch环境一键式配置流程

本教程是最新的深度学习入门环境配置教程,跟着本教程可以帮你解决入门深度学习之前的环境配置问题。同时,本教程拒绝琐碎,大部分以图例形式进行教程。这里我们安装的都是最新版本~ 文章目录 一、Anaconda的安装1.1 下载1.2 安装1.3 环境配置…

STM32CubeMX之freeRTOS互斥量

这是大哥保护小弟的故事 高中低等级的任务 互斥量就是谁要敢插我小弟的队,我就要打他,不能让其他人插我小弟的队 互斥量的使用是默认开启的不用手动开启! 最高优先级任务:延时(10ms)再上厕所 中间&#x…

2023年录屏软件哪个好用,Camtasia Studio2023安装激活教程最新激活密钥

2023年录屏软件哪个好用,电脑Windows10系统自带录屏不是挺香吗,干嘛还需要安装录屏软件!系统自带的录屏功能有一定局限限,想要录制其他文件、软件内容根本不好用;与其费时费力研究系统自带,不如选择好用的录…

matlab解微分方程:方向场

在微分方程中,常见的形式是: x ′ f ( x , t ) xf(x,t) x′f(x,t) 方向场的每一个矢量可以形象地刻画一阶微分方程的解。在方向场中的每个点处,都会出现一条其斜率等于通过该点的微分方程解的矢量。给定一个初值,微分方程对应一条…

MyBatis源码解析手写持久层框架

1. 手写持久层框架 1.1 JDBC操作数据库_问题分析 JDBC API 允许应用程序访问任何形式的表格数据,特别是存储在关系数据库中的数据 代码示例: public static void main(String[] args) { Connection connection null;PreparedStatement preparedState…

axios请求

参考:https://www.axios-http.cn/docs/instance

Visual Studio 2022 如何关闭左侧绿色条的点击事件,避免误触?

如图,文本编辑器左侧的绿条,很容易误触,真是神烦!点一下就会弹出这个差异框。 我也不知道这个绿色的条叫什么,烦了好久都没有找到怎么关闭它! 是叫 git 状态条?git 差异条?git 更改…

三平面映射的技术

大家好,我是阿赵。   之前在做护盾的时候,使用过一种叫做三平面映射的技术,这里来详细的说一下。 一、效果说明 在做场景的时候,很多美工都会遇到一个问题,想把一个通用的材质贴图赋予给一个经过拉伸的模型&#xf…

无涯教程-Perl - my函数

描述 此函数声明LIST中的变量在包围式块内按词法范围。如果指定了多个变量,则所有变量都必须用括号括起来。 语法 以下是此函数的简单语法- my LIST返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -wmy $string "We are the w…

【算法学习】高级班九

这种互为旋变串&#xff1a; 给定两个字符串&#xff0c;判断是否互为旋变串 代码&#xff1a; 打表法&#xff1a; 每一层内的数字不互相依赖&#xff0c;只依赖它下面的层但实际上size会约束L1和L2的值&#xff0c;即L1和L2<N-size 思路&#xff1a;设置一个窗口…

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 CtrlS &#xff1b;需要设置快捷键&#xff0c;这里原来是save all操作时上传文件到服务器&#xff1b; ** 设置好快捷键后按 CtrlS就会同步文件&#xff08;添加删除文件后保存&#xff0c;服务器也会同步&#xff09; ** 搜索出save all 后&#xf…

多线程与高并发--------阻塞队列

四、阻塞队列 一、基础概念 1.1 生产者消费者概念 生产者消费者是设计模式的一种。让生产者和消费者基于一个容器来解决强耦合问题。 生产者 消费者彼此之间不会直接通讯的&#xff0c;而是通过一个容器&#xff08;队列&#xff09;进行通讯。 所以生产者生产完数据后扔到…

【Realtek sdk-3.4.14b】RTL8197F+RTL8812F欧洲屏蔽5G天气雷达信道DFS信道120、124、128方法

需求描述 对于欧洲国家来说,默认支持DFS信道,但是有三个信道比较特殊,是天气雷达信道,如下图所示120、124、128,天气雷达信道有个特点就是在信号可以发射之前需要检测静默15min,如果信道自动选择到了天气雷达信道,就会有15min的时间无法连接到WiFi热点,严重影响用户体验…

(MySQL经验)之MySQL单表行数最好低于2000w

作为在后端开发&#xff0c;是不是经常听到过&#xff0c;mysql 单表最好不要超过 2000w,单表超过 2000w 就要考虑数据迁移了&#xff0c;表数据都要到 2000w &#xff0c;查询速度变得贼慢。 1、建表操作 建一张表 CREATE TABLE person( id int NOT NULL AUTO_INCREMENT PRI…

DNSPod十问王强:小厂做大模型,套壳赚快钱?

本期嘉宾 王强 ZelinAI、考考创始人 王强&#xff0c;ZelinAI、考考创始人兼CEO。ZelinAI成立于2023年&#xff0c;零代码构建AI应用&#xff0c;大模型落地最后一公里&#xff0c;累计获得1万开发者、4万智能体、4000AI应用&#xff0c;服务建发集团、京港地铁、58同城等知名…

儿童学python语言能做什么,小孩学python到底好不好

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;儿童学python语言能做什么&#xff0c;小孩学python课程需要多久&#xff0c;现在让我们一起来看看吧&#xff01; 对于刚开始学习编程的孩子来说&#xff0c;图形化的Scratch是很好的启蒙语言。它用类似于拼图的模式&a…

【jackson】自定义字段注解完成序列化逻辑

目录 背景本文开发环境介绍新建一个注解新建一个JavaBean新建一个JsonSerializer新建一个AnnotationIntrospector单元测试总结 背景 Spring默认的JSON序列化工具使用的是jackson&#xff0c;GitHub项目地址: https://github.com/FasterXML/jackson 我们在处理前后端接口交互的…

Redis系列(一):深入了解Redis数据类型和底层数据结构

Redis有以下几种常用的数据类型&#xff1a; redis数据是如何组织的 为了实现从键到值的快速访问&#xff0c;Redis 使用了一个哈希表来保存所有键值对。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis数据库内部用于存储所有键值对的主要数据结构。…

单参数构造函数的隐式类型转化

单参数构造函数的隐式类型转化 如果你不想发生隐式类型的转化&#xff0c;可以在默认构造函数前加上关键字&#xff1a;explicit 多参数的玩法和单参数的是不一样的 c98 不支持多参数隐式类型的转化 c11 支持多参数隐式类型的转化 举个例子&#xff1a; 多参数可以这样写&…

PhotoShop学习笔记

PhotoShop学习笔记 对图像进行缩放拉伸自动选中像素相近的同一个区域分离图层的选中区域分离图层的非选中区域处理不自然的缝合痕迹 记录一些PhotoShop中用到的操作&#xff0c;主要是在处理AI图像时遇到的需求。 对图像进行缩放拉伸 CTRLT 自动选中像素相近的同一个区域 魔…