日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

注意:Kafka 的這六個(gè)場(chǎng)景會(huì)丟失消息!

來源: 責(zé)編: 時(shí)間:2024-04-11 08:59:39 235觀看
導(dǎo)讀大家好,我是君哥。我們使用 Kafka 的時(shí)候,怎樣能保證不丟失消息呢?今天來聊一聊這個(gè)話題。首先我們看一下 Kafka 的架構(gòu)圖,場(chǎng)景一:異步發(fā)送Producer 異步發(fā)送是丟失消息比較多的場(chǎng)景,Kafka 異步發(fā)送的代碼如下:ProducerRecor

fMD28資訊網(wǎng)——每日最新資訊28at.com

大家好,我是君哥。fMD28資訊網(wǎng)——每日最新資訊28at.com

我們使用 Kafka 的時(shí)候,怎樣能保證不丟失消息呢?今天來聊一聊這個(gè)話題。fMD28資訊網(wǎng)——每日最新資訊28at.com

首先我們看一下 Kafka 的架構(gòu)圖,fMD28資訊網(wǎng)——每日最新資訊28at.com

fMD28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景一:異步發(fā)送

Producer 異步發(fā)送是丟失消息比較多的場(chǎng)景,Kafka 異步發(fā)送的代碼如下:fMD28資訊網(wǎng)——每日最新資訊28at.com

ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("the-topic", key, value);RecordMetadata metadata = producer.send(record).get();

Producer 發(fā)送消息后,不用等待發(fā)送結(jié)果,就可以繼續(xù)執(zhí)行后面的邏輯。如果發(fā)送失敗,就會(huì)丟失消息。fMD28資訊網(wǎng)——每日最新資訊28at.com

Kafka 提供了回調(diào)方法,可以同步等待發(fā)送結(jié)果,這樣降低了發(fā)送效率,但可以對(duì)發(fā)送失敗的場(chǎng)景進(jìn)行處理,比如重新發(fā)送。fMD28資訊網(wǎng)——每日最新資訊28at.com

ProducerRecord<byte[],byte[]> record = new ProducerRecord<byte[],byte[]>("the-topic", key, value);producer.send(record,                (Callback) (metadata, e) -> {                    if(e != null) {                        e.printStackTrace();                    } else {                        System.out.println("The offset of the record we just sent is: " + metadata.offset());                    }                });

場(chǎng)景二:配置 acks=0

從文章開頭的架構(gòu)圖中可以看到,Broker Leader 節(jié)點(diǎn)收到消息后,會(huì)同步給 Follower 節(jié)點(diǎn)。fMD28資訊網(wǎng)——每日最新資訊28at.com

在 Producer 端有一個(gè) acks 配置,說明如下 :fMD28資訊網(wǎng)——每日最新資訊28at.com

  • acks=0:Producer 發(fā)送消息后不等待 Broker 的響應(yīng);
  • acks=1:Producer 發(fā)送消息后,Leader 節(jié)點(diǎn)寫入消息成功后給 Producer 發(fā)送響應(yīng);
  • acks=all/-1:Producer 發(fā)送消息后,需要 ISR 列表中所有 Broker 節(jié)點(diǎn)都寫入消息成功才會(huì)給 Producer 發(fā)送響應(yīng)。

注意:acks=all/-1 是最高安全級(jí)別,可以配合 min.insync.replicas 參數(shù)使用,當(dāng) acks=all/-1 時(shí),min.insync.replicas 表示 ISR 列表中最小寫入消息成功的副本數(shù)。fMD28資訊網(wǎng)——每日最新資訊28at.com

如下圖,cks=all/-1,當(dāng) min.insync.replicas=2 時(shí)。fMD28資訊網(wǎng)——每日最新資訊28at.com

fMD28資訊網(wǎng)——每日最新資訊28at.com

如果 ISR 列表中有【Broker0、Broker1】,即使 Broker2 寫入消息失敗,也會(huì)給 Producer 返回成功。fMD28資訊網(wǎng)——每日最新資訊28at.com

如果 ISR 列表中只有【Broker0】,則無論如何都不會(huì)給 Producer 返回成功。fMD28資訊網(wǎng)——每日最新資訊28at.com

如果 ISR 列表中有【Broker0、Broker1、Broker2】,則 3 個(gè) Broker 都寫成功才會(huì)給 Producer 返回成功。fMD28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景三:發(fā)送端重試

如果配置 retries=0,Producer 發(fā)送消息失敗后是不會(huì)進(jìn)行重試的,要保證消息不丟失,可以增加 retries 的配置值,避免因?yàn)榫W(wǎng)絡(luò)抖動(dòng)而造成的發(fā)送失敗。fMD28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景四:Follower 落后太多

Kafka Broker 有一個(gè)參數(shù):unclean.leader.election.enable,這個(gè)參數(shù)值說明如下:fMD28資訊網(wǎng)——每日最新資訊28at.com

  • true:允許 ISR 列表之外的節(jié)點(diǎn)參與競(jìng)選 Leader;
  • false:不允許 ISR 列表之外的節(jié)點(diǎn)參與競(jìng)選 Leader。

如果設(shè)置為 true,也是會(huì)丟失消息的,看下圖:fMD28資訊網(wǎng)——每日最新資訊28at.com

fMD28資訊網(wǎng)——每日最新資訊28at.com

如果 Leader 和 Follower1 都掛了,這時(shí)就要考慮是否讓 Follower2 參加競(jìng)選,把 unclean.leader.election.enable 參數(shù)值設(shè)置為 true,則 Follower2 也可以競(jìng)選 Leader,并且作為唯一存活節(jié)點(diǎn)成功競(jìng)選為 Leader,但是它并沒有同步到偏移量為 3、4、5 的消息,fMD28資訊網(wǎng)——每日最新資訊28at.com

而之前的 Leader 上線后,成為了 Follower,因?yàn)?Follower 的 LEO(Log End Offset)不能大于 Leader,所以之前偏移量為 3、4、5 的消息就被丟棄了。如下圖:fMD28資訊網(wǎng)——每日最新資訊28at.com

fMD28資訊網(wǎng)——每日最新資訊28at.com

所以,要保證消息不丟失,unclean.leader.election.enable 這個(gè)參數(shù)值要設(shè)置為 false。fMD28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景五:Broker 宕機(jī)

為了提升性能,Kafka 使用 Page Cache,先將消息寫入 Page Cache,采用了異步刷盤機(jī)制去把消息保存到磁盤。如果刷盤之前,Broker Leader 節(jié)點(diǎn)宕機(jī)了,并且沒有 Follower 節(jié)點(diǎn)可以切換成 Leader,則 Leader 重啟后這部分未刷盤的消息就會(huì)丟失。fMD28資訊網(wǎng)——每日最新資訊28at.com

這種場(chǎng)景下多設(shè)置副本數(shù)是一個(gè)好的選擇,通常的做法是設(shè)置 replication.factor >= 3,這樣每個(gè) Partition 就會(huì)有 3 個(gè)以上 Broker 副本來保存消息,同時(shí)宕機(jī)的概率很低。fMD28資訊網(wǎng)——每日最新資訊28at.com

同時(shí)可以配合場(chǎng)景二中的參數(shù) min.insync.replicas > 1(不建議使用默認(rèn)值 1),表示消息至少要被成功寫入到 2 個(gè) Broker 副本才算是發(fā)送成功。fMD28資訊網(wǎng)——每日最新資訊28at.com

注意:參數(shù)配置要保證 replication.factor > min.insync.replicas,通常設(shè)置成 replication.factor = min.insync.replicas + 1。如果這 2 個(gè)參數(shù)設(shè)置成相等,則只要有一個(gè) Broker 節(jié)點(diǎn)宕機(jī),Broker 就無法給 Producer 返回發(fā)送成功,系統(tǒng)可用性降低。fMD28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景六:并發(fā)消費(fèi)

如果消費(fèi)端采用多線程并發(fā)消費(fèi),很容易因?yàn)椴l(fā)更新 Offset 導(dǎo)致消費(fèi)失敗。看下圖:fMD28資訊網(wǎng)——每日最新資訊28at.com

fMD28資訊網(wǎng)——每日最新資訊28at.com

線程 1 拉取 3 條消息把 Offset 更新成 3,線程 2 把 Offset 更新成 6,線程 3 把 Offset 更新成 9。這時(shí)如果線程 2 消費(fèi)失敗了,想要重新消費(fèi),但是 Offset 已經(jīng)更新到了 9,不能拉取到 Offset 9 以前的消息了。fMD28資訊網(wǎng)——每日最新資訊28at.com

所以,消費(fèi)者并發(fā)消費(fèi)很可能會(huì)造成消息丟失,如果對(duì)消息丟失很敏感,最好使用單線程來進(jìn)行消費(fèi)。fMD28資訊網(wǎng)——每日最新資訊28at.com

如果采用多線程,可以把 enable.auto.commit 設(shè)置為 false,這樣相當(dāng)于每次消費(fèi)完后手動(dòng)更新 Offset。不過這又會(huì)帶來重復(fù)消費(fèi)問題,比如上面的例子,如果線程 2 消費(fèi)失敗了,則手動(dòng)把 Offset 更新成 3,線程 3 消費(fèi)成功后,再次拉取,還會(huì)拉取到  6、7、8 這三條數(shù)據(jù)。因此消費(fèi)端需要做好冪等處理。fMD28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本文介紹了 Kafka 丟失消息的六個(gè)場(chǎng)景,使用 Kafka 時(shí)需要根據(jù)實(shí)際情況制定解決方案,希望本文介紹的場(chǎng)能夠?qū)δ阌兴鶐椭?span style="display:none">fMD28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-82738-0.html注意:Kafka 的這六個(gè)場(chǎng)景會(huì)丟失消息!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在JavaScript中復(fù)制一個(gè)對(duì)象?

下一篇: C++線程安全:共享數(shù)據(jù)的完美守護(hù)者

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
一区二区三区精品视频| 国产色产综合色产在线视频| 久久精品一区二区三区四区 | 亚洲国产高清aⅴ视频| 91久久精品一区二区别| 日韩天天综合| 午夜日韩电影| 老司机精品视频网站| 欧美日产一区二区三区在线观看| 国产精品美女久久久久av超清| 国产一区二区精品久久91| 亚洲国产精品免费| 亚洲夜晚福利在线观看| 久久精品三级| 亚洲国产成人av在线| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 一区二区亚洲精品| 亚洲美女在线看| 欧美一区二区高清在线观看| 欧美aaa级| 国产精品一区二区久久久久| 在线国产欧美| 亚洲欧美激情视频| 欧美成人三级在线| 国产美女精品在线| 亚洲人成在线免费观看| 午夜精品福利在线| 欧美大片在线看免费观看| 国产精品视频九色porn| 亚洲欧洲在线观看| 亚久久调教视频| 欧美日韩国产一中文字不卡| 黄色影院成人| 亚洲尤物在线视频观看| 欧美国产在线视频| 国产主播一区二区| 亚洲午夜视频在线| 欧美高清日韩| 国内揄拍国内精品久久| 亚洲一区三区视频在线观看| 欧美成人在线网站| 韩国av一区二区三区在线观看 | 久久久久99| 国产精品久久久久久久免费软件 | 久久夜色精品国产欧美乱| 国产精品久久国产精品99gif| 亚洲福利视频免费观看| 欧美一区二区三区免费观看| 欧美日韩视频免费播放| 亚洲国产91精品在线观看| 欧美影院午夜播放| 国产精品久久久久毛片大屁完整版 | 99精品视频免费| 美女黄网久久| 国产综合色产| 亚洲欧美精品| 欧美色视频日本高清在线观看| 亚洲国产精品视频| 亚洲国产裸拍裸体视频在线观看乱了中文| 一本色道久久| 欧美激情国产日韩精品一区18| 狠狠爱综合网| 久久激情综合| 国产麻豆精品在线观看| 亚洲影视在线| 欧美日韩一区二区高清| 亚洲美女黄网| 欧美激情第三页| 亚洲乱码国产乱码精品精 | 欧美成人精品三级在线观看| 黄色国产精品一区二区三区| 欧美一站二站| 国产手机视频精品| 欧美一区二视频在线免费观看| 国产精品女人久久久久久| 亚洲天堂男人| 欧美性开放视频| 亚洲视频在线观看三级| 欧美视频不卡中文| 中文日韩电影网站| 欧美性一二三区| 亚洲私人黄色宅男| 欧美图区在线视频| 一区二区三区视频观看| 欧美日韩中文字幕精品| 国产精品99久久久久久白浆小说| 欧美日韩一区二区三区在线看 | 欧美精品在线一区| 日韩亚洲欧美高清| 欧美视频一区二区三区| 亚洲综合999| 国产日韩欧美在线一区| 久久精品国产精品亚洲| 黄色欧美成人| 欧美sm视频| 日韩亚洲欧美成人| 国产精品狠色婷| 午夜免费在线观看精品视频| 国产视频一区二区在线观看| 久久精品视频在线看| 在线观看欧美日韩| 欧美激情精品久久久久久大尺度 | 欧美日韩网站| 亚洲欧美在线磁力| 狠狠色伊人亚洲综合成人| 鲁大师成人一区二区三区| 亚洲精品在线视频| 国产精品v欧美精品v日本精品动漫| 亚洲综合色婷婷| 国产一区二区在线观看免费| 蜜桃av噜噜一区二区三区| 日韩一级网站| 国产精品夜夜夜一区二区三区尤| 久久不射中文字幕| 亚洲激情网址| 国产精品成人播放| 久久精品国产77777蜜臀| 一区在线观看视频| 欧美久久综合| 午夜精品一区二区三区在线视| 狠狠网亚洲精品| 欧美精品一二三| 午夜精品久久久久久久蜜桃app| 韩国福利一区| 一本一本久久a久久精品综合麻豆| 国产精品乱人伦中文| 久久久精品日韩| 日韩亚洲欧美一区二区三区| 国产精品香蕉在线观看| 久久综合色一综合色88| 在线一区二区三区做爰视频网站 | 欧美午夜剧场| 久久久久久一区| 日韩网站免费观看| 国产亚洲福利一区| 欧美久久久久久久久久| 欧美在线你懂的| 亚洲理论电影网| 黄色成人在线| 欧美午夜精品久久久久久人妖| 久久久不卡网国产精品一区| 99国产精品| 精品成人在线| 国产精品免费区二区三区观看| 噜噜噜噜噜久久久久久91| 亚洲性人人天天夜夜摸| 影音先锋久久| 国产九九精品| 欧美乱妇高清无乱码| 久久久国产成人精品| 在线视频亚洲欧美| 亚洲高清av| 国产亚洲激情视频在线| 欧美三日本三级三级在线播放| 久久综合伊人| 欧美一级专区| 亚洲视频日本| 亚洲精品激情| 在线免费一区三区| 国产视频精品xxxx| 国产精品v片在线观看不卡| 欧美成人免费观看| 久久国产黑丝| 亚洲专区国产精品| 99精品免费视频| 在线日韩av片| 狠狠色狠狠色综合日日五| 国产精品视频免费观看| 欧美日韩亚洲一区在线观看| 欧美成人免费大片| 久久午夜电影网| 欧美怡红院视频| 亚洲伊人久久综合| 一本色道久久综合狠狠躁篇的优点| 亚洲高清av在线| 激情av一区| 狠狠色噜噜狠狠色综合久| 国产精品视频精品| 欧美午夜视频一区二区| 欧美日本不卡视频| 欧美福利电影在线观看| 美女啪啪无遮挡免费久久网站| 久久www成人_看片免费不卡| 亚洲免费视频成人| 中日韩高清电影网| 一区二区欧美在线| 亚洲毛片在线| 亚洲日产国产精品| 欧美日韩免费观看一区三区| 美女精品在线| 玖玖精品视频| 麻豆九一精品爱看视频在线观看免费| 久久成人综合视频| 欧美一区二区三区四区夜夜大片| 亚洲一区二区视频在线| 亚洲天堂av在线免费观看| 一区二区日韩免费看| 一区二区三区精品国产| 亚洲视频你懂的| 亚洲午夜小视频| 亚洲男人的天堂在线aⅴ视频| 亚洲一区二区三区在线播放| 亚洲自拍高清| 欧美一区二区高清在线观看|