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

Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka怎么做到避免消息重复消费的? 消费者组是什么?

消费者

1、订阅Topic(主题)
2、从订阅的Topic消费(pull)消息,
3、将消费消息的offset(偏移量)保存在Kafka内置的一Topic名字是_consumer_offsets的主题中,在Kafka的logs文件下能看到这👟文件,存放的是消息的偏移量数据
在这里插入图片描述

消费者组

在这里插入图片描述

1、订阅同一个Topic的消费者可以加入到一个consumer Group(消费者组)
2、消费者组中的consumer共享一个group_idconfigs,put(“group.id”,”XXX”);只要消费者的group_id一样,就属于同一个消费者组
3、消费者组保证每个topic下一个partition的消息只能被一个消费者组下一个消费者消费,避免消息的重复消费
如上图,当前只有一个消费者组订阅这个Topic,消费者组里只有一个消费者,那么当前Topic中所有分区的消息都由这个消费者消费
4、当消费者端业务逻辑比较复杂,消费消息比较慢,这个时候我们可以向消费者组中多加几个消费者(横向扩展)来提升消费速度。无非就是消费者端一套代码再在几台新的服务器部署一套,加入到同一个group_id下,同时从主题消费消息
横向扩展后,Kafka会对消息的分区与消费者的对应关系重新调整,这就是rebalance(再平衡机制)
在这里插入图片描述
如上图,消费者组扩展一个消费者后,消费者1、2分别消费两个分区的消息
我们可以看到,一个分区对应一个消费者,但是一个消费者可以对应多个分区

如果上面结构还不够,两个消费者消费速度依然跟不上,那么我们还可以继续添加消费者,添加到4个消费者,此时主题分区与消费者的关系再次发生变化,需要再平衡,此时一个消费者消费一个分区消息,达到并行消费的效果
在这里插入图片描述

上面步骤我们看到了消息的分区可以横向扩展,消息的消费者也可以横向扩展,向消费者组添加消费者是横向扩展消费能力的主要方式,而消费者组是消费者的关键,消费者组来保证,主题下的消息不管由多少个分区,每条消息只会被一个消费者消费,就不会引起重复消费的情况

一般最佳情况是:消费者数 = 分区数,一个分区对应一个消费者,
消费者也不是越多越好,消费者数受限于分区数, 过多消费者会导致有的消费者没有分配分区导致空闲,如下图
在这里插入图片描述
所以对于高并发的场合,我们通常会给一个主题设置很多个分区,分区数多利于消费者横向扩张


上面是一个消费者组的情况,实际上对于一个Topic可以有不同的消费者组,如下图
在这里插入图片描述

  • 每个消费者组是相互独立的
  • 每个消费者组都可以拿到主题的全部数据

相关文章:

Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka怎么做到避免消息重复消费的? 消费者组是什么? 消费者: 1、订阅Topic(主题) 2、从订阅的Topic消费(pull)消息, 3、将消费消息的offset(偏移量)保存在K…...

MongoDB 的增、查、改、删

Monogo使用 增 单条增加 db.member.insertOne({"name":"张三","age":18,"create":new Date()}) db.member.insert({"name":"李四1","age":18,"create":new Date()}) db.member.insertOne(…...

mysql常用操作命令

mysql常用操作命令 mysql:单进程多线程模型,一个SQL语句无法利用多个cpu core 一:基本命令 0.查看当前连接数 show global status like Thread$; show variables like "%timeout%"; show variables like "log_%";1.查看当前连接状态 show processlist…...

数学建模常见模型汇总

优化问题 线性规划、半定规划、几何规划、非线性规划、整数规划、多目标规划(分层序列法)、动态规划、存贮论、代理模型、响应面分析法、列生成算法 预测模型 微分方程、小波分析、回归分析、灰色预测、马尔可夫预测、时间序列分析(AR MAMA.RMA ARTMA LSTM神经网络)、混沌模…...

C#使用LINQ查询操作符实例代码(二)

目录 六、连表操作符 1、内连接2、左外连接(DefaultIfEmpty)3、组连接七、集合操作 八、分区操作符 1、Take():2、TakeWhile():3、Skip():4、SkipWhile():九、聚合操作符 1、Count: 返回集合项数。 2、LongCount&…...

jenkinsfile小试牛刀

序 本文主要演示一下如何用jenkinsfile来编译java服务 安装jenkins 这里使用docker来安装jenkins docker run --name jenkins-docker \ --volume $HOME/jenkins_home:/var/jenkins_home \ -p 8080:8080 jenkins/jenkins:2.416之后访问http://${yourip}:8080,然后…...

C++ xmake构建

文章目录 一、xmake.lua二、xmake常用语句 一、xmake.lua --xmake.luaset_project("XXX")add_rules("mode.debug", "mode.release") set_config("arch", "x64")if is_plat("windows") then -- the release modei…...

推荐带500创作模型的付费创作V2.1.0独立版系统源码

ChatGPT 付费创作系统 V2.1.0 提供最新的对应版本小程序端,上一版本增加了 PC 端绘画功能, 绘画功能采用其他绘画接口 – 意间 AI,本版新增了百度文心一言接口。 后台一些小细节的优化及一些小 BUG 的处理,前端进行了些小细节优…...

wps图表怎么改横纵坐标,MLP 多层感知器和CNN卷积神经网络区别

目录 wps表格横纵坐标轴怎么设置? MLP (Multilayer Perceptron) 多层感知器 CNN (Convolutional Neural Network) 卷积神经网络 多层感知器MLP,全连接网络,DNN三者的关系 wps表格横纵坐标轴怎么设置? 1、打开表格点击图的右侧…...

rdb和aof

RDB持久化:原理是将Redis在内存中的数据库记录定时dump到磁盘上的RDB持久化AOF持久化:原理是将Redis的操作日志以追加的方式写入文件 rdb: 开启方式:客户端可以通过向Redis服务器发送save或bgsave命令让服务器生成rdb文件&#…...

TCP网络通信编程之网络上传文件

【图片】 【思路解析】 【客户端代码】 import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException;/*** ProjectName: Study* FileName: TCPFileUploadClient* author:HWJ* Data: 2023/7/29 18:44*/ public class TCPFil…...

Java中对Redis的常用操作

目录 数据类型五种常用数据类型介绍各种数据类型特点 常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令 在Java中操作RedisRedis的Java客户端Spring Data Redis使用方式介绍环境搭建配置Redis数据源编写配置类,创建RedisTempla…...

链路追踪设计

...

Golang之路---02 基础语法——常量 (包括特殊常量iota)

常量 //显式类型定义const a string "test" //隐式类型定义const b 20 //多个常量定义 const(c "test2"d 2.3e 27)iota iota是Golang语言的常量计数器,只能在常量表达式中使用 iota在const关键字出现时将被重置为0,const中每新…...

Pytest学习教程_装饰器(二)

前言 pytest装饰器是在使用 pytest 测试框架时用于扩展测试功能的特殊注解或修饰符。使用装饰器可以为测试函数提供额外的功能或行为。   以下是 pytest 装饰器的一些常见用法和用途: 装饰器作用pytest.fixture用于定义测试用例的前置条件和后置操作。可以创建可重…...

redis的如何使用

1、redis的使用 1.1windows安装 安装包下载地址:Releases dmajkic/redis GitHub 1.2 redis中常使用的几个文件 1.3 redis中运行 双击redis-server,既可以运行。 1.4使用redis客户单来连接redis 1.5redis的常用指标 redis-serve 服务端,端口号&am…...

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…...

【【51单片机AD转换模块】】

代码是简单的&#xff0c;板子是坏的&#xff0c;电阻是识别不出来的 main.c #include <REGX52.H> #include "delay.h" #include "LCD1602.h" #include "XPT2046.h"unsigned int ADValue;void main(void) {LCD_Init();LCD_ShowString(1,1…...

Longest Divisors Interval(cf)

题意&#xff1a;给定一个正整数n&#xff0c;求正整数的区间[l&#xff0c;r]的最大大小&#xff0c;使得对于区间中的每个i&#xff08;即l≤i≤r&#xff09;&#xff0c;n是i的倍数。给定两个整数l≤r&#xff0c;区间[l&#xff0c;r]的大小为r−l1&#xff08;即&#xf…...

配置文件、request对象请求方法、Django连接MySQL、Django中的ORM、ORM增删改查字段、ORM增删改查数据

一、配置文件的介绍 1.注册应用的 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,app01.apps.App01Config, ]################中间件###############…...

CTF学习路线指南(附刷题练习网址)

前言&#xff1a; PWN,Reverse&#xff1a;偏重对汇编&#xff0c;逆向的理解&#xff1b; Gypto&#xff1a;偏重对数学&#xff0c;算法的深入学习&#xff1b; Web&#xff1a;偏重对技巧沉淀&#xff0c;快速搜索能力的挑战&#xff1b; Mic&#xff1a;则更为复杂&…...

【Rust 基础篇】Rust默认泛型参数:简化泛型使用

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。在Rust中&#xff0c;泛型是一种非常重要的特性&#xff0c;它允许我们编写一种可以在多种数据类型上进行抽象的代码。然而&…...

从源码分析Handler面试问题

Handler 老生常谈的问题了&#xff0c;非常建议看一下Handler 的源码。刚入行的时候&#xff0c;大佬们就说 阅读源码 是进步很快的方式。 Handler的基本原理 Handler 的 重要组成部分 Message 消息MessageQueue 消息队列Lopper 负责处理MessageQueue中的消息 消息是如何添加…...

shell编程 变量作用域

变量 变量赋值不用$&#xff0c;访问值时用$,赋值时两边不留空格&#xff0c;双引号括起来的变量被值替换{}标记变量开始和结束,变量名区分大小写&#xff0c;所有bash变量的值变量不区分类型&#xff0c;统一为字符串 变量类型 环境变量&#xff0c;子进程可以继承父进程环境…...

华为eNSP:isis的配置

一、拓扑图 二、路由器的配置 配置接口IP AR1&#xff1a; <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthe…...

FS.05-SAS-UP-Methodology

FS.05-SAS-UP-Methodology-v9.2.pdf 附录 D 数据处理审核 作为现场数据处理系统和支持流程审核的一部分&#xff0c;受审核方最好在审核日期之前准备一些 SAS 特定的测试数据文件。 本文件提供了建议的方法&#xff1b; 受审核方和审核团队将就每次审核的具体方法达成一致。 …...

Jmeter并发测试

基本步骤 1、新建线程组 测试计划右键——>添加——>线程&#xff08;用户&#xff09;——>线程组 2、 添加HTTP请求 线程组右键——>添加——>取样器——>HTTP请求 3、 添加HTTP信息头管理器 线程组右键——>添加——>配置元件——>HTTP信息头…...

【JVM】浅看JVM的运行流程和垃圾回收

1.JVM是什么 JVM&#xff08; Java Virtual Machine&#xff09;就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程&#xff1a; 程序在执行之前先要把java代码转换成字节码&#xff08;class文件&#xff09;&#xff0c;JVM 首先需要把字节码通过…...

使用低代码开发,需要注意哪些?

低代码平台的历史相对较短&#xff0c;大约始于 2000 年初&#xff0c;源于快速应用程序开发工具。随着低代码平台和工具的日益普及和优势&#xff0c;它不断发展以满足各种领域和角色的需求。 本文将研究各种低代码和无代码应用程序开发方法、业务用例、挑战和未来预测等。 一…...

面试总结-Redis篇章(八)——Redis分布式锁

JAVA 面试总结-Redis分布式锁 模拟抢券场景通过下面方法添加Synchronized锁来防止上述情况&#xff0c;如果上面是单体服务没有问题&#xff0c;但是如果项目是集群部署&#xff0c;会出现下面的问题&#xff0c;因为Synchronized是属于本地的锁端口8080和8081同时访问&#xf…...

十大网站建设公司排名/梅花seo 快速排名软件

计算机用户协会工作总结通过一学期的准备学习&#xff0c;我校这一学期终于进入生本教育的实施阶段了。我是一个体育老师&#xff0c;出去听的报告也少&#xff0c;学习的也不怎么系统&#xff0c;但我知道生本教育是适合现代教育的教育&#xff0c;是与时俱进的教育。我们也都…...

网站制作旅行社/成都搜索优化整站优化

源码下载地址&#xff1a;http://sourceforge.net/projects/sshpass/ tar -zxvf sshpass-1.05.tar.gzcd sshpass-1.05./configuremake && make install安装完成后输入sshpass出现如下提示即安装成功&#xff1a;sshfs就不多介绍了&#xff0c;它功能是映射远程服务器上…...

网站制作样板/百度关键词排名神器

.NetCore 下开发独立的&#xff08;RPL&#xff09;含有界面的组件包 &#xff08;一&#xff09;准备工作 .NetCore 下开发独立的&#xff08;RPL&#xff09;含有界面的组件包 &#xff08;二&#xff09;扩展中间件及服 务 .NetCore 下开发独立的&#xff08;RPL&#xff0…...

怎样注册小程序店铺/莆田百度seo公司

目录 1、编程题&#xff1a;最高分是多少 2、编程题2&#xff1a;简单错误记录 3、编程题3&#xff1a;扑克牌大小 1、编程题&#xff1a;最高分是多少 答案&#xff1a; let line; while(linereadline()){let linesline.split( );let studentNum,operationNum;studentNump…...

制作网站的主题/互联网广告优化

mysqlaccess一个脚本&#xff0c;检查对主机、用户和数据库组合的存取权限。mysqladmin执行管理操作的实用程序&#xff0c;例如创建或抛弃数据库&#xff0c;再装载授权表&#xff0c;清洗表到磁盘中和再打开日志文件。mysqladmin也可以被用来从服务器检索版本&#xff0c;进程…...

精选网站建设/海外独立站

自定义view的步骤&#xff1a; 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 3、重写onMesure&#xff08;非必须&#xff09; 4、重写onDraw 1、自定义View的属性&#xff0c;首先在res/values/ 下建立一个attrs.xml &#xff0c; 在里面定义我们的属…...