国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(八)

這篇具有很好參考價值的文章主要介紹了《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(八)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

無消息丟失配置怎么實(shí)現(xiàn)?

  • Kafka 只對“已提交”的消息(committed message)做有限度的持久化保證。
    • 第一個核心要素是“已提交的消息”。
      • 當(dāng) Kafka 的若干個 Broker 成功地接收到一條消息并寫入到日志文件后,它們會告訴生產(chǎn)者程序這條消息已成功提交。
      • 可以選擇只要有一個 Broker 成功保存該消息就算是已提交,也可以是令所有 Broker 都成功保存該消息才算是已提交。
    • 第二個核心要素就是“有限度的持久化保證”。
      • Kafka 不可能保證在任何情況下都做到不丟失消息。
      • Kafka 不丟消息是有前提條件的。假如你的消息保存在 N 個 Kafka Broker 上,那么這個前提條件就是這 N 個 Broker 中至少有 1 個存活。

消息丟失案例

案例 1:生產(chǎn)者程序丟失數(shù)據(jù)

  • 目前 Kafka Producer 是異步發(fā)送消息的,也就是說如果你調(diào)用的是 producer.send(msg) 這個 API,那么它通常會立即返回,但此時你不能認(rèn)為消息發(fā)送已成功完成。
  • 如果用這個方式,可能會有哪些因素導(dǎo)致消息沒有發(fā)送成功呢?
    • 網(wǎng)絡(luò)抖動,導(dǎo)致消息壓根就沒有發(fā)送到 Broker 端;
    • 消息本身不合格導(dǎo)致 Broker 拒絕接收(比如消息太大了,超過了 Broker 的承受能力)。
  • 解決此問題的方法非常簡單:
    • Producer 永遠(yuǎn)要使用帶有回調(diào)通知的發(fā)送 API,也就是說不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。

案例 2:消費(fèi)者程序丟失數(shù)據(jù)

  • Consumer 端丟失數(shù)據(jù)主要體現(xiàn)在 Consumer 端要消費(fèi)的消息不見了。
    • Consumer 程序有個“位移”的概念,表示的是這個 Consumer 當(dāng)前消費(fèi)到的 Topic 分區(qū)的位置。
      《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(八),消息隊(duì)列,大數(shù)據(jù)開發(fā)基礎(chǔ),kafka,學(xué)習(xí),筆記
    • 只要維持先消費(fèi)消息,再更新位移的順序即可。這樣就能最大限度地保證消息不丟失。這種處理方式可能帶來的問題是消息的重復(fù)處理。
  • 還存在一種比較隱蔽的消息丟失場景
    • Consumer 程序從 Kafka 獲取到消息后開啟了多個線程異步處理消息,而 Consumer 程序自動地向前更新位移。
    • 假如其中某個線程運(yùn)行失敗了,它負(fù)責(zé)的消息沒有被成功處理,但位移已經(jīng)被更新了,因此這條消息對于 Consumer 而言實(shí)際上是丟失了。
    • 這里的關(guān)鍵在于 Consumer 自動提交位移,你沒有真正地確認(rèn)消息是否真的被消費(fèi)就“盲目”地更新了位移。
    • 這個問題的解決方案也很簡單:如果是多線程異步處理消費(fèi)消息,Consumer 程序不要開啟自動提交位移,而是要應(yīng)用程序手動提交位移。

最佳實(shí)踐

  • 不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。記住,一定要使用帶有回調(diào)通知的 send 方法。
  • 設(shè)置 acks = all。
    • acks 是 Producer 的一個參數(shù),代表了你對“已提交”消息的定義。
    • 如果設(shè)置成 all,則表明所有副本 Broker 都要接收到消息,該消息才算是“已提交”。
    • 這是最高等級的“已提交”定義。
  • 設(shè)置 retries 為一個較大的值。
    • 這?的 retries 同樣是 Producer 的參數(shù),對應(yīng) Producer 自動重試。
    • 當(dāng)出現(xiàn)網(wǎng)絡(luò)的瞬時抖動時,消息發(fā)送可能會失敗,此時配置了 retries > 0 的 Producer 能夠自動重試消息發(fā)送,避免消息丟失。
  • 設(shè)置 unclean.leader.election.enable = false。
    • 這是 Broker 端的參數(shù),它控制的是哪些 Broker 有資格競選分區(qū)的 Leader。
    • 如果一個 Broker 落后原先的 Leader 太多,那么它一旦成為新的 Leader,必然會造成消息的丟失。
    • 故一般都要將該參數(shù)設(shè)置成 false,即不允許這種情況的發(fā)生。
  • 設(shè)置 replication.factor >= 3。
    • 這也是 Broker 端的參數(shù)。
    • 其實(shí)這里想表述的是,最好將消息多保存幾份,畢竟目前防止消息丟失的主要機(jī)制就是冗余。
  • 設(shè)置 min.insync.replicas > 1。
    • 這依然是 Broker 端參數(shù),控制的是消息至少要被寫入到多少個副本才算是“已提交”。
    • 設(shè)置成大于 1 可以提升消息持久性。
    • 在實(shí)際環(huán)境中千萬不要使用默認(rèn)值 1。
  • 確保 replication.factor > min.insync.replicas。
    • 如果兩者相等,那么只要有一個副本掛機(jī),整個分區(qū)就無法正常工作了。
    • 我們不僅要改善消息的持久性,防止數(shù)據(jù)丟失,還要在不降低可用性的基礎(chǔ)上完成。
    • 推薦設(shè)置成 replication.factor = min.insync.replicas + 1。
  • 確保消息消費(fèi)完成再提交。
    • Consumer 端有個參數(shù) enable.auto.commit,最好把它設(shè)置成 false,并采用手動提交位移的方式。

文章來源地址http://www.zghlxwxcb.cn/news/detail-602083.html

到了這里,關(guān)于《kafka 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(八)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(六)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(六)

    在 Redis 主從集群中,哨兵機(jī)制是實(shí)現(xiàn)主從庫自動切換的關(guān)鍵機(jī)制。 哨兵其實(shí)就是一個運(yùn)行在特殊模式下的 Redis 進(jìn)程,主從庫實(shí)例運(yùn)行的同時,它也在運(yùn)行。哨兵主要負(fù)責(zé)的就是三個任務(wù):監(jiān)控、選主(選擇主庫)和通知。 監(jiān)控 哨兵進(jìn)程在運(yùn)行時,周期性地給所有的主從庫

    2024年02月13日
    瀏覽(48)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(一)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(一)

    為了保證數(shù)據(jù)的可靠性,Redis 需要在磁盤上讀寫 AOF 和 RDB,但在高并發(fā)場景里,這就會直接帶來兩個新問題: 一個是寫 AOF 和 RDB 會造成 Redis 性能抖動; 另一個是 Redis 集群數(shù)據(jù)同步和實(shí)例恢復(fù)時,讀 RDB 比較慢,限制了同步和恢復(fù)速度。 其實(shí),一個可行的解決方案就是使用

    2024年02月12日
    瀏覽(33)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(五)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(五)

    那我們總說的 Redis 具有高可靠性,又是什么意思呢? 其實(shí),這里有兩層含義:一是數(shù)據(jù)盡量少丟失,二是服務(wù)盡量少中斷。 AOF 和 RDB 保證了前者,而對于后者,Redis 的做法就是增加副本冗余量,將?份數(shù)據(jù)同時保存在多個實(shí)例上。 即使有一個實(shí)例出現(xiàn)了故障,需要過一段時

    2024年02月13日
    瀏覽(19)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(四)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(四)

    一旦服務(wù)器宕機(jī),內(nèi)存中的數(shù)據(jù)將全部丟失。目前,Redis 的持久化主要有兩大機(jī)制,即 AOF 日志和 RDB 快照。 AOF 日志是如何實(shí)現(xiàn)的? 我們比較熟悉的是數(shù)據(jù)庫的寫前日志(Write Ahead Log, WAL),也就是說,在實(shí)際寫數(shù)據(jù)前,先把修改的數(shù)據(jù)記到日志文件中,以便故障時進(jìn)行恢復(fù)

    2024年02月12日
    瀏覽(21)
  • 《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(三)

    《Redis 核心技術(shù)與實(shí)戰(zhàn)》課程學(xué)習(xí)筆記(三)

    Redis 是單線程,主要是指 Redis 的網(wǎng)絡(luò) IO 和鍵值對讀寫是由一個線程來完成的,這也是 Redis 對外提供鍵值存儲服務(wù)的主要流程。但 Redis 的其他功能,比如持久化、異步刪除、集群數(shù)據(jù)同步等,其實(shí)是由額外的線程執(zhí)行的。 多線程的開銷 我們剛開始增加線程數(shù)時,系統(tǒng)吞吐率

    2024年02月12日
    瀏覽(32)
  • 《MySQL 實(shí)戰(zhàn) 45 講》課程學(xué)習(xí)筆記(四)

    《MySQL 實(shí)戰(zhàn) 45 講》課程學(xué)習(xí)筆記(四)

    索引的出現(xiàn)其實(shí)就是為了提高數(shù)據(jù)查詢的效率,就像書的目錄一樣。 哈希表 哈希表是一種以鍵 - 值(key-value)存儲數(shù)據(jù)的結(jié)構(gòu),我們只要輸入待查找的值即 key,就可以找到其對應(yīng)的值即 Value。 哈希的思路很簡單,把值放在數(shù)組里,用一個哈希函數(shù)把 key 換算成一個確定的位

    2024年02月14日
    瀏覽(63)
  • 《Kubernetes入門實(shí)戰(zhàn)課》課程學(xué)習(xí)筆記(一)

    《Kubernetes入門實(shí)戰(zhàn)課》課程學(xué)習(xí)筆記(一)

    現(xiàn)在 Kubernetes 已經(jīng)沒有了實(shí)際意義上的競爭對手,它的地位就如同 Linux 一樣,成為了事實(shí)上的云原生操作系統(tǒng),是構(gòu)建現(xiàn)代應(yīng)用的基石。 現(xiàn)代應(yīng)用是什么? 是微服務(wù),是服務(wù)網(wǎng)格,這些統(tǒng)統(tǒng)要圍繞著容器來開發(fā)、部署和運(yùn)行。 使用容器就必然要用到容器編排技術(shù),在現(xiàn)在只

    2024年02月17日
    瀏覽(58)
  • 唐宇迪機(jī)器學(xué)習(xí)實(shí)戰(zhàn)課程筆記(全)

    唐宇迪機(jī)器學(xué)習(xí)實(shí)戰(zhàn)課程筆記(全)

    機(jī)器學(xué)習(xí)模型的參數(shù),不是直接數(shù)學(xué)求解,而是利用數(shù)據(jù),進(jìn)行迭代epoch,梯度下降優(yōu)化求解。 目標(biāo):更好的擬合連續(xù)函數(shù)(分割連續(xù)樣本空間的平面h(·)) ε ( i ) varepsilon^{(i)} ε ( i ) 是 真實(shí)值 y ( i ) y^{(i)} y ( i ) 與 預(yù)測值 h θ ( x ) = θ T x ( i ) h_theta (x)=theta^Tx^{(i)} h θ ? ( x )

    2024年02月16日
    瀏覽(20)
  • 【HarmonyOS4學(xué)習(xí)筆記】《HarmonyOS4+NEXT星河版入門到企業(yè)級實(shí)戰(zhàn)教程》課程學(xué)習(xí)筆記(一)

    【HarmonyOS4學(xué)習(xí)筆記】《HarmonyOS4+NEXT星河版入門到企業(yè)級實(shí)戰(zhàn)教程》課程學(xué)習(xí)筆記(一)

    課程地址: 黑馬程序員HarmonyOS4+NEXT星河版入門到企業(yè)級實(shí)戰(zhàn)教程,一套精通鴻蒙應(yīng)用開發(fā) (本篇筆記對應(yīng)課程第 1 - 2節(jié)) 開場白,HarmonyOS 的一個簡介,話不多說,直接看圖吧! 工欲善其事必先利其器,開發(fā)準(zhǔn)備需要兩件事:1、開發(fā)文檔;2、開發(fā)工具 打開鴻蒙官方網(wǎng)站,

    2024年04月24日
    瀏覽(23)
  • 北大肖臻老師《區(qū)塊鏈技術(shù)與應(yīng)用》系列課程學(xué)習(xí)筆記[27]以太坊-反思

    目錄 一、智能合約的反思 ????????1.Is smart?contract really smart? ????????2. Irrevocability is a double edged sword. ????????3. Nothing is irrevocable. 二、語言設(shè)計(jì)上的反思 ????????1.Is solidity the right programming language? ????????2.編寫智能合約的語言應(yīng)該有什么樣的表達(dá)力? 三

    2024年01月20日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包