Kafka知识总结(分区机制+压缩机制+拦截器+副本机制)

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

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

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

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

在这里插入图片描述

分区机制

分区策略

分区策略是决定生产者将消息发送到哪个分区的算法。

轮询策略(默认)

顺序分配。比如一个主题下有 3 个分区,那么第一条消息被发送到分区 0,第二条被发送到分区 1,第三条被发送到分区 2,以此类推。当生产第 4 条消息时又会重新开始,即将其分配到分区 0。

随机策略

随意地将消息放置到任意一个分区上。

消息键策略

每条消息定义消息Key,同一个 Key 的所有消息都进入到相同的分区里面。

压缩机制

在 Kafka 中,压缩发生在两个地方:生产者端Broker 端

生产者程序中配置 compression.type 参数即表示启用指定类型的压缩算法。

 Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("acks", "all");props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");// 开启GZIP压缩props.put("compression.type", "gzip");Producer<String, String> producer = new KafkaProducer<>(props);

何时解压缩?

当消息到达 Consumer 端后,由 Consumer 自行解压缩还原成之前的消息。

拦截器

Kafka 拦截器分为生产者拦截器和消费者拦截器。

生产者拦截器允许在发送消息前以及消息提交成功后植入拦截器逻辑;而消费者拦截器支持在消费消息前以及提交位移后编写特定逻辑。

当前 Kafka 拦截器的设置方法是通过参数配置完成的。生产者和消费者两端有一个相同的参数,名字叫 interceptor.classes,它指定的是一组类的列表,每个类就是特定逻辑的拦截器实现类。

假设第一个拦截器的完整类路径是 com.yourcompany.kafkaproject.interceptors.AddTimeStampInterceptor,第二个类是com.yourcompany.kafkaproject.interceptors.UpdateCounterInterceptor

Properties props = new Properties();
List<String> interceptors = new ArrayList<>();
interceptors.add("com.yourcompany.kafkaproject.interceptors.AddTimestampInterceptor");  
interceptors.add("com.yourcompany.kafkaproject.interceptors.UpdateCounterInterceptor");
props.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, interceptors);
......

副本机制

同一个分区下有多个副本,分散保存在不同的Broker 上,能够对抗部分 Broker 宕机带来的数据不可用。

在这里插入图片描述

副本角色

在这里插入图片描述

追随者副本是不对外提供服务的,任何一个追随者副本都不能响应消费者和生产者的读写请求,所有的请求都必须由领导者副本来处理,追随者副本不处理客户端请求,它唯一的任务就是从领导者副本异步拉取消息,并写入到自己的提交日志中,从而实现与领导者副本的同步。

当领导者副本挂掉了,或者说领导者副本所在的 Broker 宕机时,Kafka 依托于ZooKeeper 提供的监控功能能够实时感知到,并立即开启新一轮的领导者选举,从追随者副本中选一个作为新的领导者,老 Leader 副本重启回来后,只能作为追随者副本加入到集群中。

ISR副本集合

ISR 中的副本都是与 Leader 同步的副本,相反,不在 ISR 中的追随者副本就被认为是与 Leader 不同步的。

Leader 副本天然就在 ISR 中。也就是说,ISR 不只是追随者副本集合,它必然包括 Leader 副本。甚至在某些情况下,ISR 只有 Leader 这一个副本。

Follower 是否与 Leader 同步的标准:

Broker 端参数 replica.lag.time.max.ms 参数。

这个参数的含义是Follower 副本能够落后 Leader 副本的最长时间间隔,默认值是 10 秒。只要一个 Follower 副本落后 Leader 副本的时间不连续超过 10 秒,那么 Kafka 就认为该Follower 副本与 Leader 是同步的,即使此时 Follower 副本中保存的消息明显少于Leader 副本中的消息。

倘若该副本后面慢慢地追上了 Leader 的进度,那么它是能够重新被加回ISR 的,ISR 是一个动态调整的集合,而非静态不变的。

Unclean领导者选举

通常来说,非同步副本落后Leader 太多,因此,如果选择这些副本作为新 Leader,就可能出现数据的丢失。

在 Kafka 中,选举这种副本的过程称为 Unclean 领导者选举。Broker 端参数 unclean.leader.election.enable 控制是否允许 Unclean 领导者选举。

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

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

相关文章

MySQL 存储

关系型数据库是基于关系模型的数据库&#xff0c; 而关系模型是通过二维表来保存的&#xff0c;所以关系型数据库中的数据的村方式就是行列组成的表&#xff0c;每一列代表一个字段&#xff0c;每一行代表一条记录。表可以看作某个实体的集合&#xff0c;实体之间存在的联系需要…

【区块链】如何发行自己的加密货币到以太坊测试网络,remixIDE发行自己的数字货币

如何发行自己的加密货币到以太坊测试网络 环境 reminx在线编辑器&#xff1a;https://remix.ethereum.org/安装有小狐狸钱包插件&#xff08;MetaMask&#xff09; 如何部署代币&#xff1f; 创建一个名字叫做HelloMyToken.sol的文件。编写好智能合约&#xff0c;这边我要发…

bug+测试用例

bug的概念&#xff1a; 1.当且仅当规格说明是存在的并且正确&#xff0c;程序与规格说明之间的不匹配才是错误。 2.当需求规格说明书没有提到的功能&#xff0c;判断标准以最终用户为准&#xff1b;当程序没有实现其最终用户合理预期的功能要求时&#xff0c;就是软件错误 bug…

大模型算法面试题(十三)

本系列收纳各种大模型面试题及答案。 1、领域模型词表扩增是不是有必要的? 领域模型词表扩增是否必要&#xff0c;取决于多个因素&#xff0c;主要包括以下几个方面&#xff1a; 领域复杂性&#xff1a;如果领域本身非常复杂&#xff0c;包含大量专业术语、缩写、行业特定表达…

mybatis插入mysql数据:中文乱码

1.问题描述 中文字段乱码&#xff0c;不能正常显示 2.解决方法 猜测是未指定编码造成的&#xff0c;在配置文件mybatis-config.xml添加配置。 <environment id"development"><transactionManager type"JDBC"/><dataSource type"POO…

golang设置远程调试

1. 目标机器构建安装dlv https://github.com/go-delve/delve go build之后将编译号的dlv命令路径添加到PATH里 2. 目标机器下载源代码并且运行dlv dlv debug --headless --listen:2345 --api-version2 --accept-multiclient 3.本机添加go remote 4. 设置断点即可

web前端开发一、VScode环境搭建

1、VScode安装live server插件&#xff0c;写完代码后&#xff0c;保存就会在浏览器自动更新&#xff0c;不需要再去浏览器点击刷新了 2、创建html文件 3、在文件中输入感叹号 &#xff01; 4、选择第一个&#xff0c;然后回车&#xff0c;就会自动输入html的标准程序 5、…

Python酷库之旅-第三方库Pandas(047)

目录 一、用法精讲 166、pandas.Series.max方法 166-1、语法 166-2、参数 166-3、功能 166-4、返回值 166-5、说明 166-6、用法 166-6-1、数据准备 166-6-2、代码示例 166-6-3、结果输出 167、pandas.Series.mean方法 167-1、语法 167-2、参数 167-3、功能 167…

Mysql中如何实现两列的值互换?给你提供些思路。

文章目录 Mysql中如何实现两列的值互换1、第一感觉此sql应该能处理问题了2、需要一个地方存要替换的值&#xff0c;不然两列搞不定。2.1 加第三列&#xff1f;&#xff08;能解决&#xff0c;但是看起来呆呆&#xff09;2.2 上临时表&#xff08;搞点弯路走走&#xff09; 示例…

【VSCode实战】Golang无法跳转问题竟是如此简单

上一讲【VSCode实战】Go插件依赖无法安装 – 经云的清净小站 (skycreator.top)&#xff0c;开头说到了在VSCode中Golang无法跳转的问题&#xff0c;但文章的最后也没给出解决方案&#xff0c;只解决了安装Go插件的依赖问题。 解决了插件依赖问题&#xff0c;无法跳转的问题也离…

接口测试之测试原则、测试用例、测试流程详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口的介绍 软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口&…

LK漏感值在网络变压器测试中是否有很大的作用?

今天客户一个产品异常问题&#xff0c;就是说LK漏感值严重超标产品规格书参数&#xff0c;今天我们讲讲这个参数在网络变压器其中的影响。LK漏感值在网络变压器的测试和性能评估中扮演着重要的角色。漏感&#xff0c;或称为漏磁场感抗&#xff0c;是指变压器中不参与主要能量传…

卷积的意义及其派生(一)

1.卷积的意义 1.1从LTI的角度看 卷积最开始其实是信号处理中用来描述线性移不变系统Linear time-invariant systems的。线性&#xff0c;表明可以叠加&#xff0c;信号可以拆分成脉冲的响应&#xff1b;时不变&#xff0c;指信号不随着时间的迁移改变&#xff0c;意味着能量守…

机器学习(五) -- 无监督学习(1) --聚类1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;7&#xff09; --SVM2 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;1&#xff09; --聚类2 前言 tips&#xff1a;标题前有“***”的内容…

Python酷库之旅-第三方库Pandas(048)

目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…

驾驭代码的无形疆界:动态内存管理揭秘

目录 1.:为什么要有动态内存分配 2.malloc和free 2.1:malloc 2.2:free 3.calloc和realloc 3.1:calloc 3.1.1:代码1(malloc) 3.1.2:代码2(calloc) 3.2:realloc 3.2.1:原地扩容 3.2.2:异地扩容 3.2.3:代码1(原地扩容) 3.2.3:代码2(异地扩容) 4:常见的动态内存的错误…

【算法】傅里叶变换

一、引言 傅里叶变换是一种在信号处理、图像处理、通信等领域中广泛应用的数学工具。它可以将信号从时域转换到频域&#xff0c;从而揭示信号的频率成分。 二、算法原理 傅里叶变换的基本思想是将一个时域信号分解为多个不同频率的正弦和余弦波的叠加。对于连续信号&#xff0c…

【轻量化神经网络的MCU部署/边缘计算:基于GD32H7】开源GD32AI-ModelZoo工具的完善与详细使用说明

本文档将对gd32ai-modelzoo中的使用方法进行更加细致的介绍。并对原博主提供的gd32ai-modelzoo部分代码进行了修改&#xff0c;使其可以更加顺利地运行。 原开源工程地址&#xff1a;https://github.com/HomiKetalys/gd32ai-modelzoo 原作者博客&#xff1a;https://mbb.eet-ch…

Springboot项目的行为验证码AJ-Captcha(源码解读)

目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目…

vue3前端架构---打包配置

最近看到几篇vue3配置项的文章&#xff0c;转载记录一下 Vue3.2 vue/cli-service 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案-CSDN博客文章浏览阅读2k次&#xff0c;点赞8次&#xff0c;收藏9次。Vue3.2 vue/cli-service 打包 chunk-vendors.js 文件过大导致页…