Kafka之ISR机制的理解
文章目录
- Kafka的基本概念
- 什么是ISR
- ISR的维护机制
- ISR的作用
- ISR相关配置参数
- 同步过程
- 示例代码
- 总结
Kafka中的ISR(In-Sync Replicas同步副本)机制是确保数据高可用性和一致性的核心组件。
Kafka的基本概念
在Kafka中,数据被组织成主题(Topic),每个主题分为多个分区(Partition)。每个分区有多个副本(Replica),这些副本分布在不同的Broker上,以确保数据的冗余和高可用性。
- Leader Replica:每个分区有一个领导副本,负责处理所有读写请求。
- Follower Replica:其他副本作为追随者,从领导副本中复制数据。
什么是ISR
ISR(In-Sync Replicas)是一个分区副本集合,这些副本被认为是与领导副本保持同步的。具体来说,ISR中的副本是那些能够在一定时间内(由参数replica.lag.time.max.ms指定)将数据同步到与领导副本相同位置的副本。
Kafka根据副本同步的情况,分成了3个集合:
- AR (Assigned Replicas) : 包括ISR和OSR
- ISR (In-sync Replicas) : 和leader副本保持同步的副本集合,可以被认为是可靠的数据
- OSR (Out-Sync Replicas) :和Leader副本同步失效的副本集合
AR=ISR+OSR。
ISR的维护机制
- 领导副本更新ISR:
领导副本会定期检查每个追随者副本的状态。如果某个追随者副本在指定时间内未能跟上领导副本的更新,领导副本会将其从ISR中移除。 - 追随者副本重新加入ISR:
当追随者副本追上了领导副本的日志进度(即达到了与领导副本相同的日志偏移量),领导副本会将其重新加入ISR。
ISR的作用
- 数据一致性保证:
生产者在写入数据时,可以通过设置acks参数来控制数据的一致性级别。设置acks=all(或acks=-1)时,领导副本会等待所有ISR中的副本都确认收到数据后,才向生产者发送确认。这保证了数据在写入时至少被写入到ISR中的所有副本。 - 故障容错能力:
如果领导副本发生故障,Kafka会从ISR中选取一个新的领导副本。由于ISR中的副本与之前的领导副本保持同步,新的领导副本能够继续提供服务,而不会丢失数据。
ISR相关配置参数
replica.lag.time.max.ms:
追随者副本与领导副本之间的最大允许同步延迟时间。如果追随者副本超过此时间没有同步到领导副本,会被移出ISR。
min.insync.replicas:
最少同步副本数。生产者在设置acks=all时,只有当ISR中的副本数不少于这个值,才会确认消息的写入。这个参数用于在保证数据可用性的同时,控制生产者的写入成功率。
同步过程
- a. 数据写入
客户端将数据写入主副本。
主副本将数据写入本地日志并确认写入。
主副本异步将数据推送给所有的从副本。 - b. 副本同步
从副本收到主副本的数据后,将其写入本地日志,并返回确认。
当从副本确认写入数据后,主副本会更新其 ISR(In-Sync Replicas,即同步副本集合),表示这些副本已经同步到最新的数据。
示例代码
以下是一个简单的生产者示例代码,展示了如何使用acks参数来确保数据写入的高可用性:
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.apache.kafka.clients.producer.Callback;import java.util.Properties;public class KafkaProducerExample {public static void main(String[] args) {Properties props = new Properties();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");props.put(ProducerConfig.ACKS_CONFIG, "all"); // 确保数据被所有ISR副本确认KafkaProducer<String, String> producer = new KafkaProducer<>(props);try {for (int i = 0; i < 10; i++) {ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key" + i, "value" + i);producer.send(record, new Callback() {@Overridepublic void onCompletion(RecordMetadata metadata, Exception exception) {if (exception == null) {System.out.println("Message sent successfully to partition " + metadata.partition() + " with offset " + metadata.offset());} else {exception.printStackTrace();}}});}} finally {producer.close();}}
}
总结
Kafka的ISR机制通过维护一个与领导副本同步的副本集合,确保了数据的一致性和高可用性。通过合理配置和使用ISR机制,Kafka能够在面对节点故障时,仍然保证数据的安全和系统的稳定。
相关文章:
Kafka之ISR机制的理解
文章目录 Kafka的基本概念什么是ISRISR的维护机制ISR的作用ISR相关配置参数同步过程示例代码总结 Kafka中的ISR(In-Sync Replicas同步副本)机制是确保数据高可用性和一致性的核心组件。 Kafka的基本概念 在Kafka中,数据被组织成主题…...
如何设计一个点赞系统
首先我们定义出一个点赞系统需要对外提供哪些接口: 1.用户对特定的消息进行点赞; 2.用户查看自己发布的某条消息点赞数量以及被哪些人赞过; 3.用户查看自己给哪些消息点赞过; 这里假设每条消息都有一个message_id, 每一个用户都…...
对象存储测试工具-s3cmd
一、环境安装 官网:https://s3tools.org/s3cmd 下载安装包:https://s3tools.org/download GitHub:https://github.com/s3tools/s3cmd/releases 本文安装包:https://github.com/s3tools/s3cmd/releases/download/v2.0.2/s3cmd-2.0…...
OpenCV--图像色彩空间及转换
图像色彩空间及转换 python代码和笔记 python代码和笔记 import cv2 色彩空间,基础:RGB或BGR OpenCV中: 一、HSV(HSB):用的最多, Hue:色相-色彩(0-360),红色:0,绿色&…...
RIP解决不连续子网问题
#交换设备 RIP解决不连续子网问题 一、不连续子网的概念 相同主网下的子网,被另一个主网分割,例如下面实验拓扑在某公司的网络整改项目中,原先R1 和RS 属于同一主网络 10.0.0.0/8,现被 R2、R3、R4 分离,整网采用了 …...
动态轮换代理IP是什么?有什么用?
如果您要处理多个在线帐户,选择正确的代理类型对于实现流畅的性能至关重要。但最适合这项工作的代理类型是什么? 为了更好地管理不同平台上的多个账户并优化成本,动态住宅代理IP通常作用在此。 一、什么是轮换代理? 轮换代理充当…...
MAC配置VScode中C++项目debug环境
文章目录 配置步骤问题解决Unable to start debugging. LLDB exited unexpectedly with exit code 137 (0x89). 配置步骤 在Mac上配置VS Code以进行C调试涉及几个步骤: 安装必要的工具: 确保您已经安装了Visual Studio Code和C插件。 检查是否安装了Clang…...
PostgreSQL源码分析——CREATE CAST
CREATE CAST源码分析 CREATE CAST用法 CREATE CAST —— 定义一个用户自定义的类型转换 用法如下: CREATE CAST (source_type AS target_type)WITH FUNCTION function_name [ (argument_type [, ...]) ][ AS ASSIGNMENT | AS IMPLICIT ]CREATE CAST (source_type…...
解锁5G新营销:视频短信的优势与全方位推广策略
随着5G时代的全面来临,企业的数字化转型步伐日益加快,视频短信作为新兴的数字营销工具,正逐步展现出其巨大的潜力。视频短信群发以其独特的形式和内容,将图片、文字、视频、声音融为一体,为用户带来全新的直观感受&…...
视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台
目录 一、背景说明 二、ISUP协议介绍 1、海康ISUP协议概述 2、ISUP协议支持主码流和子码流切换 (1)灵活配置和个性化 (2)适应不同网络带宽,提高使用体验 3、海康ehome相关文章 三、ISUP协议接入说明 1、平台侧…...
PostgreSQL查询用户
在 PostgreSQL 中,可以通过查询系统表来确定当前用户是否是超级管理员(超级用户)。具体来说,可以使用 pg_roles 系统表,该表包含数据库中所有角色的信息。 以下是查询当前用户是否是超级用户的 SQL 语句: …...
力扣1539.第k个缺失的正整数
力扣1539.第k个缺失的正整数 占位运算 只要n<k ,k;最终k就是结果 class Solution {public:int findKthPositive(vector<int>& arr, int k) {for(int n : arr){if(n < k) k ;else break;}return k;}};...
如何快速解决屏幕适配问题
下面将利用postcss插件快速解决屏幕适配问题。仅用少量代码,新手均可快速使用。 Step1. 安装 npm install postcss-px-to-viewport-8-plugin --save-dev Step2. 新建 postcss.config.js 文件,做基础配置 module.exports {plugins: {postcss-px-to-v…...
Go基础编程 - 09 - 通道(channel)
通道(channel) 1. 声明2. channel的操作3. 无缓冲通道4. 有缓冲通道5. 如何优雅的从通道循环取值6. 单向通道7. 异常总结 上一篇:结构体 Go语言的并发模式:不要通过共享内存来通信,而应该通过通信来共享内存。 Go语言…...
[SAP ABAP] 数据类型
1.基本数据类型 示例1 默认定义的基本数据类型是CHAR数据类型 输出结果: 示例2 STRING数据类型用于存储任何长度可变的字符串 输出结果: 示例3 DATE数据类型用于存储日期信息,并且可以存储8位数字 输出结果: 提示Tips:日期和时间类型的变量可以直接进…...
什么是Vue开发技术
概述 Vue.js 是一个用于构建用户界面的渐进式框架,它设计得非常灵活,可以轻松地被集成到任何项目中。 vue是视图的发音,其目的是帮助开发者易于上手,提供强大的功能构建复杂的应用程序 示例 以下是vue基本的语法概述 声明式渲…...
【QT】
通信服务端实现 widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox>//消息 #include <QTcpServer> #include <QList> #include <QTcpSocket> QT_BEGIN_NAMESPAC…...
【转载】使用 .NET Upgrade Assistant(升级助手)升级 .NET 老旧版本项目
使用 .NET Upgrade Assistant(升级助手)升级 .NET 老旧版本项目:https://blog.csdn.net/ChaITSimpleLove/article/details/134711604...
SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程
前言 Spring Boot 项目启动时会在控制台打印出一个 banner,下面演示如何定制这个 banner。 若依也会有相应的启动动画 _ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\…...
访问控制列表(Access Control Lists,ACL)与哈希查找的爱恨情怨
访问控制列表(Access Control Lists,ACL)与哈希查找 什么是访问控制列表ACL?直接说ACL是干啥的ACL概念为什么需要ACLACL类型ACL匹配机制使用例子 哈希查找什么是哈希查找?哈希查找的基本原理哈希查找的步骤 哈希查找在…...
全桥LLC变换器死区时间优化实战:从IGBT硬开通到完美ZVS的调试记录
全桥LLC变换器死区时间优化实战:从IGBT硬开通到完美ZVS的调试记录 在电力电子领域,LLC谐振变换器因其高效率、高功率密度和良好的EMI特性,已成为中高功率应用的理想选择。然而,实际调试过程中,死区时间与励磁电感的匹配…...
OpenClaw版本升级:nanobot镜像迁移全记录
OpenClaw版本升级:nanobot镜像迁移全记录 1. 升级背景与准备工作 去年我在本地部署了基于OpenClaw v1.2的nanobot镜像,这套系统一直稳定运行着我的自动化办公流程。直到上个月收到社区通知,新版本v2.1重构了核心架构,特别是技能…...
这份榜单够用!高效论文写作全流程AI论文软件推荐(2026 最新)
2026年AI论文软件持续升级,论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节,以下工具按环节精准匹配,兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求,覆盖…...
大语言模型应用落地:从RAG到工作流,IT企业智能转型全攻略!
引言检索增强生成(RAG)微调(Fine-Tuning)智能体(Agents)工作流与流程编排(Workflow)企业落地策略与阶段规划落地难点与最佳实践建议结语引言大语言模型(LLM)技…...
多模态扩展实验:OpenClaw+Qwen3-32B处理图片描述生成
多模态扩展实验:OpenClawQwen3-32B处理图片描述生成 1. 实验背景与动机 最近在探索如何将OpenClaw的自动化能力扩展到视觉领域。作为一个长期依赖文本交互的框架,OpenClaw能否结合多模态大模型处理图像任务?这引发了我的兴趣。恰好手头有台…...
避坑指南:ESTUN Editor安装后,TP虚拟示教器bricks.ini配置文件到底在哪?
ESTUN Editor安装后TP虚拟示教器配置文件定位全解析 当你在工业机器人编程中同时安装了ESTUN Editor集成环境和独立TP软件包时,最让人头疼的问题莫过于找不到正确的bricks.ini配置文件。这个问题看似简单,却直接影响着虚拟示教器与机器人控制器的连接稳定…...
从理论到实践:在快马平台构建基于openclaw的物流分拣仿真系统
最近在研究物流自动化分拣系统时,发现openclaw机械爪控制在实际应用中存在不少痛点。传统开发流程需要从零搭建仿真环境、编写控制逻辑、调试物理交互,整个过程耗时耗力。于是尝试用InsCode(快马)平台快速构建了一个物流分拣仿真系统,效果出乎…...
24/7运行指南:OpenClaw+GLM-4-7-Flash树莓派部署与看门狗配置
24/7运行指南:OpenClawGLM-4-7-Flash树莓派部署与看门狗配置 1. 为什么选择树莓派作为OpenClaw的宿主设备? 去年冬天,当我第一次尝试让OpenClaw在我的主力开发机上24小时运行时,遭遇了严重的资源冲突问题。半夜运行的自动化任务…...
PasteMD真实案例分享:从零散笔记到结构化学习计划的全过程
PasteMD真实案例分享:从零散笔记到结构化学习计划的全过程 1. 引言:当杂乱笔记遇上智能格式化 你是否经历过这样的困境?电脑桌面上散落着十几个临时创建的记事本文件,手机备忘录里堆满了未经整理的零散想法,会议录音…...
基于springboot框架的校园外卖管理系统的设计与实现
目录需求分析与功能规划技术选型与架构设计数据库设计与建模核心功能实现系统集成与测试部署与运维优化与扩展项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能规划 明确校园外卖管理系统的核心需求,包…...
