面试官:对于MQ中的消息丢失你是如何理解的?

相信很多的小伙伴在面试的时候,涉及到MQ的面试题,消息丢失是必问面试题之一。那么对于消息丢失你又是如何理解的呢?

下面我们一起来看一下。

本文以 Kafka 举例说明

一、什么是消息丢失?

消息丢失的定义是:在消息传递的过程中,在某个环节意外丢失,也就是消息没有成功的发送或者没有被正确的接收。

  1. 生产者未能成功发送消息。

  1. 消费者未能正确接收消息。

  1. 消费者未能正确处理消息。

对于第三条可以理解为特殊的消息丢失,因为消费者的逻辑处理错误,程序bug等其他原因,造成消息在处理过程中消息丢失或者被忽略(异常之后错误的应答等),也就是说消息没有正确的被消费掉,我们也可以认为是一种消息丢失。

二、消息丢失的原因有哪些

2.1、消息生产阶段

  • 生产者配置错误:生产者在发送消息时,配置错误的主体、分区或者消息的过期时间,造成消息无法正确发送到MQ中。

  • 网络故障:生产者与MQ集群之间网络故障。

2.2、消息存储阶段

  • 磁盘故障:以Kafka举例,如果磁盘出现故障,Kafka中的消息无法洛盘,可能导致消息的丢失。

  • 日志压缩策略:使用了压缩比较高的压缩策略从而可能在压缩的过程中丢失消息。

2.3、消息消费阶段

  • 消费者处理失败:在处理消费逻辑时,由于程序bug等原因,造成系统异常,错误应答从而丢失消息。

  • 消费者提交偏移量错误:当消费者消费完消息之后,提交错误的偏移量造成消息的重复消费或者消息丢失。

三、消息丢失的解决方案有哪些

3.1、消息生产阶段

  • 配置正确的主体、分区、以及TTL。

  • 使用ACK应答,等待消息被MQ写入成功之后在确认为发送成功。

  • ack=1:默认值,leader副本成功写入消息即发送成功。

  • ack=0:发送消息后不等待服务端确认。

  • ack=-1或者ack=all:生产者需要等待ISR中的所有副本都成功写入消息才为消息发送成功。

  • 消息发送重试。

retries:配置生产者发送消息重试次数。

  • 配置合理的压缩策略。

compression.type 支持none、gzip、snappy、lz4、zstd。

  • 设置合理的消息缓冲区大小。

buffer.memory:默认33554432。生产者用于缓存一批发送到服务器消息的总内存字节数。

  • 使用合适的序列化器,防止序列号错误造成消息丢失。

其他的配置可以参考官网 Kafka 生产者配置。

https://kafka.apache.org/documentation/#producerconfigs

3.1、消息存储阶段

  • 配置适当的副本数量和ISR。在发生故障的时候消息仍然可以从其他的副本中进行恢复。

  • 使用监控,实时检测消息的复制、磁盘的使用率。

  • 定期备份。

3.2、消息消费阶段

  • 编写健壮的代码,说的容易,写起来还是得多测试。对于可能产生的异常原因进行分析处理。当发生异常时,可以做如下处理:

    1. 记录错误,有异常处理机制,保证能够正确的处理异常情况。
    2. 消息重试消息。(需要注意消费幂等以及死循环造成消息堆积)
  • 使用手动提交偏移量。(需保证所有的异常情况代码中都有对应的异常处理机制,也就是第一点,健壮的代码)

  • 使用自动提交偏移量。(需要保证消费逻辑正确)

  • 使用监控,监控消费者的消费情况,发现异常立即上报。

  • 正确的消费者组管理,类似消费者重平衡或者重启等造成的消息偏移量丢失。

  • 备份,发生异常或者消息丢失时,可以跟踪到消费者的消费情况,直接使用备份恢复。

总结

上面我们分析了什么是消息丢失,产生的原因有哪些以及如何解决。通过看完这篇文章相信你对Kafka中的消息丢失也有了一定的了解,在工作中使用的时候也就不会没有底气了。

相信有眼尖的小伙伴发现了,在消费者的处理逻辑中,多次消费会造成消息的多次重复消费。消息的重试也有可能造成消息的堆积。那么这些问题就是下节课我们要说的。

也欢迎评论区留言,说一说你在工作中在使用MQ的时候遇到了哪些坑,大家一起讨论交流。

WX 搜索《醉鱼Java》,回复面试,获取2024面试资料。

面试官:对于MQ中的消息丢失你是如何理解的?(https://mp.weixin.qq.com/s/Vot6MW6K1nYGct7I0S2S-A)

如果这篇文章对您有所帮助或者启发,帮忙点个关注叭,您的支持是我坚持写作的最大动力。

求一键三连:点赞、转发、收藏。

谢谢支持哟 (__)。

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

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

相关文章

【动手学深度学习】softmax回归从零开始实现的研究详情

目录 🌊1. 研究目的 🌊2. 研究准备 🌊3. 研究内容 🌍3.1 softmax回归的从零开始实现 🌍3.2 基础练习 🌊4. 研究体会 🌊1. 研究目的 理解softmax回归的原理和基本实现方式;学习…

Python打印当前目录下,所有文件名的首字母

代码如下: #!/usr/bin/env python3 """ 按顺序打印当前目录下,所有文件名的首字母(忽略大小写) """ import sys from pathlib import Pathdef main() -> None:ps Path(__file__).parent.glob(…

代码随想录算法训练营第26天(py)| 回溯 | 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 力扣链接 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数…

上传RKP 证书签名请求息上传到 Google 的后端服务器

上传证书签名请求 1.准备环境:OK pip3 install google-auth2.13.0 requests2.28下载 device_info_uploader.py 。 没找到先跳过 选项 1:通过 GCP 帐户使用 device_info_uploader.py 运行脚本。 ./device_info_uploader.py --credentials /secure/s…

NFS服务p.2 用户的上传与下载,以及用户映射

如何进行上传和下载呢? 目录 如何进行上传和下载呢? 上传 访问时的账户映射对于上传文件和下载文件的影响? 在服务器里进行修改用户的权限 如和修改使用用户上传时的名字? 上传 上传的话,因为我们现在所在的nfs1…

端午佳节到,礼轻情意重,闪侠惠递帮你高效便宜寄快递

马上就是端午佳节了,我们通常会吃粽子,赛龙舟,但是这些礼物我们该怎么快速的送到我们亲朋好友的手中呢?小编这里非常推荐大家使用闪侠惠递来寄快递。不仅能高效便捷的把礼物送到你的手中,而且还能以非常便宜的价格呢&a…

03_初识Spring Cloud Gateway

文章目录 一、网关简介1.1 网关提出的背景1.2 网关在微服务中的位置1.3 网关的技术选型1.4 补充 二、Spring Cloud Gateway的简介2.1 核心概念:路由(Route)2.2 核心概念:断言(Predicate)2.3 核心概念&#…

linux系统——性能检测工具glances

在linux系统中,由python开发的glances工具是一个功能强大的性能检测工具 可以通过yum进行安装 安装glances后,进入命令界面 glance支持网站模式,将监控到的数据以网站形式显示出来 这里需要用python包管理命令 使用glances -w开放…

linux中最基础使用的命令

小白学习记录: 前情提要:Linux命令基础格式!查看 ls看目录的小技巧 进入指定目录 cd查看当前工作目录 pwd创建一个新的目录(文件夹) mkdir创建文件 touch查看文件内容 cat、more操作文件、文件夹- 复制 cp- 移动 mv- 删除【危险操作&#xff…

PostgreSQL 远程登录postgres用户不需要密码?免密登录权限设置

PostgreSQL 安装之后,发现登录postgres用户时不需要密码。原因配置远程IP时,IP 地址对应的 method 设置成了 trust。 今天安全测试反馈,pgsql有弱口令问题,于是上去改了pgsql的密码,结果问题还没解决。查看了具体的问…

docker运行centos提示Operation not permitted

1、在docker中运行了centos7镜像 2、进入到centos容器中使用systemctl命令时提示 systemctl Failed to get D-Bus connection: Operation not permitted 3、解决办法 在运行centos镜像的时候加上--privileged参数 4、附上docker官网命令说明截图

OpenHarmony父子组件单项同步使用:@Prop装饰器

Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的,但是变化不会同步回其父组件。 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 概述 Prop装饰的变量和父组件建立单向的同步关系: ● P…

C语言(数据存储)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…

贪心,CF802B. Heidi and Library

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 802A - Codeforces 二、解题报告 1、思路分析 这个题相当于你有一个容量为K的Cache,然后给你一系列访存序列 当访问缺失时你不得不替换掉Cache中某些块 学过操作系统都很熟悉页面置…

anaconda怎么运行python

一、在Anaconda Navigator中运行 首先点击菜单栏中的“开始”,在搜索栏中输入“Anaconda”,然后选择“Anaconda Navigator”。 进入主界面,点击“Spyder”中的“Launch”即可。 然后按F5键运行即可。 二、在Anaconda Prompt中运行 也可以在…

Linux - 高级IO

目录 理解五种IO模型非阻塞IO的设置多路转接之select 实现一个简易的select服务器select服务器的优缺点 多路转接之poll 实现一个简易的poll服务器poll服务器的优缺点 多路转接之epoll epoll原理epoll的优势用epoll实现一个简易的echo服务器 epoll的LT和ET工作模式 什么是LT和…

PasteSpider之阿里云OSS功能的设计初衷

前言 在版本v24.6.2.1之后,有一个菜单"OSS配置",这个配置是干嘛用的呢? 阿里云OSS,或者说云盘,我觉得也可以当CDN使用,比如我们部署了一个网站,为了减少服务器的承载,可以…

数据结构汇总

等同于: 旋转的时候忽略Nil,选装完再加上。

好用的linux链接工具

工具下载链接: FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功…