Kafka数据可靠性保证
1.生产者发送数据到Topic partition的可靠性保证
为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。
2.Topic partition存储数据的可靠性保证
2.1 副本数据同步策略
| 方案 | 优点 | 缺点 |
|---|---|---|
| 半数以上完成同步,就发送ack | 延迟低 | 选举新的leader时,容忍n台节点的故障,需要2n+1个副本 |
| 全部完成同步,才发送ack | 选举新的leader时,容忍n台节点的故障,需要n+1个副本 | 延迟高 |
Kafka选择了第二种方案,原因:
- 为了容忍n台节点的故障,第一种方案需要2n+1个副本,而第二种方案只需要n+1个副本,而Kafka的每个分区都有大量的数据,第一种方案会造成大量数据的冗余。
- 第二种方案的网络延迟会比较高,但网络延迟对Kafka的影响较小。
2.2 ISR队列
leader收到数据,所有follower都开始同步数据,但有一个follower,因为某种故障,迟迟不能与leader进行同步,那leader就要一直等下去,直到它完成同步,才能发送ack。这个问题怎么解决呢?
Kafka提供的解决方案:ISR队列
- Leader维护了一个动态的
in-sync replica set (ISR),意为和leader保持同步的follower集合。 - 当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。
- 如果follower长时间(
replica.lag.time.max.ms)未向leader同步数据,则该follower将被踢出ISR。 - Leader发生故障之后,就会从ISR中选举新的leader。
2.3 ack应答队列
对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等ISR中的follower全部接收成功。
| ack参数 | 备注 |
|---|---|
| 0 | partition的leader副本接收到消息还没有写入磁盘就已经返回ack,当leader故障时有可能丢失数据; |
| 1 | partition的leader副本落盘后返回ack,如果在follower副本同步数据之前leader故障,那么将会丢失数据; |
| -1(all) | partition的leader和follower副本全部落盘成功后才返回ack。但是如果在follower副本同步完成后,leader副本所在节点发送ack之前,leader副本发生故障,那么会造成数据重复。 |
3.leader和 follower故障处理细节

- LEO(Log End Offset) 每个副本最大的offset。
- HW(High Watermark) 消费者能见到的最大的offset,ISR队列中最小的LEO。
-
follower故障
follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。
-
leader故障
leader发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。
注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。
相关文章:
Kafka数据可靠性保证
1.生产者发送数据到Topic partition的可靠性保证 为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),…...
基于R的linkET包qcorrplot可视化Mantel test相关性网络热图分析correlation heatmap
写在前面 需求是对瘤胃宏基因组结果鉴定到的差异菌株与表观指标、瘤胃代谢组、血清代谢组、牛奶代谢组中有差异的部分进行关联分析,效果图如下: 数据准备 逗号分隔的csv格式文件,两个表格,一个是每个样本对应的表观指标数据&…...
IOTDB的TsFile底层设计
目录 概述 数据模型 数据结构 元数据注册 读取和写入 设计思想 主要过程...
MATLAB算法实战应用案例精讲-【人工智能】边缘计算(补充篇)
目录 前言 算法原理 传统边缘检测算子 构建通用的边缘检测算子 图...
Linux学习-HIS系统部署(1)
Git安装 #安装中文支持(选做) [rootProgramer ~]# echo $LANG #查看当前系统语言及编码 en_US.UTF-8 [rootProgramer ~]# yum -y install langpacks-zh_CN.noarch #安装中文支持 [rootProgramer ~]# vim /etc/locale.co…...
Cairo介绍及源码构建安装(3)
接前一篇文章:Cairo介绍及源码构建安装(2) 四、Cairo构建与安装 2. 配置 BLFS中给出的命令为: ./configure --prefix/usr \--disable-static \--enable-tee 这里将“--prefix”选项由“/usr”调整为“/usr/local”&#x…...
Mac电脑信息大纲记录软件 OmniOutliner 5 Pro for Mac中文
OmniOutliner 5 Pro是一款专业级的Mac大纲制作工具,它可以帮助用户更好地组织和管理信息,以及制作精美的大纲。以下是OmniOutliner 5 Pro的主要功能和特点: 强大的大纲组织和管理功能。OmniOutliner 5 Pro为用户提供了多层次的大纲结构&…...
linux设置应用开机自启(通用:mysql、jar、nginx、solr...)
1. 业务场景 用于单机生产环境,防止服务器断电或者强制重启导致的服务下线。 2. 实现方案 对于无状态服务,可容器部署设置 restart: always,systemctl eable docker对于有状态服务,可编写自启脚本,如下 ① 编写执行…...
Offset Explorer(Kafka消息可视化工具)报invalid hex digit ‘{‘错误解决方法
解决办法: 根据代码的实际情况,设置成对应的值。设置完成后点update、refresh更新。...
深度学习:模型训练过程中Trying to backward through the graph a second time解决方案
1 问题描述 在训练lstm网络过程中出现如下错误: Traceback (most recent call last):File "D:\code\lstm_emotion_analyse\text_analyse.py", line 82, in <module>loss.backward()File "C:\Users\lishu\anaconda3\envs\pt2\lib\site-packag…...
【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现
目录 一、非线性方程式求根 1、二分法(Bisection Method、对分法) a. 理论简介 b. python实现 2、迭代法(Iterative Method) a. 理论简介 b. python实现 3、Newton 迭代法(Newtons Method) a. 理论…...
linux主机名
title: linux主机名 createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linux tags: Linux系统的主机名 查询主机名 hostnamehostnamectl 修改主机名 hostnamectl set-hostname <newhostname>...
前端uniapp图片select联动文本切换
图片 代码 <template><!-- 这个是uniapp的下拉框 --><uni-data-select v-model"pay_type" :localdata"range" change"handleSelectChange"></uni-data-select><!-- 图片 --><image :src"dynamicImage&qu…...
java - 包装类
目录 前言 一 什么是包装类? 1.获取包装类的两种方式(了解)(已经淘汰) 2.两种方式获取对象的区别(掌握) 3.自动装箱&&自动装箱 4.Integer常用方法 总结 前言 大家好,今天给大家讲解一下包装类 一 什么是包装类? 在Java中,每个基本数据类型都有对应…...
防火墙基础
目录 1、 防火墙支持那些NAT技术,主要应用场景是什么? 2、当内网PC通过公网域名解析访问内网服务器时,会存在什么问题,如何解决? 3、防火墙使用VRRP实现双机热备时会遇到什么问题,如何解决? 4…...
服务断路器_Resilience4j的断路器
断路器(CircuitBreaker)相对于前面几个熔断机制更复杂,CircuitBreaker通常存在三种状态(CLOSE、OPEN、HALF_OPEN),并通过一个时间或数量窗口来记录当前的请求成功率或慢速率,从而根据这些指标来…...
微信小程序学习笔记3.0
第3章 资讯类:仿今日头条微信小程序 3.1 需求描述及交互分析 需求描述 仿今日头条微信小程序,要具有以下功能。 (1)首页新闻频道框架设计,包括底部标签导航设计、新闻检索框设计及新闻频道滑动效果设计。 (2)首页新闻内容设计,包括新闻标题、新闻图片及新闻评论设计…...
nginx 反向代理 负载均衡 动静分离
一样东西的诞生通常都是为了解决某些问题,对于 Nginx 而言,也是如此。 比如,你出于无聊写了一个小网站,部署到 tomcat 之后可以正常访问 但是后来,你的这个小网站因为内容很诱人逐步的火了,用户越来越多&a…...
Codeanalysis(tca)后端二次开发环境搭建
先试用官方脚本文件件quick_install.sh将整个项目启动起来,然后到每个微服务下查看每个服务的pid进程,需要调试哪个先把对应的微服务关闭手动启动,具体启动流程如下: cd 到项目根目录下 source script\config.sh # 激活系统环境…...
JS前端树形Tree数据结构使用
前端开发中会经常用到树形结构数据,如多级菜单、商品的多级分类等。数据库的设计和存储都是扁平结构,就会用到各种Tree树结构的转换操作,本文就尝试全面总结一下。 如下示例数据,关键字段id为唯一标识,pid为父级id&am…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
