网站会员注册系统/自己想做个网站怎么做
Kafka 的多副本机制提升了数据容灾能力。
副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据;服务副本指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理。
1 副本刨析
1.1 相关概念
AR:Assigned Replicas,分区中的所有副本。
ISR:In-Sync Replicas,与leader副本保持同步状态的副本集合。
LEO:Log End Offset,分区中最后一条消息的下一个位置。
HW:High Watermark,高水位。标识了一个特定的消息偏移量,消费者只能拉取到这个偏移量之前的消息。HW是ISR集合中最小的LEO。
1.2 失效副本
在ISR集合之外的副本称为失效副本。即处于同步失效的状态。
broker端参数replica.lag.time.max.ms 配置了一个follower副本滞后于leader副本的最长时间间隔。(默认值30s)
当follower副本将leader副本LEO之前的日志全部同步过来的间隔时间超过这个值时,该副本处于同步失效状态,会从ISR集合中移除。
当副本追赶上leader时,会更新该副本的lastCaughtUpTimeMs。如果副本还未追赶上leader,则用当前时间-lastCaughtUpTimeMs计算差值,如果差值大于上面配置的值,那么该副本处于同步失效状态。
追赶上leader副本的判定标准是此副本的LEO是否不小于leader副本的HW。
1.2.1 ISR的伸缩
“isr-expiration”任务用于周期性地检测每个分区是否需要缩减其ISR集合。周期是replica.lag.time.max.ms配置参数的一半。当检测到ISR集合中有副本失效时,就会收缩ISR集合。
当ISR集合发生变更时,会将变更后的记录缓存到isrChangeSet中。isr-change-propagation会周期性(固定值为2500ms)地检查isrChangeSet。如果发现了变更记录,它会在Zookeeper的/isr_change_notification路径下创建一个保存isrChangeSet信息的节点。Kafka为/isr_change_notification添加了一个Watcher,当这个节点中有子节点发生变化时会触发Watcher的动作。
注意,频繁触发Watcher会影响性能,Kafka为避免这种情况,当检测到ISR集合发生变化时,还需要检查以下两个条件:
- 上次ISR集合发生变化距离现在已超过5s。
- 上次写入Zookeeper的时间距离现在已超过60s。
1.3 副本LEO与HW的变化
图 副本同步过程中LEO与HW的变化
follower 向leader拉取消息时,LEO与HW的变更步骤如下:
- follower向leader拉取消息时,请求会携带自身的LEO信息,即fetch_offset。
- leader收到请求时,会先检查该副本是否在ISR中,如果在,则将自身的HW值更新为所有ISR中的follower的LEO最小的值(leader会保存其他follower副本的LEO,会在返回响应之前更新对应follower的LEO)。然后连同消息和HW一起返回FetchResponse给follower。
- follower 在收到FetchResponse响应后,更新LEO,然后取自身LEO及返回的HW中的最小值来更新自身的HW。
1.3.1 LEO和HW的持久化
Kafka 会周期性的将所有分区的LEO刷写到recovery-point-offset-checkpoint中(恢复点文件)。将所有分区的HW刷写到replication-offset-checkpoint中(复制点文件)。
1.4 同步机制
在0.11.0版本之前,Kafka使用的是基于HW的同步机制,这样可能会出现数据丢失或数据不一致的问题。
1.4.1 数据丢失
图 副本宕机及恢复过程中数据丢失
- 如图,某刻A副本为follower副本,LEO=5,HW=3。B为leader。此时A发生宕机。
- A恢复,并且根据HW,对日志进行阶段,使LEO=3。
- B发生宕机,A被选举为leader。
- B恢复,成为follower。因为follower的HW不能大于leader的HW。所以B会更改HW,并进行日志阶段,使HW=3,LEO=3。
- 丢失2条消息。
1.4.2 数据不一致
图 副本宕机及恢复过程中数据不一致
- A与leader B 同时宕机。随后A先恢复,成为leader。
- 有1条消息写入到该分区,leader A 的LEO变为4,HW也变更为4。
- 此时B也恢复成为follower,因为其HW不大于leader的HW,且等于LEO,所以其不要解答日志,同时也不会拉取leader的数据。
- B与leader A 的最新一条消息不一致。
1.4.3 Leader Epoch
为了解决上述两种问题,从0.11.0版本开始引入leader epoch的概念。
leader epoch 代表leader的纪元信息,初始值为0,每当leader变更一次,该值就会加1。
每个副本都会增设一个矢量<LeaderEpoch => StartOffset>,其中StartOffset表示当前LeaderEpoch下写入的第一条消息的偏移量(LEO)。在发生leader epoch变更时,每个副本会将对应的矢量追加到其Log下的leader-epoch-checkpoint文件中。
follower副本从宕机状态恢复后,会先发送OffsetsForLeaderEpochRequest请求给leader。将携带follower当前的Leader Epoch值。leader 收到该请求后会返回当前的LEO。如果follower的Leader Epoch值和leader的不相同,那么leader将会查找 Leader epoch 为 follower 的Leader Epoch 值 + 1对应的StartOffset,并返回。
follower在收到响应后,根据返回值与自身的LEO作对比,来决定是否需要将日志阶段截断使LEO等于返回值。
图 副本宕机及恢复过程Leader epoch的变化
- A为leader,此时副本的LE(Leader epoch)都为0。B发生宕机,然后A发生宕机,此时C被选举为leader,并且C的LE+1,变更为1。
- B 恢复,并且向C发送OffsetsForLeaderEpochRequest请求,C返回3,B收到响应后,将日志截断,使得LEO=3。
注意:当leader epoch 发送变更时,leader将会通知其他非宕机副本,使得它们来更新自己的<LeaderEpoch => StartOffset>矢量信息。
- C发生宕机,B被选举为leader,并且B的LE+1,变更为2。随后B被写入两条新的消息,LEO变为5。
- A恢复,并且向B发送OffsetsForLeaderEpochRequest请求,B返回LE为1的StartOffset,即为3。A收到响应后,将日志截断,使得其LEO=3.
- 随后A变更LE为2。并且向B拉取消息。
相关文章:

Kafka 可靠性探究—副本刨析
Kafka 的多副本机制提升了数据容灾能力。 副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据;服务副本指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理。 1 副本刨析 1.1 相关概念 AR&…...

我的博文天地测试报告
我的博文天地测试报告 文章目录 我的博文天地测试报告 一.项目背景 二.项目功能 2.1 功能介绍 三.测试分类 3.1 功能测试 3.1.1 测试用例 3.1.2 实际执行测试的部分操作步骤/结果的截图 3.2 自动化测试 3.3 性能测试 3.1.2 用户登录 jmeter性能测试结果 性能测试遇到的困难 …...

EtherCAT主站IGH-- 35 -- IGH之pdo_list.h/c文件解析
EtherCAT主站IGH-- 35 -- IGH之pdo_list.h/c文件解析 0 预览一 该文件功能`pdo_list.c` 文件功能函数预览二 函数功能介绍`pdo_list.c` 中主要函数的作用1. `ec_pdo_list_init`2. `ec_pdo_list_clear`3. `ec_pdo_list_clear_pdos`4. `ec_pdo_list_total_size`5. `ec_pdo_list_a…...

嵌入式开发神器:Buildroot的介绍和使用方法
目录 引言**Buildroot 能做什么?****1. 生成交叉编译工具链(Toolchain)****2. 生成嵌入式 Linux 根文件系统(RootFS)****3. 编译 Linux 内核和设备树文件****4. 编译 Bootloader(U-Boot)****5. …...

JavaScript系列(61)--边缘计算应用开发详解
JavaScript边缘计算应用开发详解 🌐 今天,让我们深入探讨JavaScript的边缘计算应用开发。边缘计算是一种将计算和数据存储分布到更靠近数据源的位置的架构模式,它能够提供更低的延迟和更好的实时性能。 边缘计算基础架构 🌟 &am…...

【LeetCode】day15 142.环形链表II
142. 环形链表 II - 力扣(LeetCode) 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则…...

代理对象与目标对象
1. 定义:代理对象和目标对象 1.1 目标对象(Target Object) 目标对象是指 被增强的原始对象,即需要通过 AOP 切面(Aspect)增强功能的业务对象(原始类)。增强逻辑(Advice…...

【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信
引言 我们之前了解了在不同场景下,Kubernetes中Pod之间的通信是如何路由的。 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信现在,我们来看看在集群中,Pod与服务之间的通信是如何…...

DNN(深度神经网络)近似 Lyapunov 函数
import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt # from torchviz import make_dot import torchviz# 1. Lyapunov 函数近似器(MLP 结构) class LyapunovNet(nn.Module):def __init__(self, input_dim…...

128陷阱
首先我们了解一下关于包装器类型 java是面向对象的语言,但基本类型并不是面向对象的,从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将…...

PromptSource和LangChain哪个更好
目录 1. 设计目标与定位 PromptSource LangChain 2. 功能对比 3. 优缺点分析 PromptSource LangChain 4. 如何选择? 5. 总结 PromptSource 和 LangChain 是两个在自然语言处理(NLP)领域非常有用的工具,但它们的设计目标和…...

构成正方形的数量:算法深度剖析与实践
目录 引言算法核心概念 定义正方形的构成条件数据结构与输入形式算法数学原理 几何关系的数学表达坐标运算与判定逻辑Python 实现 代码展示代码解析Python 实现的优势与局限C 语言实现 代码展示代码解析C 语言实现的性能特点性能分析与优化 性能分析 时间复杂度空间复杂度优化思…...

Redis持久化-秒杀系统设计
在构建高性能、高可用的系统时,Redis 作为缓存和消息队列的角色越来越重要。在一些场景下,我们还需要将 Redis 的数据进行持久化,以确保数据的安全性和恢复能力。除此之外,秒杀系统也越来越成为电商、抢购等平台的核心功能之一。本…...

音视频入门基础:RTP专题(8)——使用Wireshark分析RTP
一、引言 通过Wireshark可以抓取RTP数据包,该软件可以从Wireshark Go Deep 下载。 二、通过Wireshark抓取RTP数据包 首先通过FFmpeg将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec copy -an -f rtp …...

OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化
爬虫与 OpenAI 模型结合,不仅能高效地抓取并分析海量数据,还能通过 NLP 技术生成洞察、摘要,极大提高业务效率。以下是一些实际工作中具有较高价值的应用案例: 1. 电商价格监控与智能分析 应用场景: 电商企业需要监控…...

SpringUI Web高端动态交互元件库
Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合,旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍: 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…...

解密企业安全密码:密钥管理服务如何重塑数据保护?
在数字化时代,数据是企业最宝贵的资产之一。然而,随着网络威胁的不断升级和数据泄露事件的频繁发生,如何保护企业数据的安全已成为每个组织面临的紧迫问题。传统的安全措施往往无法应对复杂的威胁环境,密钥管理服务作为企业信息安…...

基于keepalived+GTID半同步主从复制的高可用MySQL集群
文章目录 项目架构图项目名称项目环境项目描述ip地址规划项目步骤一.安装好8台全新的centos7.9的系统,关闭firewalld和selinux,配置每台主机的静态ip地址,设置每台主机对应的主机名。1、关闭firewalld2.关闭seLinux3.配置每台主机静态ip地址4…...

图片PDF区域信息批量提取至Excel,基于QT和阿里云api的实现方案
办公文档处理:在企业日常办公中,经常会遇到大量的扫描文档(如发票、合同、报表等)以图片或 PDF 格式存储。需要将这些文档中的特定区域信息(如发票金额、合同条款、报表数据等)提取出来,整理到 …...

Java 大视界 -- Java 大数据在智能教育中的应用与个性化学习(75)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…...

从零手写Spring IoC容器(二):bean的定义与注册
从零手写Spring IoC容器(二):bean的定义与注册 一. 回顾简单容器的不足之处 在第一章中,我们实现了一个最简单的 IoC 容器,但该版本存在诸多不足,例如: Bean 的管理方式过于简单,…...

《大模型面试宝典》(2025版) 发布了
基于去年我们写的《大模型面试宝典》(2024版)的基础上,我根据自己实践经验和星球小伙伴的面经分享总结推出《大模型面试宝典》(2025版),共计52w字。 与去年相比,内容增加了星球成员面试真题分享、大模型最新考试要点总结、DeepSeek 项目实战…...

AWS门店人流量数据分析项目的设计与实现
这是一个AWS的数据分析项目,关于快消公司门店手机各个门店进店人流量和各个产品柜台前逗留时间(利用IoT设备采集)和销售数据之间的统计分析,必须用到但不限于Amazon Kensis Data Stream,Spark Streaming,Sp…...

出租车特殊计费表算法解析与实现
目录 引言算法核心概念 特殊计费规则解析数据类型与输入输出算法数学原理 数字位判断与处理逻辑数值转换与累加计算算法框架图Python 实现 代码展示代码解析Python 实现的优势与局限C 语言实现 代码展示代码解析C 语言实现的性能特点性能分析与优化 性能分析 时间复杂度空间复杂…...

文档解析技术:如何高效提取PDF扫描件中的文字与表格信息?
想要高效提取PDF扫描件中的文字与表格信息,通常需要借助专业的工具或在线服务,以下是一些可行的方法: 预处理扫描件:在提取文字之前,尽量确保扫描件的图像质量清晰。如果扫描件模糊或有污渍,可以使用图像处…...

【2】高并发导出场景下,服务器性能瓶颈优化方案-异步导出
Java 异步导出是一种在处理大量数据或复杂任务时优化性能和用户体验的重要技术。 1. 异步导出的优势 异步导出是指将导出操作从主线程中分离出来,通过后台线程或异步任务完成数据处理和文件生成。这种方式可以显著减少用户等待时间,避免系统阻塞&#x…...

【DeepSeek论文精读】6. DeepSeek R1:通过强化学习激发大语言模型的推理能力
欢迎关注[【youcans的AGI学习笔记】](https://blog.csdn.net/youcans/category_12244543.html)原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】6. DeepSeek R1:通过强化学习激发大语言模型的推理能力 【DeepSeek论…...

frida 通过 loadLibrary0 跟踪 System.loadLibrary
static {System.loadLibrary("libxxx.so"); }在 ndk 开发中,常见的实践是在 static 代码块里调用 loadLibrary 加载动态库。由于 apk 从 java 层开始启动,过早地 hook 原生代码会找不到函数。所以一种常见做法是在 loadLibrary 的 hook 回调里…...

【2025最新计算机毕业设计】基于SSM的智能停车场管理系统【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

【含文档+PPT+源码】Python爬虫人口老龄化大数据分析平台的设计与实现
项目介绍 本课程演示的是一款Python爬虫人口老龄化大数据分析平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...