【Kafka】消息的顺序性、可靠性、幂等性

在这里插入图片描述

目录

  • 消息顺序性
  • 消息可靠性
    • 生产者丢失消息
    • 消费者丢失消息
    • Kafka丢失消息
  • 消息幂等性

消息顺序性

消息追加到partition尾部,单个partition是有序的,但多个partition如何进行有序的获取一些消息?

解决方案

  • 一个topic只设置一个partition(违背设计原则)
  • 发送消息时,指定topic、partition、key,保证消息只发送到一个partition

消息可靠性

生产者丢失消息

原因:发送消息默认发送成功

解决方案

  • 使用get获取发送消息的结果,缺点是变成了同步操作
  • 添加回调函数,如果发送失败,查看原因后重试

Kafka默认进行10次重发操作,间隔时间为0

消费者丢失消息

问题:提交offset和消费消息没有原子性

解决方案

  • 拉取到消息后,自动提交offset,如果消费者挂掉,那么就会少消费(消息并没有被消费,但offset提交了)
  • 选择手动提交offset,但会出现消费完后,提交offset前,消费者挂掉,会出现重复消费(消息已经被消费,但offset没有提交)

Kafka丢失消息

问题:Kafka的leader挂了,但follower没有完全同步leader的消息(生产者发送了消息,但丢失了)

解决方案

  • acks = all 所有副本接收到消息后,才代表生产者发送消息成功(是最安全的,但延迟高)
  • min.insync.replicas > 1,至少两个副本要接收到(默认为1,生产环境中要避免默认1)
  • replication.factor >= 3 副本数,注意replication.factor应该 大于min.insync.replicas,避免副本一旦出现挂掉,整个分区都无法工作的情况
    • 一般推荐设置成 replication.factor = min.insync.replicas + 1
  • 配置:和leader同步程度达不到要求的副本 不能被选举,降低了消息丢失的可能性。
unclean.leader.election.enable = false

消息幂等性

问题

  1. 消费了,但没成功提交offset(根本原因)
  2. 消费者处理业务时间长或网络问题,Kafka认为服务假死,触发分区rebalance

解决方案

  • 消费服务方做幂等性校验,比如redis的set操作,mysql的主键天然幂等性

  • enable.auto.commit = false 关闭自动提交offset,改为手动,

    • 消费后提交,但可能重复消费

    • 接收到消息后提交,但可能消息丢失,此时可以通过定时任务在业务不繁忙时做数据兜底。

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

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

相关文章

驱动执行报“Attribute var: Invalid permissions 0665”

问题:执行驱动的时候会报下面这个错误 WARNING: CPU: 0 PID: 123 at fs/sysfs/group.c:61 internal_create_group0x170/0x264() Attribute var: Invalid permissions 0665 问题分析:查看 fs/sysfs/group.c:61的代码,发现是我设置 module_par…

数组-在两个长度相等的有序数组中找到上中位数

题目描述 解题思路 此题目直接遍历两个列表,时间复杂度为O(n);使用二分法去比较两个递增列表的中位数,缩小两个数组中位数范围,时间复杂度O(logn),这里我们的算法实现使用二分法。 通过举例子来说明解题算法&#xf…

Linux驱动学习之模块化,参数传递,符号导出

1.模块化 1.1.模块化的基本概念: 模块化是指将特定的功能或组件独立出来,以便于开发、测试和维护。在Linux设备驱动中,模块化允许将驱动程序作为内核模块动态加载到系统中,从而提高了系统的灵活性和可扩展性。 1.2.Linux内核模…

Vue 3 组件基础与模板语法详解

title: Vue 3 组件基础与模板语法详解 date: 2024/5/24 16:31:13 updated: 2024/5/24 16:31:13 categories: 前端开发 tags: Vue3特性CompositionAPITeleportSuspenseVue3安装组件基础模板语法 Vue 3 简介 1. Vue 3 的新特性 Vue 3引入了许多新的特性,以提高框…

netmask一键修改子网掩码(KALI工具系列八)

目录 1、KALI LINUX简介 2、netmask工具简介 3、在KALI中使用netmask 3.1 目标主机IP(win) 3.2 KALI的IP 4、命令示例 4.1 查看版本 4.2 修改etho的子网掩码 4.3 查看状态信息 4.4 查看子网掩码 4.5 查看范围 4.6 DNS查看 5.、总结 1、KAL…

Java JUnit单元测试

Java JUnit 单元测试 测试分类 黑盒测试 不需要写代码,给输入值,看程序是否能够输出期望的值 白盒测试 需要写代码,关注程序具体的执行流程 Junit单元测试 JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个测试框架(regressi…

【JavaEE进阶】——一万字带你深刻理解Spring IoCDI

目录 🚩Spring是什么 🎈什么是容器? 🎈什么是 IoC? 📝传统开发思路 📝IOC思想 📝IoC 优势 🎈DI 介绍 🚩IoC 详解 🎈Bean的存储 &#x…

Vue2全局封装modal弹框

Vue2全局封装modal弹框使用&#xff1a; 一.components下封装 1.index.js import ModalCheck from ./modal-check.vue export default ModalCheck2.modal-check.vue <template><div><Modalv-model"selSingleShow":title"editTitle(convertCa…

Python中的yield关键字,掌握生成器的精髓

Python 中的 yield 关键字用于定义一个生成器&#xff08;generator&#xff09;。生成器是一种特殊的迭代器&#xff0c;它允许你逐个产生值&#xff0c;而不是一次性创建并返回一个包含所有值的列表。使用 yield 的函数被称为生成器函数&#xff0c;它们在执行时不会直接返回…

四信云-设备维保管理系统上线,实现设备全生命周期管理

在当今的制造业中&#xff0c;设备是企业生产的核心要素&#xff0c;是企业竞争力的基石。 随着企业发展规模不断扩大&#xff0c;设备数量急速增长&#xff0c;传统的手工管理方式已经无法满足企业需求&#xff0c;设备管理系统的出现则填补了市场需求空白&#xff0c;其目标…

优先级队列(堆)的实现

1.什么是优先级队列 队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不合适&#xff0c;比如&#x…

框架vnode,工厂模式实现的例子

工厂模式&#xff0c; vue3 <div><span>静态文字</span><span :id"hello" class"bar">{{ msg }}</span> </div> import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, open…

堆的实现

前言&#xff1a;本文讲述堆实现的几个难点&#xff0c;注意本文主要是以实现为主&#xff0c;建议有些基本概念认识的人阅读。 目录 1.堆 2.堆的实现 堆结构的定义&#xff1a; 要实现的接口&#xff1a; 接口的实现&#xff1a; 堆的初始化和销毁&#xff1a; 向堆中插…

人工智能-YOLOv10-行人和车辆检测-yolo改进测距测速代码和原理

YOLOv10: 实时端到端目标检测技术的全新突破 YOLOv10代表了实时目标检测领域的重大进展&#xff0c;是YOLO系列模型的最新迭代&#xff0c;专为追求极致效率与精度平衡的应用场景设计。此项目由北京大学机器智能研究组&#xff08;THU-MIG&#xff09;的Ao Wang、Hui Chen、Li…

Python面试宝典:虚拟环境概念以及虚拟环境管理面试题(1000加python面试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第九章:Python虚拟环境:第一节:虚拟环境概念以及虚拟环境管理】 第九章:Python虚拟环境第一节:虚拟环境概念以及虚拟环境管理1.1、为什么需要虚拟环境?1.2、虚拟环境管理工具1.1.1. ven…

02_前端三大件HTML

文章目录 HTML用于网页结构搭建1. 标签2. 客户端服务器交互流程3. 专业词汇4. html语法细节5. 安装VSCODE安装插件6. Live Server插件使用7. 标题&段落&换行&列表8. 超链接标签使用9. 图片10. 表格的写法11. 表单标签*(重点)12. 下拉框13. 页面布局标签14. 块元素和…

浅谈JMeter工具学习基础要求和性能测试价值

浅谈JMeter工具学习基础要求和性能测试价值 JMeter工具学习基础要求 JMeter工具学习基础要求&#xff1a;   在深入学习JMeter之前&#xff0c;需要具备一定的计算机网络基础知识、编程基础&#xff0c;理解HTTP协议、TCP/IP协议栈等底层通信原理&#xff0c;这样才能更好地…

RT-Thread Env开发探索——以HC-SR04超声波传感器为例

RT-Thread Env开发探索——以HC-SR04超声波传感器为例 0.前言一、BSP优化1.修改芯片功能配置2.修改RTT配置菜单 二、软件包加载1.外设配置2.驱动框架配置3.软件包配置 三、编译及运行四、源码分析五、总结 参考文章&#xff1a;RT Thread Env CLion环境搭建 0.前言 对比使用R…

mac下安装airflow

背景&#xff1a;因为用的是Mac的M芯片的电脑&#xff0c;安装很多东西都经常报错&#xff0c;最近在研究怎么把大数据集群上的crontab下的任务都配置到一个可视化工具中&#xff0c;发现airflow好像是个不错的选择&#xff0c;然后就研究怎么先安装使用起来&#xff0c;后面再…

部署LAMP平台

目录 一、LAMP简介与概述 1.1 各组件作用 1.2 LAMP平台搭建时各组件安装顺序 1.3 httpd服务的目录结构 1.4 httpd.conf配置文件 二、编译安装Apache httpd服务 2.1 关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 2.2 安装环境依赖包 ​2.3 配置软件模块…