kafka入门,数据去重(九)

数据传递语义

至少一次:ACK级别设置为-1+分区副本大于等于2+ISR里应答的最小副本数量大于等于2
最多一次:ACK级别设置为0
总结:
At Least Once:可以保证数据不丢失,但是不能保证数据不重复
At Most Once:可以保证数据不重复,但是不能保证数据不丢失
精确一次:对于一些非常重要的信息,比如和钱相关的数据,要求数据既不能重复也不丢失,Kafka 0.11版本以后,引入了重大特性:幂等性和事务

幂等性

幂等性就是值Producer不论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证不重复。
精确一次=幂等性+至少一次(ack=-1+分区副本数>=2+ISR最小副本数量>=2)
重复数据的判断标准:具有<PID,partition,SeqNumber>相同主键的信息提交时,Broker只会持久化一条,其中PID是Kafka每次重启都会分配一个新的;partition表示分区号;Sequence Number是单调自增的。
所以幂等性只能保证再单分区会话内不回重复
在这里插入图片描述
开启幂等性参数
enable.idempotence默认为true,false关闭

生产者事务

开启事务,必须开启幂等性
在这里插入图片描述
producer在使用事务功能前,必须先自定义一个唯一的transactional.id,有了transactional.id,即使客户端挂掉了,它重启后也能继续处理未完成的事务
1、请求producer id 幂等性需要
2、返回producer id
3、发送消息到TopicA
4、发送commit请求
5、持久化commit请求
6、返回成功
7、后台发送commit请求

_transaction_state-分区-leader存储事务信息的特殊主题
默认又50个分区,每个分区负载一部分事务,事务划分根据transactional,id的hashcode值%50,计算出该分区事务属于哪个分区。该分区leader副本所在的broker节点即为这个transactional.id对应的Transaction Coordinator节点

例子

package com.longer.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 CustomProducerTransactions {public static void main(String[] args) {//创建kafka配置对象Properties properties = new Properties();// 给 kafka 配置对象添加配置信息properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "hadoop100:9092");//序列化properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());//设置事务idproperties.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG,"transaction_id_0");//创建kafka生产对象KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties);//初始化事务producer.initTransactions();//开启事务producer.beginTransaction();//调用 send 方法,发送消息try {for (int i = 0; i < 5; i++) {producer.send(new ProducerRecord<>("first", "hi," + i));}System.out.println(1/0);//提交事务producer.commitTransaction();}catch (Exception e){e.printStackTrace();//终止事务producer.abortTransaction();}finally {//关闭资源producer.close();}}
}

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

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

相关文章

软件测试面试-银行篇

今天参加了一场比较正式的面试&#xff0c;汇丰银行的视频面试。在这里把面试的流程记录一下&#xff0c;结果还不确定&#xff0c;但是面试也是自我学习和成长的过程&#xff0c;所以记录下来大家也可以互相探讨一下。 请你做一下自我介绍&#xff1f;&#xff08;汇丰要求英…

Stable Diffusion 对图像进行风格化

风格化是基于现有图像转换成另一种风格的操作方法&#xff0c;通常应用于img2img中&#xff0c;将文字提示中特定的新风格应用于原图像上进行修改。在这个过程中并非使用随机的潜在状态&#xff0c;而是采用原始图像去编码初始潜在状态。在此基础上通过加入少量的随机性&#x…

自己动手写C语言float浮点数转换字符串的函数

最近在项目中用到了holtek厂商的HT45F24A和BA45F5650两款单片机。 用的开发工具是HT-IDE3000&#xff0c;烧录软件是HOPE3000。 这两款单片机都是8位的单片机&#xff0c;支持寄存器位操作。 HT45F24A单片机不带UART串口&#xff0c;要想实现串口功能&#xff0c;只能自己用定时…

【数据库四】MySQL备份与恢复

MySQL备份与恢复 1.数据库备份的分类1.1 数据备份的重要性1.2 数据库备份的分类1.3 常见的备份方法 2.MySQL完全备份与恢复2.1 MySQL完全备份2.2 数据库完全备份分类2.3 MySQL物理冷备份及恢复2.4 数据迁移DST2.5 mysqldump进行逻辑备份2.5.1 mysqldump备份数据库2.5.2 mysqldu…

leetcode 101. 对称二叉树

2023.7.2 这道题要求我们判断一颗二叉树是否是对称的。我使用的是广度优先搜索的思想&#xff0c;通过队列将需要比较的节点依次入队和出队&#xff0c;进行对称性的判断。下面直接上代码&#xff1a; class Solution { public:bool isSymmetric(TreeNode* root) {queue<Tr…

CRM系统通过哪三步增加销售团队协作?

销售团队的协作是企业成功的重要保障。协调一致的销售团队能够提升销售效率&#xff0c;提高销售转化&#xff0c;获得更多业绩收入。那么企业要如何增加销售团队的协作&#xff1f;可以用CRM销售管理系统。 CRM系统如何增加销售团队协作&#xff1a; 1、建立统一的客户数据库…

2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

2023最新AI创作系统/ChatGPT商业运营版网站程序源码支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问&#xff1a;程序已经支持G…

java pdf2html 和html2pdf 两款插件

1 pdf2html docker 启动&#xff0c;java 调用服务即可转化 https://beltxman.com/2567.html docker run -ti --rm -v ~/pdf:/pdf -w /pdf docker.io/pdf2htmlex/pdf2htmlex:0.18.8.rc2-master-20200820-ubuntu-20.04-x86_64 test.pdf 2 html2pdf java .Runtime 类型调用命…

【新星计划·2023】Linux系统的架构和组件讲解

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解Linux系统的架构和组件。 目录 一、Linux系统的架构 1、硬件层 2、内核层 3、进程管理子系统 4、内存管理子系统 5、…

【Neo4j教程之CQL命令基本使用】

&#x1f680; Neo4j &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;C…

抖音短视频矩阵系统源码:技术开发与实践

目录 一.短视频账号矩阵管理系统囊括的技术 1.开发必备的开发文档说明&#xff1a; 二.技术文档分享&#xff1a; 1.底层框架系统架构&#xff1a; 2.数据库接口设计 1.技术开发必备的开发文档说明&#xff1a; 1.1系统架构&#xff1a; 抖音SEO排名系统主要由以下几个模…

PoseiSwap 将向 Zepoch 节点持有者发放新一轮空投,生态启动在即

目前&#xff0c;随着各类 Layer2 空投不断内卷&#xff0c;越来越多的用户疲于参与其中&#xff08;参与交互也很有可能难以获得空投资格&#xff09;。Nautilus Chain 作为目前模块化 Layer3 架构链&#xff0c;在初期就明确了空投计划&#xff0c;即所有上线的应用都将会拿出…