成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:對(duì)于 MQ 中的消息丟失你是如何理解的?

開(kāi)發(fā)
相信很多的小伙伴在面試的時(shí)候,涉及到MQ的面試題,消息丟失是必問(wèn)面試題之一。那么對(duì)于消息丟失你又是如何理解的呢?

相信很多的小伙伴在面試的時(shí)候,涉及到MQ的面試題,消息丟失是必問(wèn)面試題之一。那么對(duì)于消息丟失你又是如何理解的呢?

下面我們一起來(lái)看一下。

本文以 Kafka 舉例說(shuō)明。

一、什么是消息丟失?

消息丟失的定義是:在消息傳遞的過(guò)程中,在某個(gè)環(huán)節(jié)意外丟失,也就是消息沒(méi)有成功的發(fā)送或者沒(méi)有被正確的接收。

生產(chǎn)者未能成功發(fā)送消息。

消費(fèi)者未能正確接收消息。

消費(fèi)者未能正確處理消息。

對(duì)于第三條可以理解為特殊的消息丟失,因?yàn)橄M(fèi)者的邏輯處理錯(cuò)誤,程序bug等其他原因,造成消息在處理過(guò)程中消息丟失或者被忽略(異常之后錯(cuò)誤的應(yīng)答等),也就是說(shuō)消息沒(méi)有正確的被消費(fèi)掉,我們也可以認(rèn)為是一種消息丟失。

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

1.消息生產(chǎn)階段

  • 生產(chǎn)者配置錯(cuò)誤:生產(chǎn)者在發(fā)送消息時(shí),配置錯(cuò)誤的主體、分區(qū)或者消息的過(guò)期時(shí)間,造成消息無(wú)法正確發(fā)送到MQ中。
  • 網(wǎng)絡(luò)故障:生產(chǎn)者與MQ集群之間網(wǎng)絡(luò)故障。

2.消息存儲(chǔ)階段

  • 磁盤(pán)故障:以Kafka舉例,如果磁盤(pán)出現(xiàn)故障,Kafka中的消息無(wú)法洛盤(pán),可能導(dǎo)致消息的丟失。
  • 日志壓縮策略:使用了壓縮比較高的壓縮策略從而可能在壓縮的過(guò)程中丟失消息。

3.消息消費(fèi)階段

  • 消費(fèi)者處理失敗:在處理消費(fèi)邏輯時(shí),由于程序bug等原因,造成系統(tǒng)異常,錯(cuò)誤應(yīng)答從而丟失消息。
  • 消費(fèi)者提交偏移量錯(cuò)誤:當(dāng)消費(fèi)者消費(fèi)完消息之后,提交錯(cuò)誤的偏移量造成消息的重復(fù)消費(fèi)或者消息丟失。

三、消息丟失的解決方案有哪些

1.消息生產(chǎn)階段

(1) 配置正確的主體、分區(qū)、以及TTL。

(2) 使用ACK應(yīng)答,等待消息被MQ寫(xiě)入成功之后在確認(rèn)為發(fā)送成功。

  • ack=1:默認(rèn)值,leader副本成功寫(xiě)入消息即發(fā)送成功。
  • ack=0:發(fā)送消息后不等待服務(wù)端確認(rèn)。
  • ack=-1或者ack=all:生產(chǎn)者需要等待ISR中的所有副本都成功寫(xiě)入消息才為消息發(fā)送成功。

(3) 消息發(fā)送重試。

  • retries:配置生產(chǎn)者發(fā)送消息重試次數(shù)。

(4) 配置合理的壓縮策略。

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

(5) 設(shè)置合理的消息緩沖區(qū)大小。

  • buffer.memory:默認(rèn)33554432。生產(chǎn)者用于緩存一批發(fā)送到服務(wù)器消息的總內(nèi)存字節(jié)數(shù)。

(6) 使用合適的序列化器,防止序列號(hào)錯(cuò)誤造成消息丟失。

其他的配置可以參考官網(wǎng) Kafka 生產(chǎn)者配置:https://kafka.apache.org/documentation/#producerconfigs

2.消息存儲(chǔ)階段

  • 配置適當(dāng)?shù)母北緮?shù)量和ISR。在發(fā)生故障的時(shí)候消息仍然可以從其他的副本中進(jìn)行恢復(fù)。
  • 使用監(jiān)控,實(shí)時(shí)檢測(cè)消息的復(fù)制、磁盤(pán)的使用率。
  • 定期備份。

3.消息消費(fèi)階段

(1) 編寫(xiě)健壯的代碼,說(shuō)的容易,寫(xiě)起來(lái)還是得多測(cè)試。對(duì)于可能產(chǎn)生的異常原因進(jìn)行分析處理。當(dāng)發(fā)生異常時(shí),可以做如下處理:

  • 記錄錯(cuò)誤,有異常處理機(jī)制,保證能夠正確的處理異常情況。
  • 消息重試消息。(需要注意消費(fèi)冪等以及死循環(huán)造成消息堆積)

(2) 使用手動(dòng)提交偏移量。(需保證所有的異常情況代碼中都有對(duì)應(yīng)的異常處理機(jī)制,也就是第一點(diǎn),健壯的代碼)

(3) 使用自動(dòng)提交偏移量。(需要保證消費(fèi)邏輯正確)

(4) 使用監(jiān)控,監(jiān)控消費(fèi)者的消費(fèi)情況,發(fā)現(xiàn)異常立即上報(bào)。

(5) 正確的消費(fèi)者組管理,類(lèi)似消費(fèi)者重平衡或者重啟等造成的消息偏移量丟失。

(6) 備份,發(fā)生異常或者消息丟失時(shí),可以跟蹤到消費(fèi)者的消費(fèi)情況,直接使用備份恢復(fù)。

總結(jié)

上面我們分析了什么是消息丟失,產(chǎn)生的原因有哪些以及如何解決。通過(guò)看完這篇文章相信你對(duì)Kafka中的消息丟失也有了一定的了解,在工作中使用的時(shí)候也就不會(huì)沒(méi)有底氣了。

相信有眼尖的小伙伴發(fā)現(xiàn)了,在消費(fèi)者的處理邏輯中,多次消費(fèi)會(huì)造成消息的多次重復(fù)消費(fèi)。消息的重試也有可能造成消息的堆積。那么這些問(wèn)題就是下節(jié)課我們要說(shuō)的。

責(zé)任編輯:趙寧寧 來(lái)源: 醉魚(yú)Java
相關(guān)推薦

2024-06-06 11:57:44

2024-06-18 14:08:22

2020-08-17 07:40:19

消息隊(duì)列

2021-10-22 08:37:13

消息不丟失rocketmq消息隊(duì)列

2015-08-13 10:29:12

面試面試官

2024-05-11 15:11:44

系統(tǒng)軟件部署

2021-11-25 10:18:42

RESTfulJava互聯(lián)網(wǎng)

2021-08-09 07:47:40

Git面試版本

2025-01-13 09:24:32

2025-02-26 12:19:52

2025-03-10 11:48:22

項(xiàng)目服務(wù)設(shè)計(jì)

2023-12-19 09:24:22

LinuxBIOSUEFI

2020-12-01 08:47:36

Java異常開(kāi)發(fā)

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2024-09-27 15:43:52

零拷貝DMAIO

2020-06-12 15:50:56

options前端服務(wù)器

2022-03-21 09:05:18

volatileCPUJava

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝

2024-10-15 10:00:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品国产一区二区三区日日嗨 | 日韩区 | 99re6在线视频精品免费 | 国产精品国产三级国产aⅴ无密码 | 在线观看视频91 | 国产av毛片 | 成人在线免费av | 日本aa毛片a级毛片免费观看 | 国产aⅴ精品 | 国产精品影视在线观看 | 欧美成人精品一区二区男人看 | 欧美日韩高清免费 | www.v888av.com | 玖玖操| 欧美在线视频免费 | 亚洲国产成人av好男人在线观看 | 亚洲精品视频在线 | 有码一区 | 久久精品国产99国产 | 成年男女免费视频网站 | 久久99精品久久久久久狂牛 | www久久久 | av国产精品 | 成人亚洲片 | 暖暖成人免费视频 | 男人天堂手机在线视频 | 久久九七| 91精品在线播放 | 国产精品久久久久久久久久久久午夜片 | 一区二区在线免费观看视频 | 国产精品久久久久久久久久三级 | 久久不卡| 亚洲国产精品人人爽夜夜爽 | 男人的天堂在线视频 | 亚洲免费一区 | 黄色一级免费 | 成人网av| 国产一区久久 | 超碰免费在 | 99re6热在线精品视频播放 | 色在线看|