Kafka3.0.0版本——生产者数据可靠性

news/2024/11/21 1:47:35/

目录

    • 一、ACK应答原理
      • 1.1、应答级别
        • 1.1.1、acks = 0
        • 1.1.2、acks = 1
        • 1.1.3、acks = -1(all)
      • 1.2、问题思考
    • 二、数据可靠性
      • 2.1、数据可靠性分析
      • 2.2、 数据完全可靠条件
      • 2.3、ACK应答级别可靠性总结
    • 三、数据可靠性代码示例

一、ACK应答原理

1.1、应答级别

1.1.1、acks = 0

  • 生产者发送过来的数据 ,不需要等数据落盘应答。
    在这里插入图片描述
  • 数据可靠性分析:丢数据。

1.1.2、acks = 1

  • 生产者发送过来的数据,Leader 收到数据后应答 。
    在这里插入图片描述
  • 数据可靠性分析:丢数据。

1.1.3、acks = -1(all)

  • -1和all等价,生产者发送过来的数据,Leader 和ISR 队列里面的所有节点收齐数据后应答
    在这里插入图片描述

1.2、问题思考

Leader收到数据,所有Follower都开始同步数据,但有一个Follower,因为某种故障,迟迟不能与Leader进行同步,那这个问题怎么解决呢?

  • Leader维护了一个动态的in-sync replica set(ISR),意味着和Leader保持同步的Follower+Leader集合(leader:0,isr:0,1,2)。
  • 如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s。例如2超时,(leader:0, isr:0,1)。
  • 这样就不用等长期联系不上或者已经故障的节点。

二、数据可靠性

2.1、数据可靠性分析

  • 如果分区副本设置为1个,或者ISR里应答的最小副本数量( min.insync.replicas 默认为1)设置为1,和ack=1的效果是一样的,仍然有丢数的风险(leader:0,isr:0)

2.2、 数据完全可靠条件

  • 数据完全可靠条件 = ACK 级别设置为-1 + 分区副本大于等于2 + ISR 里应答的最小 副本 数量大于等于2

2.3、ACK应答级别可靠性总结

  • acks=0,生产者发送过来数据就不管了 , 可靠性差 , 效率高;
  • acks=1,生产者发送过来数据Leader 应答 , 可靠性中等 ;
  • acks=-1,生产者发送过来数据Leader 和ISR 队列里面所有Follwer 应答,可靠性高,效率低;
  • 在生产环境中,acks=0 很少使用;acks=1,一般用于传输普通日志,允许丢个别据;acks=-1,一般用于传输和钱相关的数据 ,对可靠性要求比较高的场景 。

三、数据可靠性代码示例

  • 示例代码中添加ack(确认)和retries(重试)次数设置即可。

     // acksproperties.put(ProducerConfig.ACKS_CONFIG,"1");// 重试次数properties.put(ProducerConfig.RETRIES_CONFIG,3);
    
  • 示例代码

    package com.xz.kafka.producer;
    import org.apache.kafka.clients.producer.KafkaProducer;
    import org.apache.kafka.clients.producer.ProducerConfig;
    import org.apache.kafka.clients.producer.ProducerRecord;
    import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;public class CustomProducerAcks {public static void main(String[] args) {//1、创建 kafka 生产者的配置对象Properties properties = new Properties();//2、给 kafka 配置对象添加配置信息:bootstrap.serversproperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.136.27:9092,192.168.136.28:9092,192.168.136.29:9092");//3、指定对应的key和value的序列化类型 key.serializer value.serializerproperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());// acksproperties.put(ProducerConfig.ACKS_CONFIG,"1");// 重试次数properties.put(ProducerConfig.RETRIES_CONFIG,3);//4、创建 kafka 生产者对象KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);//5、调用 send 方法,发送消息for (int i = 0; i < 5; i++) {kafkaProducer.send(new ProducerRecord<>("news","hello kafka"+i));}//6、关闭资源kafkaProducer.close();}
    }
    
  • 在kafka集群上开启 Kafka 消费者

    [root@localhost kafka-3.0.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.136.27:9092 --topic news
    
  • 在 IDEA 中执行代码,观察kafka集群控制台中是否接收到消息。
    在这里插入图片描述


http://www.ppmy.cn/news/54044.html

相关文章

PHP入门【1】使用组合包安装php

目录 一&#xff0c;安装appserv组合包 二&#xff0c;运行第一个php程序 一&#xff0c;安装appserv组合包 组合包&#xff1a;将apache&#xff0c;mysql&#xff0c;php等服务器软件和工具安装配置完成后打包处理 组合包大大提高了我们的效率&#xff0c;不需要为配置环境…

AI看图说话,MiniGPT-4已经开源

MiniGPT-4 是一个人工智能工具&#xff0c;​最大的飞跃是增加了识图能力&#xff0c;​并且回答准确性也得到显著提高。​它可以识别图片并回答关于图片的问题&#xff0c;​例如图片内容、​颜色等等。 ​此外&#xff0c;​它还可以进行图像对话&#xff0c;​即通过图片和…

【mysql】事务的四大特性

目录 一、四大特性&#xff08;ACID&#xff09;1.1 原子性1.2 一致性1.3 隔离性1.4 持久性 一、四大特性&#xff08;ACID&#xff09; 1.原子性 2.一致性 3.隔离性 4.持久性 1.1 原子性 1.英文&#xff1a;Atomicity [ˌtəˈmɪsəti] 2.事务是不可分割的最小操作单元&…

【老王读SpringMVC-3】根据 url 是如何找到 controller method 的?

前面分析了 request 与 handler method 映射关系的注册&#xff0c;现在再来分析一下 SpringMVC 是如何根据 request 来获取对应的 handler method 的? 可能有人会说&#xff0c;既然已经将 request 与 handler method 映射关系注册保存在了 AbstractHandlerMethodMapping.Ma…

Html5版贪吃蛇游戏制作(经典玩法)

回味经典小游戏&#xff0c;用Html5做了个贪吃蛇的小游戏&#xff0c;完成了核心经典玩法的功能。 游戏可以通过电脑的键盘“方向键”控制&#xff0c;也可以点击屏幕中的按钮进行控制。&#xff08;支持移动端哈&#xff09; 点击这里试玩 蛇的移动是在18 x 18的格子中进行移…

mybatisplus封装方法

分页 public AjaxResult getBlindBoxInfo(RequestParam(name“pageNo”, defaultValue“1”) Integer pageNo, RequestParam(name“pageSize”, defaultValue“10”) Integer pageSize) { String userId AuthUtil.getAppUserId(); if(StringUtils.isEmpty(userId)){ return A…

基于springboot和ajax的简单项目 013 ztree插件使用,这是关于修改和新增的

先写写的是menu_list.html文件上的内容。 01.在自动加载函数上写点击事件 $(".input-group-btn").on("click",".btn-delete",doDeleteObject).on("click",".btn-add,.btn-update",doLoadEditUI);02.登录函数&#xff1a; …

大模型竞逐,再造AI新格局

作者 | 辰纹 来源 | 洞见新研社 “面对AI时代&#xff0c;所有产品都值得用大模型重做一次。” 这是阿里巴巴集团董事会主席兼CEO、阿里云智能集团CEO张勇在2023阿里云峰会上对AIGC&#xff08;生成式AI&#xff09;进化的判断&#xff0c;在这背后则是由ChatGPT为起始点&…