Kafka知识总结(消费者+重平衡)

devtools/2024/9/19 6:57:36/ 标签: kafka, linq, 分布式

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

消费者

消费者策略

RangeAssignor:默认消费者策略。

对一个消费者组来说,消费方式是以分区总数除以消费者总数来决定,如果不能整除,往往是从头开始将剩余的分区分配。

在这里插入图片描述

RoundRobinAssignor:对于同一组消费者来说,使用轮训的方式来决定消费者消费的分区,既依次分配一个,直到分区被分配完毕。

在这里插入图片描述

StickyAssignor,是在0.11.x新增的,保证分配最大程度地平衡,同时保留尽可能多的现有分区分配。

意思就是前面两个当同组内有新的消费者加入或者旧的消费者退出的时候,会从新开始决定消费者消费方式,但是Sticky在同组中有新的消费者加入或者旧的消费者退出时,不会直接开始重构分配策略,而是保留现有消费者消费策略,将退出的消费者所消费的分区平均分配给现有消费者,新增消费者同理,同其他现存消费者的消费策略中分离。

CooperativeStickyAssignor,它继承了StickyAssignor的逻辑,但允许重构分区策略。

Push和Pull

Kafka消费端是通过主动拉取消息的方式来消费的。

消费者组

Consumer Group是指组内有多个消费者或消费者实例,它们共享一个公共的 ID,这个 ID 被称为 Group ID。组内的所有消费者协调在一起来消费订阅主题的所有分区。

Consumer Group 下可以有一个或多个 Consumer 实例。

Group ID 是一个字符串,在一个 Kafka 集群中,它标识唯一的一个 Consumer Group。

Consumer Group 下所有实例订阅的主题的单个分区,只能分配给组内的某个 Consumer 实例消费,这个分区也可以被其他的 Group 消费。

点对点模型和发布/订阅模型

如果所有实例都属于同一个 Group,那么它实现的就是消息队列模型;如果所有实例分别属于不同的 Group,那么它实现的就是发布/订阅模型。

Consumer实例个数

理想情况下,Consumer 实例的数量应该等于该 Group 订阅主题的分区总数。

位移主题

Consumer 的位移管理机制就是将 Consumer 的位移数据作为一条条普通的 Kafka 消息,提交到 __consumer_offsets 中。

__consumer_offsets 的主要作用是保存 Kafka 消费者的位移信息。它要求这个提交过程不仅要实现高持久性,还要支持高频的写操作。

位移主题怎么被创建的?

当 Kafka 集群中的第一个 Consumer 程序启动时,Kafka 会自动创建位移主题。

位移主题的分区由 Broker 端参数 offsets.topic.num.partitions 设置,默认值是 50,因此 Kafka 会自动创建一个 50 分区的位移主题。

副本数由 Broker 端参数 offsets.topic.replication.factor 设置,它的默认值是 3。

怎么提交位移?

提交位移的方式有两种:自动提交位移和手动提交位移。

Consumer 端有个参数叫 enable.auto.commit,如果值是 true,则 Consumer 在后台默默地定期提交位移,提交间隔由一个参数 auto.commit.interval.ms 来控制。

问题:只要 Consumer 一直启动着,它就会无限期地向位移主题写入消息。

假设 Consumer 当前消费到了某个主题的最新一条消息,位移是 100,之后该主题没有任何新消息产生,故 Consumer 无消息可消费了,所以位移永远保持在 100。

由于是自动提交位移,位移主题中会不停地写入位移 =100 的消息。

Kafka 使用 Compact 策略来删除位移主题中的过期消息,避免该主题无限期膨胀。

Kafka 提供了专门的后台线程定期巡检待 Compact 的主题,看看是否存在满足条件的可删除数据。后台线程叫 Log Cleaner

重平衡

Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 Consumer 如何达成一致,来分配订阅 Topic 的每个分区。

比如某个 Group 下有 20 个 Consumer 实例,它订阅了一个具有 100 个分区的 Topic。正常情况下,Kafka 平均会为每个 Consumer 分配 5 个分区。这个分配的过程就叫 Rebalance。

Rebalance的触发条件:

组成员数发生变更:比如有新的 Consumer 实例加入组或者离开组。

订阅主题数发生变更。

订阅主题的分区数发生变更:当分区数增加时,就会触发订阅该主题的所有 Group 开启 Rebalance。

在 Rebalance 过程中,所有 Consumer 实例都会停止消费,等待 Rebalance 完成

可能发生Rebalance的场景

1、未能及时发送心跳,导致 Consumer 被踢出Group而引发的。

#单位ms 设置心跳传送时间几毫秒一次 ,默认是3000ms
heartbeat.interval.ms#单位ms 多长时间没有心跳,后连接超时,默认10000ms
session.timeout.ms

2、Consumer消费时间过长导致的,默认10分钟。


http://www.ppmy.cn/devtools/88105.html

相关文章

面试经验|问题

请谈一下对公司的看法,为什么想来工作?我这样相信对这个职位你是最好的人选?你为何要跳槽?你最大的优点和缺点分别是什么?你有哪些兴趣爱好或具备什么资格证书?工作中你所取得的最大成就是什么?…

MySQL存储引擎

MySQL 的数据文件存取涉及多个方面,包括存储引擎、数据文件的结构以及操作系统的文件系统。以下是 MySQL 数据文件的存取机制的概述: 1. 存储引擎 MySQL 支持不同的存储引擎,每种引擎对数据文件的存取方式有所不同。最常见的存储引擎包括&a…

AI助力,轻松组建你的汽车梦之队!

咱汽车销售想增加目标客户,可不简单!市场竞争那叫一个激烈,吸引客户注意力太难了!不过别怕,咱有办法。我在 ai123.cn 这个平台上,找到了好多适合咱的 AI 工具和资源,这就跟大家分享分享。 比如说…

新型蜜罐有哪些?未来方向如何?

前言:技术发展为时代带来变革,同时技术创新性对蜜罐产生推动力。 一、新型蜜罐的诞生 技术发展为时代带来变革,同时技术创新性对蜜罐产生推动力,通过借鉴不同技术思想、方法,与其它技术结合形成优势互补,…

Python中检查英文单词和转换首字母大写

如果我们只是如下需求,则一个函数就可以了。 将一段文本中的英文单词的首字母改为大写,不论它是不是一个单个字符,比如“a”,this is a dog. 经过这样的变换被变为 This Is A Dog. 那么string的title方法即可: inp…

OpenAI 发布全新 GPT-4o mini 模型用于取代 GPT-3.5

OpenAI已经弃用 GPT-3.5 模型,将使用 GPT-4o mini 模型取代它,这款模型如何?下面一起来了解一下。 GPT-4o mini 有消息称 OpenAI 准备放弃 GPT-3.5 模型转而使用 GPT-4o mini 模型取代,就在今天早上打开 ChatGPT 之后看&#xf…

陀螺仪LSM6DSOW开发(6)----获取磁力计数据

陀螺仪LSM6DSOW开发.6--获取磁力计数据 概述视频教学样品申请源码下载硬件准备九轴融合通信模式速率参考程序变量定义获取ID复位操作BDU设置设置速率启用偏移消除开启温度补偿设置为连续模式初始化轮询读取数据演示 概述 本文将介绍如何使用 LIS2MDL 传感器来读取数据。主要步…

数据库相关

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer…

MYSQL 根据条件order by 动态排序

文章目录 案例1:根据动态值的不同,决定某个字段是升序还是降序案例2:根据动态值的不同,决定使用哪个字段排序 最近在做大数据报表时,遇到这样一种情况,若是A类型,则部门按照正序排序&#xff1b…

深入Scrapy框架:掌握其工作流程

深入Scrapy框架:掌握其工作流程 引言 作为一名资深的Python程序员,我对各种数据采集工具有着深刻的理解。Scrapy,作为一个上场率极高的爬虫框架,以其高效、灵活和强大的特性,成为数据采集领域的不二选择。在本文中&a…

语音识别模型whisper的参数说明

一、whisper简介: Whisper是一种通用的语音识别模型。它是在各种音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。 二、whisper的参数 1、-h, --help 查看whisper的参数 2、--model {tiny.en…

60个常见的 Linux 指令

常见60个Linux指令 1.ssh 登录到计算机主机2.ls 列出目录内容3.pwd 当前终端会话所在的完整路径4.cd 切换当前工作目录5.touch 创建空文件或更新文件的时间戳6.echo 终端输出文本或变量值7.nano 在终端中编辑文件8.vim 文本编辑器9.cat 查看、连接和创建文件10.shred 安全删除敏…

linux shell 函数

脚本函数基础 创建函数 在 bash shell 脚本中创建函数的语法有两种。第一种语法是使用关键字 function,随后跟上分配给该代码块的函数名: function name {commands }name 定义了该函数的唯一名称。脚本中的函数名不能重复。 commands 是组成函数的一个…

使用ros::init设置节点名称 和 launch文件中node里面使用name参数设置节点名称的区别

在 ROS 中,ros::init 和 launch 文件中 node 标签的 name 参数都用于设置节点的名称,但它们的作用和影响有所不同: 1. ros::init 设置节点名称 当你使用 ros::init 函数初始化一个 ROS 节点时,你可以通过传递第三个参数来设置节…

hadoop学习(二)

一.MapReduce 1.1定义:是一个分布式运算程序的编程框架 1.2核心功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 1.3优点 1)易于编程 它简单的实现一些接口&#…

Nginx 反向代理https域名接口的注意事项

网络环境条件及实际调用需求如下图所示: 如图,要点如下: 应用实际请求的协议是 http,而通过 nginx 反向代理的最终接口是 https应用实际请求的域名是 mynginx.com,而通过 nginx 反向代理的最终接口域名是 api.weixin.…

集成与 API 支持:开放架构的灵活性

在数字化转型的浪潮中,企业对 IT 监控的需求已经从单一的系统性能监控转变为对整个IT生态系统的全面监控。这不仅包括了传统的硬件和软件监控,还扩展到了对云服务、容器化技术以及微服务架构的监控。观测云平台以其自动化和编排能力,为企业提…

2024年人工智能顶级会议投稿信息汇总(数据挖掘领域)

数据挖掘是信息科学领域的重要分支,致力于挖掘和分析庞大数据集中的有价值模式与规律。它融合了统计学、机器学习和数据库技术,目的是从海量数据中抽取有用的知识,辅助决策制定过程。本文首先精选介绍数据挖掘领域内的重要会议,包…

算法学习6——贪心算法

什么是贪心算法? 贪心算法是一种在每一步选择中都采取当前状态下最优或最有利的选择的算法。其核心思想是通过一系列局部最优选择来达到全局最优解。贪心算法广泛应用于各种优化问题,如最短路径、最小生成树、背包问题等。 贪心算法的特点 局部最优选…

Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入|删除段落|删除标签

本教程主要实现【Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入|删除段落|删除标签】。 本文源码:https://gitee.com/songfayuan/go-zero-demo 教程源码分支:master 分支(_examples/word-template/fill-word-template.go&…