Kafka 消息不丢失

news2024/12/29 11:08:55

Kafka 消息不丢失

  • 生产者丢失
  • 消费者丢失
  • 不丢失配置

Kafka 保证消息不丢失:只对已提交的消息 (committed message) 做有限度的持久化保证

  • 已提交的消息:当 n 个 Broker 成功接收到该消息并写入到日志文件后,就告诉生产者该消息已成功提交
  • 有限度的持久化保证 : 消息保存在 N 个 Broker 上,要至少有 1 个存活
  • Kafka 只对已提交的消息,并满足一定的条件,能实现不丢失消息

生产者丢失

Kafka Producer 是异步发送消息的 ,调用 producer.send(msg),会立即返回,就无法知道消息是否发送成功

消息发送不成功的原因:

  • 网络抖动 : 导致消息就没有发到 Broker 端
  • 消息本身不合格,导致 Broker 拒绝接收 (如 : 消息太大)
  • 所有的 Broker 都挂了

解决方法:Producer 用 producer.send(msg, callback)有回调通知的发送 API

消费者丢失

Consumer 端的位移:

  • 位移:该 Consumer 消费当前 Topic 分区的位置

Consumer 的对位移的消息丢失解决:

  • 先消费消息,再更新位移的顺序
  • 能最大限度地保证消息不丢失,但可能消息的重复处理

在这里插入图片描述

Consumer 用多个线程异步处理消息,并自动更新位移

  • 当某个线程运行失败,某个消息没有被成功处理,但位移已经更新,该消息对 Consumer 就是丢失状态
  • 解决方案:Consumer 手动提交位移

不丢失配置

  • 当 ISR 只有 1 个副本 ,acks=all ,相当于 acks=1
  • min.insync.replicas 目的 :下限的限制
  • 不能只满足 ISR 全部写入,还要保证 ISR 中的写入个数大于 min.insync.replicas
  • 对可重试的错误,retries 才会触发,否则直接进入到 callback
Producerproducer.send(msg, callback)用带回调通知的 send 方法
acks = allall:所有副本 Broker 都接收到消息,才认为已提交
retries > 0自动重试消息发送,避免消息丢失
Brokerunclean.leader.election.enable = false不允许落后 Leader的Broker,成为新Leader
replication.factor >= 3消息多副本
min.insync.replicas > 1消息至少要写入 n 个副本才是已提交
replication.factor = min.insync.replicas + 1防止一个副本挂了,整个分区就无法正常工作
Consumerenable.auto.commit = false手动提交位移

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

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

相关文章

Android 动态调用SD卡内jar包

背景:jar包不放在项目路径,而是放在SD卡目录内,需要动态调用jar包内函数实现自己的业务逻辑。全部流程新建一个项目用来打包jar。打包jar定义接口,规范函数定义实现类,实现方法,并实现函数的业务逻辑&#…

大数据 | (一)Hadoop伪分布式安装

大数据原理与应用教材链接:大数据技术原理与应用电子课件-林子雨编著 Hadoop伪分布式安装借鉴文章:Hadoop伪分布式安装-比课本详细 大数据 | (二)SSH连接报错Permission denied:SSH连接报错Permission denied 哈喽&a…

社科院与杜兰大学金融管理硕士项目——人生没有太晚的开始,不要过早的放弃

经常听到有人问,“我都快40了,现在学车晚不晚呢”“现在考研晚不晚?”“学画画晚不晚?”提出这些疑问的人,往往存在拖延,想法只停留在想的阶段,从来不去行动。当看到周边行动起来的人开始享受成…

JAVA JDBC连接mysql数据库

什么是驱动?驱动是指计算机系统中的一种软件程序,它用于控制硬件设备的操作。每个硬件设备都需要与操作系统进行通信,而操作系统需要知道如何与每个设备进行通信,这就是驱动程序的作用。什么是jdbc?JDBC 是 Java 数据库…

java中的LinkedList和ArrayList的选择和区别

一、LinkedList LinkedList同时实现了List接口和Deque对口,也就是收它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(stack),这样看来,linke…

操作系统面试题

操作系统一、简介篇1.解释一下什么是操作系统2.操作系统的主要功能3.软件访问硬件的几种方式4.操作系统的主要目的是什么5.为什么Linux系统下的应用程序不能直接在Windows下运行6.什么是用户态和内核态7.用户态和内核态如何切换8.什么是内核二、进程和线程篇1.多处理系统的优势…

Raft分布式共识算法学习笔记

1. Raft算法 Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多 从本质上说&am…

HTML 扫盲

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录前言HTML 结构快速生成代码框架HTML 常见标签注释标签标题标签: h1-h6段落标签:p换行标签:br格式化标签…

MySQL优化策略

1、 sql优化 1.1 SQL 语句简化,简化是 SQL 优化的一大利器,因为简单,所以优越。 1.2 尽可能避免或者杜绝多表复杂关联,大表关联是大表处理的噩梦,一旦打开了这个口子,越来越多的需求需要关联,…

HTTPS协议之SSL/TLS详解(下)

目录 前言: SSL/TLS详解 HTTP协议传输安全性分析 对称加密 非对称加密 证书 小结: 前言: 在网络世界中,存在着运营商劫持和一些黑客的攻击。如果明文传输数据是很危险的操作,因为我们不清楚中间传输过程中就被哪…

Spring从精通到入门

Spring1.spring了解2. Spring实现2.1 添加依赖2.2 Spring实现2.2.1 xml配置实现2.2.1.1 Bean标签属性1.spring了解 spring重要性 在当前的系统中,spring的重要性and占比性高达50%,无论是在ssm、ssh等框架中,spring始终屹立在前方,…

Postman创建Elasticsearch(2.4版本)索引

一、创建索引二、删除索引三、其他1、查看es信息2、查看索引test信息3、test索引下mapping查看4、elasticsearch 2.2.1下载一、创建索引 1、请求方式:PUT2、请求地址:地址 索引名3、请求数据 {"settings": {"number_of_shards": …

C语言offsetof(TYPE, MEMBER)全解

offsetof(TYPE, MEMBER) 是一个宏定义,用于计算一个结构体中某个成员的偏移量。 其第一个参数 TYPE 是一个结构体类型,第二个参数 MEMBER 是 TYPE 中的一个成员变量名。 它将返回类型为 size_t 的整数,表示 MEMBER 相对于 TYPE 起始地址的偏…

inode和逻辑块,目录的结构,挂载的实现 源码级分析linux内核的文件系统的结构

bitmap.c 位图相关 封装了set_bit clear_bit find_first_zero clear_block等操作位图的宏 对应i节点位图和逻辑块位图有对应的四个函数 free_inode, new_inode,free_block, new_block new_block 创建逻辑块 通过super_block找到逻辑块位图,给逻辑块位图的第一个…

Spring Boot中的bean注入方式和原理

Spring Boot是一个非常流行的Java框架,它可以帮助开发者快速地构建高效、健壮的应用程序。依赖注入是Spring Boo其中一个重要的功能,就是将一个对象注入到另一个对象中,以便它们可以相互协作。在Spring Boot中,依赖注入是通过bean…

Python如何获取大量电影影评,做可视化演示

前言 《保你平安》今天上映诶,有朋友看过吗,咋样啊 这是我最近比较想看的电影了,不过不知道这影评怎么样,上周末的点映应该是有蛮多人看的吧,可以采集采集评论看过的朋友发出来的评论,分析分析 这周刚好…

2023年斋月倒计时,跨境卖家该如何做好选品和营销?

2023年斋月即将到来,这是一个伊斯兰教徒们非常重要的节日,同时也是跨境卖家们迎接销售高峰的时期。在2023年的斋月期间,跨境卖家应该如何做好选品和营销呢?本文Nox聚星将和大家好好聊一聊。 根据2022年的数据,斋月期间…

【巨人的肩膀】MySQL面试总结(一)

💪 目录💪1、什么是ER图2、数据库范式了解吗3、超键、候选键、主键、外键分别是什么?4、为什么不推荐使用外键与级联5、什么是存储过程6、drop、delete与truncate区别7、数据库设计通常分为那几步8、什么是关系型数据库9、什么是SQL10、MySQL…

SpringBoot整合Redis实现高并发数据缓存

目录什么是缓存为什么要用缓存Redis为什么这么快实现一个用户信息的缓存方式一:利用RedisTemplate实现导入依赖添加配置添加redis工具类及配置类开发mapper接口service层controller层测试方式二:采用SpringBoot注解开启缓存在启动类添加EnableCaching注解…

旋转框目标检测mmrotate v1.0.0rc1 之RTMDet训练DOTA的官方问题解析整理(四)

关于rotated_rtmdet_l-coco_pretrain-3x-dota_ms.py配置文件的batchsize和学习率设置问题:回答:如何在mmrotate中绘制特征图问题:回答:你好AllieLan,您可以尝试使用https://github.com/open-mmlab/mmyolo/blob/main/de…