首页 > 其他分享 >kafka ack机制

kafka ack机制

时间:2023-06-27 16:25:44浏览次数:51  
标签:leader 同步 ack ISR kafka Follower 机制 Leader

1 kafka基本架构

  kafka的partion分为leader和follow。leader参与允许,二follower仅作为备份。

  那么,leader和follower之间是怎么同步的呢

 

2 leader和follower的同步

  Partition只有Leader是对外提供读写服务的

  也就是说,如果有一个客户端往一个Partition写入数据,此时一般就是写入这个Partition的Leader。

  然后Leader副本接收到数据之后,Follower副本会不停的给他发送请求尝试去拉取最新的数据,完成同步。

 

3 ISR和OSR和ASR

  ISR全称是“In-Sync Replicas”,也就是保持同步的副本,他的含义就是,跟Leader始终保持同步的Follower有哪些。

  大家可以想一下 ,如果说某个Follower所在的Broker因为JVM FullGC之类的问题,导致自己卡顿了,无法及时从Leader拉取同步数据,那么是不是会导致Follower的数据比Leader要落后很多?

  所以这个时候,就意味着Follower已经跟Leader不再处于同步的关系了。

  所以每个Partition都有一个ISR列表,这个ISR里一定会有Leader自己,因为Leader肯定数据是最新的,然后就是那些跟Leader保持同步的Follower,也会在ISR里。

  OSR:无法保存和leader同步的就会被放入到OSR列表。默认超过10s没有同步成功,进入OSR。

  ASR:ISR和OSR的总和

  

 

4 acks参数的含义

4.1 简介


  铺垫了那么多的东西,最后终于可以进入主题来聊一下acks参数的含义了。

  如果大家没看明白前面的那些副本机制、同步机制、ISR机制,那么就无法充分的理解acks参数的含义,这个参数实际上决定了很多重要的东西。

  首先这个acks参数,是在KafkaProducer,也就是生产者客户端里设置的

  也就是说,你往kafka写数据的时候,就可以来设置这个acks参数。然后这个参数实际上有三种常见的值可以设置,分别是:0、1 和 all。

 

4.2 ack=0

  ack=0生产者将数据发送出去就算发送成功,不去等待任何返回,容易丢失数据

  如果你采用这种设置的话,那么你必须注意的一点是,可能你发送出去的消息还在半路,Partition Leader所在Broker就直接挂了,然后结果你的客户端还认为消息发送成功了,此时就会导致这条消息就丢失了。

4.3 ack=1

  默认值。ack=1只关注producer是否把消息推送到了leader的partion,不关注其它副本的同步是否成功。

 

4.4 ack=-1

   ack= -1 关注producer是否把消息推送到了leader的partion,还关注其它副本的同步是否成功。

  多少个副本同步成功才会返回成功呢?producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成

 

标签:leader,同步,ack,ISR,kafka,Follower,机制,Leader
From: https://www.cnblogs.com/jthr/p/17509183.html

相关文章

  • java线程监控-jstack+jvisualvm
    Java线程监控一.Jstasck1.查找进程ps-ef|greptomcat-oa2.使用jstack监控jstack2429二、jvisualvm1.tomcat应用环境配置1.1tomcat环境配置修改tomcat中,catalina.sh文件cd/usr/src/tomcat-pinter/binvicatalina.sh在第二行添加如下:JAVA_OPTS="-Dcom.sun.mana......
  • Vite、esbuild 以及 webpack 比较
    一、前言这三者的定位都有些不同,不好直接比较,但是做的事情还算类似,因此放一块拿来说说。vite是新生技术,由其快速优秀的开发体验有取代webpack的趋势,但是它并不如webpack打包工具那么灵活,vite内部的打包工具是采用的esbuild,其性能之高也来自于此。二、Vite2.0特性基于......
  • USB—CH32x作为USB设备时的通信机制和注意事项
    USB设备的数据交互机制围绕中断来展开核心机制:设备准备好状态和数据,主机下发命令,硬件根据寄存器的设置自动立即回复,然后进入相应中断 SETUP:SETUP必须回复ACK,主机收到设备的ACK,MCU进入对应的SETUP中断中断里,设备解析SETUP中的命令,然后准备相关的数据,设置对应的寄存器例如获取描......
  • Rabbitmq:消息队列介绍、Rabbitmq安装、 基于Queue实现生产者消费者模型、基本使用(生产
    目录一、消息队列介绍1.1介绍1.2MQ解决什么问题1.3常见消息队列及比较二Rabbitmq安装2.1服务端原生安装2.2服务端Docker安装2.3客户端安装2.4设置用户和密码三基于Queue实现生产者消费者模型四基本使用(生产者消费者模型)五消息安全之ack六消息安全之durable持久化七闲置消......
  • webpack 工程化
    前端工程化webpackhtml自动快速生成语法ul>li{这是第$个li}*91.新建项目目录,运行npminit-y初始化package.json2.npminstalljquery-s安装jquery项目中安装webpack-D代表[email protected]@4.7.2-Dwebpack的基本使用......
  • JVM 类加载机制
    加载过程其中验证,准备,解析合称链接加载通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象.验证确保Class文件符合当前虚拟机的要求,不会危害到虚拟机自身安全.准备进行内存分配,为static修饰的类变量分配内存,并设置初始值(0或null).不包含final修饰的静态......
  • SpringBoot事件机制
    1、是什么?SpringBoot事件机制是指SpringBoot中的开发人员可以通过编写自定义事件来对应用程序进行事件处理。我们可以创建自己的事件类,并在应用程序中注册这些事件,当事件被触发时,可以对其进行处理。在SpringBoot中,事件可以是任意类型的,可以是基于Spring的事件,也可以是自定义的事......
  • 【Azure 事件中心】Kafka 生产者发送消息失败,根据失败消息询问机器人得到的分析步骤
    问题描述AzureEventHubs--Kafka生产者发送消息存在延迟接收和丢失问题,在客户端的日志中发现如下异常:2023-06-0502:00:20.467[kafka-producer-thread|producer-1]ERRORcom.deloitte.common.kafka.CommonKafkaProducer-messageId:9235f334-e39f-b429-227e-45cd30dd6486......
  • 【Azure 事件中心】Kafka 生产者发送消息失败的分析步骤
    问题描述AzureEventHubs--Kafka生产者发送消息存在延迟接收和丢失问题,在客户端的日志中发现如下异常:2023-06-0502:00:20.467[kafka-producer-thread|producer-1]ERRORcom.deloitte.common.kafka.CommonKafkaProducer-messageId:9235f334-e39f-b429-227e-45cd30dd......
  • 何时使用Kafka而不是RabbitMQ
    Kafka和RabbitMQ都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka和RabbitMQ有各自的优势和特点,它们适用于不同的场景和需求。本文将比较Kafka和RabbitMQ的主要区别,并分析何时使用Kafka而不是RabbitMQ。影响因素可扩展性:Kafka旨在......