Kafka 消费者如何实现消费者组内分区平衡,Kafka常见面试问题

1、简介

        一个消费者组中有多个consumer组成,一个topic有多个partition组成,现在的问题是,到底由哪个consumer来消费哪个partition的数据。或者当某个消费者被移出消费者组,如何实现再平衡。本文将详细介绍。

2、消费者主要分区策略

        Kafka有四种主流的分区分配策略: Range、RoundRobin、Sticky、CooperativeSticky。可以通过配置参数 partition.assignment.strategy,修改分区的分配策略。默认策略是 Range + CooperativeSticky。Kafka可以同时使用多个分区分配策略

2.1、Range分区策略

        Range 是对每个topic 而言的。首先对同一个topic 里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。通过partitions数/consumer数来决定每个消费者应该消费几个分区。如果除不尽,那么前面几个消费者将会多消费1 个分区。

        例如,7/3 = 2 余1 ,除不尽,那么消费者C0 便会多消费1 个分区。8/3=2余2,除不尽,那么C0和C1分别多消费一个。

注意:如果只是针对1 个topic 而言,C0消费者多消费1个分区影响不是很大。但是如果有N 多个topic,那么针对每个topic,消费者C0都将多消费1 个分区,topic越多,C0消费的分区会比其他消费者明显多消费N 个分区。容易产生数据倾斜!

2.2、RoundRobin分区策略

        RoundRobin 针对集群中所有Topic而言。RoundRobin 轮询分区策略,是把所有的partition 和所有的consumer 都列出来,然后按照hashcode 进行排序,最后通过轮询算法来分配partition 给到各个消费者。

 2.3、Sticky 分区策略

        粘性分区定义:可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前,考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。

2.4、CooperativeSticky 分区策略(2.4.0版本添加上的)

        以上三种都会在 rebalance 的时候都会 stop the world,CooperativeSticky 分区策略在添加或者减少消费者的时候,只用调整的分区会暂停消费,不需要调整的分区可以继续消费。

3、Kafka 如何保证可靠消费

        重复消费:已经消费了数据,但是offset 没提交(自动提交 offset 引起)。漏消费:先提交offset 后消费,有可能会造成数据的漏消费(设置 offset 为手动提交引起,,当offset被提交时,数据还在内存中未落盘,此时刚好消费者线程被kill掉,那么offset已经提交,但是数据未处理,导致这部分内存中的数据丢失。)。

        如何保证消息可靠消费,使用消费者事务,Kafka消费端将消费过程和提交offset过程做原子绑定。此时我们需要将Kafka的offset保存到支持事务的自定义介质中(例如mysql中)。

4、如何解决消息积压问题

        1)、如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数= 分区数。(两者缺一不可)

        2)、如果是下游的数据处理不及时:提高每批次拉取的数量。通过设定 max.poll.records 参数实现,默认500条。

5、总结

        本文介绍Kafka消费者如何进行消费分区分配,如何保证消息的可靠消费,同时说明消息积压常用的处理方式,帮助大家进一步了解Kafka如何实现消费者各种高端操作。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

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

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

相关文章

LeetCode992. Subarrays with K Different Integers

文章目录 一、题目二、题解 一、题目 Given an integer array nums and an integer k, return the number of good subarrays of nums. A good array is an array where the number of different integers in that array is exactly k. For example, [1,2,3,1,2] has 3 diff…

阿里云ack集群管理及故障处理

一、集群管理维护 二、常见故障处理 存储: 网络 弹性伸缩 service

找不到vcomp140.dll无法继续执行怎么办,多种解决方法分享

当计算机系统提示“缺失vcomp140.dll”文件时,用户可能会面临一系列问题和困扰。vcomp140.dll是Visual Studio运行库中一个至关重要的动态链接库文件,对于许多基于Microsoft Visual C编译的应用程序来说,它是不可或缺的组件之一。一旦这个文件…

Spring 核心之 IOC 容器学习一

IOC 与 DI IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象…

ReRAM电阻式随机存取存储器分析

Amir Regev在2023年8月8日的闪存记忆峰会上介绍了嵌入式ReRAM(电阻式随机存取存储器)市场的发展趋势及Weebit Nano公司在该领域的技术进展和成果。预计到2028年,新兴非易失性内存(NVM)市场将达到27亿美元,其…

“贵阳贵安加快建设数字经济发展创新区核心区”新闻发布会召开

作者:杨小婷 2022年1月,国务院印发国发〔2022〕2号文件,赋予贵州“数字经济发展创新区”的战略定位,要求贵州为产业转型升级和数字中国建设探索经验。贵阳贵安作为数字经济发展创新区核心区,全力以赴抢抓数字经济时代机…

QT-贪吃小游戏

QT-贪吃小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "Snake.h" #include "Food.h" #include "Stone.h" #include "Mushroom.h" #include "Ai.h" #include "Game.h" #inclu…

vue2踩坑之项目:vue2+element实现前端导出

1.安装插件依赖 npm i --save xlsx0.17.0 file-saver2.0.5 2.单页面引入 前端导出插件 import FileSaver from "file-saver"; import * as XLSX from "xlsx"; //html <el-form-item><el-button type"primary" plain size"mini&quo…

QT 绘图与重绘事件

代码实现仪表盘 .cpp #include "widget.h" #include "ui_widget.h"#include <QPainter> #include <QPen> #include <QBrush>#include <QDebug> Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->…

ORM Bee设计思想与功能思维导图

ORM Bee设计思想与功能思维导图 Bee&#xff0c;互联网新时代的Java ORM框架&#xff0c;支持Sharding&#xff1b;JDBC&#xff0c;Android&#xff0c;HarmonyOS&#xff1b;支持多种关系型数据库&#xff0c;还支持NoSQL的Cassandra&#xff0c;Mongodb等&#xff1b;更快、…

【现代控制系统】能控性与能观性

能控性与能观性 2023年11月25日 #controlsys 文章目录 能控性与能观性1. 能控性1.1 能控性&#xff08;可控性&#xff09;的引入1.2 LTI系统的可控性1.3 LTV系统的可控性 2. 能观性2.1 能观性&#xff08;可观性&#xff09;引入2.2 LTI系统的可观性2.3 LTV系统的可观性 3. 状…

分享用is_sorted()解决单调数列问题

题目名称 896. 单调数列 目录 题目名称 896. 单调数列 1.题目 2.题目分析 3.题目知识 3.1 is_sorted() 3.2.迭代器与反向迭代器 3.2.1理解迭代器 3.2.2正向迭代器 3.2.3反向迭代器 最后&#x1f368; 推荐阅读顺序: 1.题目->2.题目分析->3.题目知识点 1.题目 如…

前端vue2生成二维码并可保存

这里分成两步&#xff1a; 生成二维码 1、使用qrcode.js生成二维码 npm i qrcode --save2、使用逻辑 <canvas id"merQRCode" style"display: inline-block"></canvas>toMakeQRCode(value) {var qrCodeDom document.getElementById("m…

el-dialog嵌套使用,只显示遮罩层的问题

直接上解决方法 <!-- 错误写法 --><el-dialog><el-dialog></el-dialog></el-dialog><!-- 正确写法 --><el-dialog></el-dialog><el-dialog></el-dialog>我是不建议嵌套使用的&#xff0c;平级也能调用&#xff0c…

【前端HTML】HTML基础

文章目录 HTML标签标签属性 基本结构文档声明HTML标准结构HTML基础排版标签语义化标签块级元素与行内元素文本标签图片标签超链接跳转到指定页面跳转到文件跳转到锚点唤起指定应用 列表有序列表无序列表列表嵌套自定义列表 表格基本结构常用属性跨行跨列 常用标签表单基本结构常…

长虹智能电视3D51C4000iJ、3D60C4000iJ ZPM41Gi1机芯 整机USB刷机升级方法,及刷机程序

机芯&#xff1a;ZPM41Gi1 适用机型&#xff1a;3D51C4000iJ、3D60C4000iJ 升级方法&#xff1a; 1、将文件下载到电脑&#xff0c;解压后有3个文件&#xff0c;3个文件放到U盘的根目录。U盘必须使用FAT32格式&#xff1b; 2、将U盘接入电视的USB接口&#xff1b; 3、将电…

大创项目推荐 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

慢速 HTTP 攻击 Slow HTTP Attack漏洞原理以及修复方法

漏洞名称 &#xff1a;Slow Http attack、慢速攻击 漏洞描述&#xff1a;慢速攻击基于HTTP协议&#xff0c;通过精心的设计和构造&#xff0c;这种特殊的请求包会造成服务器延时&#xff0c;而当服务器负载能力消耗过大即会导致拒绝服务。HTTP协议规定&#xff0c;HTTP Reques…

VirtualBox安装openSUSE-Leap-15.5虚拟机并配置网络

VirtualBox安装openSUSE-Leap-15.5虚拟机并配置网络 适用于在VirtualBox平台上安装openSUSE-Leap-15.5虚拟机。 1. 安装准备 1.1 安装平台 Windows 11 1.2. 软件信息 软件名称软件版本安装路径Oracle VM VirtualBoxVirtualBox-7.0.12-159484D:\softwareopenSUSE-Leapopen…

HarmonyOS 转场动画 ForEach控制

本文 我们继续说组件的专场特效 上文 HarmonyOS 转场动画 我们通过if控制了转场效果 本文 我们通过 ForEach 控制它的加载和删除 这时候就有人会好奇 ForEach 怎么控制删除呢&#xff1f; 很简单 循环次数不同 例如 第一次 10个 第二次 5个 那么后面的五个就相当于删除啦 我们…