6.Kafka Acks详解

目录

  • 概述
  • Replication(分区副本)
  • In-sync replicas
  • Acknowledgements
    • acks=0
    • acks=1
    • acks=all
    • Ack实用建议
    • Minimum in-sync replica
    • Caveat(警告)

概述

   本文对 kafka 的一些核心概念进行解释,也是 kafka 需要调优的一些地方。

官方原文速递

Replication(分区副本)

  对于每个分区,存在一个 leadernfollower 。控制分区中 leader与 follower(1+N)数量的配置是 replication.factor。表示数据在 kafka 集群中数据副本数。默认及推荐的建议是3。

  kafka 中的分区副本两种类型:leaderfollowerfollower 是不对外提供服务的,所有的请求都必须由 leader来处理。

在这里插入图片描述

In-sync replicas

   broker 上分区的最新同步副本(ISR), 一个 leader 的副本一直是最新的 。只有当一个 follower 完全与 leader 一致时,它才是同步副本。换句话说,它不能落后于给定分区的最新记录。
如果一个 follower 落后于分区的最新数据,将不再将其视为同步副本。请参见图2,其中显示Broker3落后(不同步)。

总结:

  • 所说的同步不是指完全的同步,即并不是 follower 副本同步滞后于 leader 副本,就会被踢出 ISR 列表
  • kafka的 broker 端有一参数 replica.lag.time.max.ms ,表示 follower 副本与 leader 滞后的最长时间间隔,默认是 10s
  • 如果 follower 副本被踢出 ISR 列表,等追上了 leader 副本的进度 ,会再次加入 ISR 列表,所以 ISR 是一个动态列表。
    在这里插入图片描述
    注意:一般某个 follower 落后,可能是满负载,或者空间不足。

Acknowledgements

  acks 设置是在客户端(生产者)配置。表示 brokers 接受到写入成功的信息 。它支持三个值:01all

acks=0

  如果值为 0,生产者不会等待 broker 的响应。在 消息 发出的那一刻 ,就认为是写入成功。(见图3:生产者甚至不等待响应。消息已被确认!)

在这里插入图片描述

acks=1

  设置为1,当 leader 收到记录时那一刻,则认为写入成功,不再等待。(见图4:生产者等待响应。一旦收到响应,消息就会得到确认。broker 在收到记录后立即响应。followers 异步复制新记录。)

在这里插入图片描述

acks=all

  当设置为all时,当所有同步副本都收到记录时,此时生产者将认为写入成功。这是通过 leader broker 在响应请求时来实现的——一旦所有同步副本都收到记录,它就会发回响应。(见图5:没那么快!Broker 3还没有收到记录。)

在这里插入图片描述
leader broker 知道所有 followers 都同步完
在这里插入图片描述

Ack实用建议

  正如上面总结的那样,需要在性能与数据可靠性之间做平衡,如果想要保证数据准确与安全,配置 all ;如果想要保证性能,丢失一些数据,无影响 ,使用 0,来获得极致的性能、低延迟,高吞吐。

Minimum in-sync replica

  当 acks=all 时,需要所有的副本都同步了才会发送成功响应到生产者,这里面存在一个问题:如果 leader 副本是唯一的同步副本时,相当于 acts=1 ,所以是不安全的。
  kafka的 broker 端提供了 min.insync.replicas ,该参数控制的是消息至少被写入到多少个副本才算是 真正的写入,默认值 1 ,生产环境设定一个大于 1 的值可以提升消息的持久性。因为如果同步副本的数量低于该配置值 ,则生产者会收到错误响应,从而确保消息不丢失。
  请看下图,Broker2 同步成功,Broker3 没有同步成功,且不在 ISR 列表中,此时min.insync.replicas=2 表示消息发送成功 。
在这里插入图片描述

  下图对 acks=allacks=1 时,同是 min.insync.replicas=2 条件下发送消息,ACK 是不一样的。
在这里插入图片描述

Caveat(警告)

  这种情况容易引起误解。如果 acks=allmin.insync.replicas=2 ,此时 ISR 列表为 [1,2,3],那么还是会等到所有的同步副本都同步了消息,才会向生产者发送响应的 ack。因为 min.insync.replicas=2 只是一个最低限制,即同步副本少于该值配置值 ,则会抛出异常,而 acks=all 是需要保证所有的 ISR 列表的副本都同步了才可以发送成功响应。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

222.买卖股票的最佳时机(力扣)

代码解决 class Solution { public:int maxProfit(vector<int>& prices) {// 初始化最小买入价为第一个价格int min1 prices[0];// 初始化最大利润为0int max1 0;// 从第二天开始遍历价格数组for (int i 1; i < prices.size(); i) {// 计算当前价卖出的利润&a…

windows edge自带的pdf分割工具(功能)

WPS分割pdf得会员&#xff0c;要充值&#xff01;网上一顿乱找&#xff0c;发现最简单&#xff0c;最好用&#xff0c;免费的还是回到Windows。 Windows上直接在edge浏览器打开PDF&#xff0c;点击 打印 按钮,页面下选择对应页数 打印机 选择 另存为PDF&#xff0c;然后保存就…

硬件开发——UART/I2C/SPI协议

硬件开发——UART/I2C/SPI协议 小狼http://blog.csdn.net/xiaolangyangyang 1、UART 电压&#xff1a; TTL电平&#xff1a;1&#xff1a;&#xff08;3.3V~5V&#xff09;&#xff0c;0&#xff1a;&#xff08;0V&#xff09;RS232电平&#xff1a;1&#xff1a;&#xff0…

【C++题解】1212. 移动数组元素

问题&#xff1a;1212. 移动数组元素 类型&#xff1a;数组找数 题目描述&#xff1a; 在一个不重复的数组中&#xff0c;请将这个数组的最小数和数组第一个数交换&#xff0c;最大数和数组最后一个数交换。 输入&#xff1a; 第一行有一个整数 n ( 5≤n≤100 &#xff09;…

浅谈端到端(自动驾驶)

一、 引言 端到端是近期非常火的话题&#xff0c;尤其在自动驾驶、具身智能等领域。去年UniAD的发布&#xff0c;给大家普及了端到端的网络设计&#xff0c;带动了行业的发展。产业界&#xff0c;特斯拉FSD Beta V12效果惊艳&#xff0c;近期理想也推出了双系统的E2E自动驾驶系…

MySQL 分组函数

目录 1. 单/多行处理 2. 分组函数分类 3. 分组函数组合使用 4. 注意 1. 单/多行处理 分组函数又被叫做多行处理函数&#xff08;多个输入&#xff0c;一个输出&#xff09;&#xff1b; 前面提到的数据处理函数又叫做单行处理函数&#xff08;一个输入&#xff0c;一个输出…

<Qt> 信号和槽

目录 一、信号和槽概述 二、信号和槽的使用​​​​​​ &#xff08;一&#xff09;connect函数 &#xff08;二&#xff09;实现一个点击按钮关闭窗口的功能 &#xff08;三&#xff09;再谈connect 三、自定义槽函数 四、自定义信号 五、带参数的信号和槽 六、信号…

哈喽GPT-4o,程序员如何通过GPT-4o保护自己的合法权益

目录 一、法律研究Prompt&#xff1a;派遣合同和劳务外包合同有什么区别&#xff1f;详细说一下在被裁员时的区别&#xff1f; 二、法律条文检索Prompt&#xff1a;检索《劳动合同法》&#xff0c;以下情况属于第几条&#xff0c;如果公司进行技能考试&#xff0c;并以技能考试…

在Ubuntu上安装redis

Ubuntu上安装redis 一、通过下载redis的压缩包安装二、通过apt包管理器安装Redis三、修改redis的配置文件四、控制redis启动 Redis是一种开源的内存数据存储&#xff0c;可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式&#xff0c;包括通过压缩包安装以及通…

求职学习day5

安排明天hr面 投一下平安可能。 hr面准备&#xff0c;复习java核心技术&#xff0c;复习java项目。 正视自己&#xff0c;调整心态。 也是很早接触了javaguide但是没有持续学习&#xff0c;项目介绍 | JavaGuide&#xff0c;面试前复习一下感觉还是很有收获的。 还有一些…

studio编译报错java.lang.NullPointerException

安卓studio编译报错&#xff0c;这个是一个新建的项目就报错&#xff0c;原因是 implementation androidx.appcompat:appcompat:1.7.0版本太高&#xff0c;修改后版本 implementation androidx.appcompat:appcompat:1.4.0&#xff0c; 编译又报错 18 issues were found wh…

【MQTT(3)】开发一个客户端,QT-Android安卓手机版本

手机版本更加方便 生成安卓库 参考了这个代码 在编译Mosquitto以支持安卓平台时&#xff0c;主要涉及到使用Android NDK&#xff08;Native Development Kit&#xff09;进行交叉编译。环境的准备参考之前的博客【QT开发&#xff08;17&#xff09;】2023-QT 5.14.2实现Andr…

视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案

LntonCVS流媒体平台是一款遵循国家GB28181标准协议的先进视频监控与云服务平台。该平台设计独特&#xff0c;能够同时接入并处理多路设备的视频流&#xff0c;支持包括RTSP、RTMP、FLV、HLS、WebRTC在内的多种视频流格式的分发。其功能丰富多样&#xff0c;涵盖了视频直播监控、…

进程与线程(一)进程相关

目录 一. 概念二 . 组成进程控制块程序段数据段 三. 特征四. 进程的状态与转换五. 进程控制进程创建进程终止进程阻塞与进程唤醒进程切换 六. 进程通信共享存储消息传递管道通信 一. 概念 多道程序环境下&#xff0c;允许多个程序并发执行&#xff0c;此时它们将失去封闭性&…

Linux-交换空间(Swap)管理

引入概念 在计算机中&#xff0c;硬盘的容量一般比内存大&#xff0c;内存&#xff08;4GB 8GB 16GB 32GB 64GB…&#xff09;&#xff0c;硬盘&#xff08;512GB 1T 2T…&#xff09;。 冯诺依曼的现代计算机结构体系里面的存储器就是内存 内存是一种易失性存储器&#xff0c…

路由数据获取及封装方法

数据库设计 自联表 定义tree字段 public class LabelValue{public int label { get; set; }public string? value { get; set; }public List<LabelValue> children { get; set; }}获取路由方法 public Response<object> getMenuList() {Response<object>…

利用patch-package补丁,解决H5预览PDF时电子签章不显示问题

利用patch-package补丁&#xff0c;解决H5预览PDF时电子签章不显示问题 一、问题描述 在生产环境中&#xff0c;遇到了一个紧急的技术问题&#xff1a;用户在移动端H5页面上查看电子票时&#xff0c;PDF文件预览功能正常&#xff0c;但其中的电子签章未能正常显示。这一问题直…

Linux网络——TcpServer

一、UDP 与 TCP 在现实生活中&#xff0c;Udp 类似于发传单&#xff0c;Tcp 类似于邮局的挂号信服务。 1.1 UDP&#xff08;用户数据报协议&#xff09; 无连接&#xff1a;发放传单时&#xff0c;你不需要提前和接受传单的人建立联系&#xff0c;直接把传单发出去。不可靠&…

0718vscode问答

终于来到 qt # Question 多态 # Answer 多态是面向对象编程中的一个重要概念&#xff0c;指的是同一个接口可以有多种不同的实现方式。多态性允许我们使用一个统一的接口来处理不同类型的对象&#xff0c;从而提高代码的灵活性和可扩展性。 在Java中&#xff0c;多态可以通过以…

处理.git文件夹过大出现臃肿问题

1、问题背景 在软件开发过程中&#xff0c;版本控制是一个至关重要的环节。Git 作为一种流行的分布式版本控制系统&#xff0c;被广泛应用于各种项目中。然而&#xff0c;近期我们发现在进行项目发版时&#xff0c;Git 克隆项目的时间显著增加&#xff0c;严重影响了发版的效率…