国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

被錘了:Acks=all消息也會丟失?

開發(fā) 前端
所有的消息會先緩存到 RecordAccumulator 緩存中,再由 Sender 線程拉取消息發(fā)送到 Kafka 服務(wù)器端,通過 RecordAccumulator 和 Sender 線程的協(xié)作,實現(xiàn)了消息的批量發(fā)送、性能優(yōu)化和異常處理等功能,確保了消息的高效可靠傳輸。

消息隊列是面試中一定會被問到的技術(shù)模塊,雖然它在面試題占比不及并發(fā)編程和數(shù)據(jù)庫,但也屬于面試中的關(guān)鍵性問題。所以今天我們就來看一道,MQ 中高頻,但可能會打破你以往認知的一道面試題。

所謂的關(guān)鍵問題指的是這道面試題會影響你整體面試結(jié)果。

我們在面試消息隊列(Message Queue,MQ)時,尤其是面試 Kafka 時,經(jīng)常會被問到:如何保證消息不丟失?

那么,我們的回答會分為以下 3 部分:

  • 保證生產(chǎn)者消息不丟失。
  • 保證 Kafka 服務(wù)(器端)消息不丟失。
  • 保證消費者消息不丟失。

只有保證這 3 部分消息都不丟失,才能保證 Kafka 整體消息不丟失。

因為 Kafka 消息的傳遞流程如下(總共包含 3 部分):

1.如何保證生產(chǎn)者消息不丟失?

那怎么保證生產(chǎn)者消息不丟失呢?

要搞明白這個事,我們就要先了解一下生產(chǎn)者發(fā)送消息的執(zhí)行流程。

Kafka 生產(chǎn)者發(fā)送消息的執(zhí)行流程如下:

默認情況下,所有的消息會先緩存到 RecordAccumulator 緩存中,再由 Sender 線程拉取消息發(fā)送到 Kafka 服務(wù)器端,通過 RecordAccumulator 和 Sender 線程的協(xié)作,實現(xiàn)了消息的批量發(fā)送、性能優(yōu)化和異常處理等功能,確保了消息的高效可靠傳輸。

(1)RecordAccumulator 緩存作用

  • 暫存消息:RecordAccumulator 是 Kafk a生產(chǎn)者中的一個關(guān)鍵組件,它充當了一個緩存的角色,用于暫存主線程(Main Thread)發(fā)送過來的消息。這些消息在 RecordAccumulato r中等待被 Sender 線程批量發(fā)送。
  • 批量發(fā)送:RecordAccumulator 通過批量收集消息,減少了單個消息發(fā)送的網(wǎng)絡(luò)請求次數(shù),從而提高了發(fā)送效率。Sender 線程可以從 RecordAccumulator 中批量獲取消息,一次性發(fā)送到 Kafka 集群,減少了網(wǎng)絡(luò)傳輸?shù)馁Y源消耗。
  • 性能優(yōu)化:RecordAccumulator的緩存大小可以通過生產(chǎn)者客戶端參數(shù) buffer.memory 進行配置(默認值為 32MB)。合理的緩存大小設(shè)置可以平衡內(nèi)存使用與發(fā)送效率,達到最優(yōu)的性能表現(xiàn)。
  • 內(nèi)存管理:如果 RecordAccumulator 的緩存空間被占滿,生產(chǎn)者再次調(diào)用 send() 方法發(fā)送消息時,會出現(xiàn)阻塞(默認阻塞時間為 60 秒,可通過 max.block.ms 參數(shù)配置)。如果阻塞超時,則會拋出異常。這種機制有助于防止生產(chǎn)者因為無限制地緩存消息而耗盡系統(tǒng)資源。
  • ByteBuffer 復(fù)用:為了減少頻繁創(chuàng)建和釋放 ByteBuffer 所造成的資源消耗,RecordAccumulator 內(nèi)部還維護了一個 BufferPool,用于實現(xiàn) ByteBuffer 的復(fù)用。特定大小的 ByteBuffer 會被緩存起來,以便后續(xù)消息發(fā)送時重復(fù)使用。

(2)Sender 線程作用

  • 拉取消息:Sender 線程是 Kafka 生產(chǎn)者中的一個后臺線程,它負責(zé)從 RecordAccumulator 中拉取緩存的消息。Sender 線程會定期輪詢 RecordAccumulator,檢查是否有新消息需要發(fā)送。
  • 批量構(gòu)建請求:當 Sender 線程發(fā)現(xiàn)有新消息需要發(fā)送時,它會構(gòu)建一個或多個 ProducerRequest 請求。每個請求包含多個消息,以便進行有效的批量發(fā)送。這種批量發(fā)送機制可以顯著提高網(wǎng)絡(luò)傳輸效率。
  • 發(fā)送消息到 Kafka 集群:Sender 線程將構(gòu)建的 ProducerRequest 請求發(fā)送到 Kafka 集群的相應(yīng)分區(qū)。它會根據(jù)分區(qū)的 Leader 節(jié)點信息,將消息發(fā)送給對應(yīng)的 Broker 節(jié)點。
  • 異常處理:在消息發(fā)送過程中,可能會出現(xiàn)網(wǎng)絡(luò)故障、分區(qū)不可用等異常情況。Sender 線程負責(zé)處理這些異常,例如進行重試、重新連接等操作,以確保消息的可靠發(fā)送。
  • 狀態(tài)更新:一旦消息被成功接收并記錄在 Kafka Broker 的日志中,Sender 線程會通知 RecordAccumulator 更新消息的狀態(tài)。這樣,生產(chǎn)者就能夠知道哪些消息已經(jīng)被成功發(fā)送,哪些消息還需要重試發(fā)送。

2.生產(chǎn)者消息丟失的兩種場景

了解了 Kafka 生產(chǎn)者發(fā)送消息的流程之后,我們就能知道在這個環(huán)節(jié)丟失消息的情況有以下兩種:

  • 網(wǎng)絡(luò)抖動(消息不可達):生產(chǎn)者與 Kafka 服務(wù)端之間的鏈路不可達,發(fā)送超時。此時各個節(jié)點的狀態(tài)是正常,但消費端就是沒有消費消息,就像消息丟失了一樣。
  • 無消息確認(ack):生產(chǎn)者消息發(fā)送之后,無 ack 消息確認,直接返回消息發(fā)送成功,但消息發(fā)送之后,Kafka 服務(wù)宕機或掉電了,導(dǎo)致消息丟失。

怎么解決這個問題呢?

(1)網(wǎng)絡(luò)波動問題處理

網(wǎng)絡(luò)波動的話設(shè)置消息重試即可,因為網(wǎng)絡(luò)抖動消息不可達,所以只要配置了重試次數(shù),那么就會消息重試以此來保證消息不丟失。

在 Spring Boot 項目中,只需要在配置文件 application.yml 中,設(shè)置生產(chǎn)者的重試次數(shù)即可:

spring:  
  kafka:  
    producer:  
      retries: 3

(2)消息確認設(shè)置

Kafka 生產(chǎn)者的 ACK(Acknowledgment)機制是指生產(chǎn)者在發(fā)送消息到 Kafka 集群后,等待確認的方式。這個機制決定了生產(chǎn)者何時認為消息已經(jīng)成功發(fā)送,并直接影響到消息的可靠性和性能。

Kafka 生產(chǎn)者的 ACK 機制主要有以下三種類型。

① acks=0

生產(chǎn)者在將消息發(fā)送到網(wǎng)絡(luò)緩沖區(qū)后,立即認為消息已被提交,不會等待任何來自服務(wù)器的響應(yīng)。這時設(shè)置的重試次數(shù) retries 無效。

特點

  • 最高性能:由于不需要等待任何確認,因此具有最高的吞吐量。
  • 最低可靠性:消息可能會在發(fā)送過程中丟失,生產(chǎn)者無法知道消息是否成功到達服務(wù)器。

適用場景:對消息可靠性要求不高,但追求極致性能的場景。

② acks=1

生產(chǎn)者在將消息發(fā)送到主題的分區(qū) leader 后,等待 leader 的確認,即認為消息已被提交(此時 leader 寫入成功,并沒有刷新到磁盤),不用等待所有副本的確認。

特點

  • 中等可靠性和性能:提供了一定程度的可靠性,因為只有領(lǐng)導(dǎo)者副本確認消息后生產(chǎn)者才會收到確認。但如果領(lǐng)導(dǎo)者副本在確認后發(fā)生故障,而消息還未復(fù)制到其他副本,則消息可能會丟失。
  • 性能與可靠性平衡:在生產(chǎn)者性能和消息可靠性之間提供了一個折衷方案。

適用場景:適用于傳輸普通日志,允許偶爾丟失少量數(shù)據(jù)的場景。

③ acks=all 或 acks=-1

生產(chǎn)者需要等待所有同步副本(ISR, In-Sync Replicas)都成功寫入消息后,才認為消息已被提交。

特點

  • 最高可靠性:只有當所有同步副本都確認接收到消息后,生產(chǎn)者才會收到確認,確保了消息的可靠性。
  • 較低性能:由于需要等待所有同步副本的確認,因此可能會導(dǎo)致消息發(fā)送的延遲增加,從而影響性能。

適用場景:適用于對消息可靠性要求極高的場景,如金融交易等關(guān)鍵任務(wù)應(yīng)用。

在 Spring Boot 項目中,acks 可以在配置文件 application.yml 中設(shè)置:

spring:  
  kafka:  
    producer:  
      acks: all

3.acks=all消息一定不會丟失嗎?

正常情況下當我們設(shè)置 acks=all 時,其實是可以保證數(shù)據(jù)不丟失了。但是有一種特殊情況,如果 Topic 只有一個 Partition(分區(qū)時),也就是只有一個 Leader 節(jié)點時,此時消息也是會丟失的。

如果只有一個 Leader 節(jié)點,acks=all 的設(shè)置和 acks=1 的設(shè)置效果基本類似,當 Leader 確認消息之后,還沒來得及將消息刷到磁盤之前宕機了,那么就會造成消息丟失。

萬事必有妖,當面試官用疑問語句問你時,答案基本是否定的。如果是確定的話,面試官可能也就不會再問你了,所以當你聽到一個有悖于常識的問題時,先努力思考這個問題還有沒有其他答案。

責(zé)任編輯:姜華 來源: 磊哥和Java
相關(guān)推薦

2022-07-11 08:01:55

Kafka服務(wù)器宕機

2021-03-08 10:19:59

MQ消息磁盤

2025-09-10 09:14:00

AI硅谷996

2023-08-06 12:50:19

機器人AI

2020-04-21 15:22:35

ChromeFirefox瀏覽器

2020-08-18 09:14:57

DockerMATLAB數(shù)據(jù)

2024-04-11 08:29:35

Kafka異步發(fā)送發(fā)送端重試

2020-05-14 18:50:35

Chrome漏洞瀏覽器

2022-02-21 12:29:01

for循環(huán)前端

2017-09-01 21:21:06

戴爾

2025-06-11 03:15:00

2022-03-31 08:26:44

RocketMQ消息排查

2022-07-31 22:07:03

宕機業(yè)務(wù)場景

2018-07-16 14:19:44

AI銀行人工智能

2025-10-16 08:34:01

2019-02-25 10:03:17

程序員技能開發(fā)者

2021-06-07 09:26:25

Windows11操作系統(tǒng)微軟

2023-08-11 17:42:35

ChatGPT人工智能

2022-12-16 17:15:33

MQRabbitMQ

2022-10-11 23:14:39

模態(tài)循環(huán)過濾器代碼
點贊
收藏

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

国产精品99一区二区三| 亚洲色图视频免费播放| 国产精品美女免费看| 欧美人与性动交α欧美精品济南到| 亚洲激情av在线| 国产一线二线三线在线观看| 成人免费视频一区| 男人日女人的bb| 久久电影网站中文字幕| 欧美另类视频在线| 欧美亚洲免费| 蜜桃成人免费视频| 国产麻豆综合| 久久五月天婷婷| 黄色一区二区三区四区| 成人性色av| 国产精品99一区二区| 91精品国产手机| 久久精品国产一区二区三区日韩| 丝袜视频国产在线播放| 国产亚洲一区二区三区啪| 亚洲精品高清视频在线观看| 91久久在线播放| 国产视频三区| 激情久久中文字幕| 欧美午夜精品电影| 日韩精品一区二区三区丰满| 美女黄视频在线观看| av男人天堂一区| 亚洲男人天堂2023| 免费在线国产精品| 99精品视频免费全部在线| caoporn国产精品免费公开| 欧美jizzhd精品欧美巨大免费| 99理论电影网| 老司机午夜精品视频| 在线观看18视频网站| 国产99一区视频免费| 黄色一级在线视频| 国产亚洲午夜高清国产拍精品 | 最新国产精品精品视频| 欧美激情极品视频| 狠狠做深爱婷婷综合一区| 亚洲r级在线观看| 久久蜜桃资源一区二区老牛| 国产亚洲精品久久久久久久| 久久久99精品免费观看不卡| 免费一级网站| 91精品国产91热久久久做人人| 欧美人与性动交xxⅹxx| 7777免费精品视频| 午夜激情一区| 无码人妻精品一区二区蜜桃百度| 国产日韩欧美精品电影三级在线| 男人的天堂网av| 欧美一级黄色大片| 蜜桃精品一区二区三区| 国产日韩在线精品av| 久久精品国产色蜜蜜麻豆| 成人在线免费播放视频| 精品日韩视频在线观看| 性欧美videos高清hd4k| 欧美成人精品三级在线观看 | 欧美福利小视频| 亚洲综合五月| 麻豆视频传媒入口| 亚洲少妇最新在线视频| 精品孕妇一区二区三区| 久久伊人色综合| 欧美日本在线| 女人和拘做爰正片视频| 欧美色视频日本高清在线观看| av毛片在线免费看| 欧美福利视频在线| 天堂蜜桃91精品| av黄色免费| 欧美变态tickling挠脚心| 神马久久影院| 老司机午夜网站| 91国产丝袜在线播放| 精品久久久久久久久久岛国gif| 国产精品免费一区二区三区在线观看 | 免费yellow网站| 日韩午夜小视频| 色婷婷久久久| 粉嫩av一区二区三区天美传媒| 亚洲欧美国产三级| 视频二区不卡| 国产在线精品二区| 一区精品在线播放| 在线免费看h| 精品国产综合区久久久久久| 日韩毛片高清在线播放| 视频二区不卡| 欧美精品成人一区二区在线观看| 国产精品福利一区二区| 亚洲欧美在线成人| 蜜桃视频在线观看成人| 亚洲尤物视频在线| 精品国产伦一区二区三区观看说明 | 国产一区999| 中文字幕毛片| 欧美另类99xxxxx| 裸体一区二区三区| www.久久热.com| 国产精品人成电影| 国产精品三级在线观看| 成人黄页网站视频| 一级全黄肉体裸体全过程| 欧美日韩国产综合视频在线观看 | 久久久久国产精品嫩草影院| 久久97精品久久久久久久不卡| 精品一区二区在线视频| 国产激情在线视频| 国产精品一区二区欧美| 同产精品九九九| 日韩精品免费电影| 六十路在线观看| 国产一区二区三区四区五区3d| 欧美一区二区三区成人| 欧美一区激情| 美臀av在线| 91在线观看网站| 欧美老女人xx| 精品国产美女在线| 欧美精品一二三| 国产一级激情| 亚洲国产一区二区三区a毛片| 亚洲欧美日韩在线播放| 日韩福利视频导航| 国产h片在线观看| www.男人的天堂.com| 国产视频一区二区不卡| 成人高h视频在线| 日韩精品极品视频| 91久久人澡人人添人人爽欧美 | 99精品国产在热久久婷婷| 精品国产麻豆| 精品国产一区二区三区不卡蜜臂| 少妇视频在线| 精品无人区一区二区三区竹菊| 亚洲一区二区三区在线视频| 欧美大片在线看免费观看| 欧美区视频在线观看| 亚洲最大成人综合| 91小视频在线| 国产精品视频免费看| 国产午夜精品一区二区三区视频 | 日韩一区亚洲二区| 欧美88av| 亚洲精品一二三四五区| 日韩精品一二| 日本美女高潮视频| 三级黄色网址| 暖暖成人免费视频| 精品伊人久久| 精品日本12videosex| 豆花视频一区| 一区二区三区免费在线看| av在线视屏| 桃色一区二区| 99在线视频影院| 粉嫩一区二区| 成人性生交大片免费网站| 色综合888| 久草在线青青草| 亚洲乱码在线| 午夜国产不卡在线观看视频| 首页亚洲欧美制服丝腿| 日本不卡一二三区黄网| αv一区二区三区| 欧美午夜精品一区二区蜜桃| 日韩av三级在线观看| 性xxxxfjsxxxxx欧美| 性欧美1819sex性高清| 精品一区二区男人吃奶| 日本sm残虐另类| 精品999视频| 巨大荫蒂视频欧美大片| 在线中文免费视频| 韩国成人在线| 伊人成综合网伊人222| 国产一区二区三区四区五区| 日韩国产精品久久久| 91丝袜美腿高跟国产极品老师| 国产精品传媒入口麻豆| 99久久精品国产一区二区三区| 亚洲午夜精品久久久久久久久| 欧美日韩成人综合在线一区二区| 另类专区欧美制服同性| 国产精品对白一区二区三区| 美脚丝袜脚交一区二区| av在线收看| 久久99国内| 亚洲免费电影在线| 国产xxx69麻豆国语对白| 国产日韩精品综合网站| jizz蜜桃视频在线观看| 91精品国产色综合久久不卡粉嫩| 久久免费视频一区|