欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

后端學(xué)習(xí)-Zookeeper&Kafka-創(chuàng)新互聯(lián)

實(shí)習(xí)項(xiàng)目用到了 Kafka,系統(tǒng)學(xué)習(xí)一下

成都創(chuàng)新互聯(lián)公司是專業(yè)的綠春網(wǎng)站建設(shè)公司,綠春接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行綠春網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!文章目錄
  • Zookeeper
    • 一 概述
    • 二 數(shù)據(jù)結(jié)構(gòu)和監(jiān)聽(tīng)行為
    • 三 功能實(shí)現(xiàn)
      • 1 統(tǒng)一配置管理
      • 2 統(tǒng)一命名管理
      • 3 分布式鎖
      • 4 集群管理
  • Kafka
    • 一 系統(tǒng)架構(gòu)
      • 1 架構(gòu)圖
      • 2 數(shù)量關(guān)系
      • 3 Consumer 重要參數(shù)
    • 二 工作流程
      • 1 消息寫入過(guò)程
      • 2 數(shù)據(jù)不丟失:ACK、ISR
      • 3 數(shù)據(jù)不重復(fù):冪等性
      • 4 偏移量管理
      • 5 分區(qū)分配和重平衡
    • 三 常見(jiàn)問(wèn)題
      • 1 Kafka 高效讀寫原理

Zookeeper

參考鏈接

一 概述
  • 主要用于管理分布式系統(tǒng)
  • 客戶端 / 服務(wù)器結(jié)構(gòu),類似 Redis
  • 可以實(shí)現(xiàn)的功能
    • 統(tǒng)一配置管理
    • 統(tǒng)一命名服務(wù)
    • 分布式鎖
    • 集群管理
二 數(shù)據(jù)結(jié)構(gòu)和監(jiān)聽(tīng)行為

在這里插入圖片描述

  • 類似 Unix 文件系統(tǒng),呈樹(shù)形結(jié)構(gòu)
  • 每個(gè)節(jié)點(diǎn)是一個(gè) ZNode,節(jié)點(diǎn)攜帶配置文件,也可以有子節(jié)點(diǎn)
  • 兩種 ZNode 節(jié)點(diǎn)類型(每種又可分為帶序號(hào)、不帶序號(hào))
    • 短暫 / 臨時(shí) Ephemeral:當(dāng)客戶端和服務(wù)端斷開(kāi)連接后,節(jié)點(diǎn)會(huì)自動(dòng)刪除
    • 持久 Persistent:當(dāng)客戶端和服務(wù)端斷開(kāi)連接后,節(jié)點(diǎn)不會(huì)刪除
  • 兩種常用監(jiān)聽(tīng)方式
    • 監(jiān)聽(tīng)節(jié)點(diǎn)數(shù)據(jù)變化
    • 監(jiān)聽(tīng)子節(jié)點(diǎn)增減變化
三 功能實(shí)現(xiàn) 1 統(tǒng)一配置管理
  • common.yml放在節(jié)點(diǎn)中,系統(tǒng) A、B、C 監(jiān)聽(tīng)節(jié)點(diǎn)數(shù)據(jù)有無(wú)變更,如變更及時(shí)響應(yīng)

在這里插入圖片描述

2 統(tǒng)一命名管理
  • 類似域名到IP地址的映射,訪問(wèn)節(jié)點(diǎn)數(shù)據(jù)即可獲得IP地址

在這里插入圖片描述

3 分布式鎖
  • 首先所有系統(tǒng)都嘗試訪問(wèn) /locks 節(jié)點(diǎn),并創(chuàng)建臨時(shí)的帶序號(hào)節(jié)點(diǎn)
  • 如果系統(tǒng)持有編號(hào)最小的臨時(shí)節(jié)點(diǎn)時(shí),則認(rèn)為它獲得了鎖,否則監(jiān)聽(tīng)其編號(hào)之前的節(jié)點(diǎn)狀態(tài)
  • 釋放鎖時(shí)刪除臨時(shí)節(jié)點(diǎn)

在這里插入圖片描述

4 集群管理
  • 系統(tǒng)啟動(dòng)時(shí)在 /groupMember 節(jié)點(diǎn)下創(chuàng)建臨時(shí)節(jié)點(diǎn),通過(guò)監(jiān)聽(tīng)子節(jié)點(diǎn)感知系統(tǒng)狀態(tài)
  • 動(dòng)態(tài)選舉Master:如果使用帶序號(hào)的臨時(shí)節(jié)點(diǎn),將編號(hào)最小的系統(tǒng)作為Master

在這里插入圖片描述

Kafka 一 系統(tǒng)架構(gòu) 1 架構(gòu)圖

在這里插入圖片描述

組件作用
Producer消息生產(chǎn)者
Consumer消息消費(fèi)者
Consumer Group消費(fèi)者組
BrokerKafka 實(shí)例
Topic消息主題(邏輯概念)
PartitionTopic 分區(qū)(物理概念),一個(gè) Topic 可以包含多個(gè)分區(qū),單分區(qū)內(nèi)消息有序;每個(gè)分區(qū)對(duì)應(yīng)一個(gè) Leader 和多個(gè) Follower,僅 Leader 與生產(chǎn)者、消費(fèi)者交互;Partition 在物理上對(duì)應(yīng)一個(gè)文件夾
SegmentPartition 物理上被分成多個(gè) Segment,每個(gè) Segment 對(duì)應(yīng)一個(gè)物理文件
Zookeeper保存元信息,現(xiàn)已廢除
2 數(shù)量關(guān)系
  • 同一 Broker 對(duì)同一個(gè)分區(qū)也只能存放一個(gè)副本,所以分區(qū)副本數(shù)不能超過(guò) Broker 數(shù)

  • 消費(fèi)者組內(nèi)的消費(fèi)者,與分區(qū)的關(guān)系

    • 同一個(gè)組的多個(gè) Consumer 可以消費(fèi)同一個(gè) Topic 下不同分區(qū)的數(shù)據(jù)
    • 同一個(gè)分區(qū)只會(huì)被同一組內(nèi)的某個(gè) Consumer 所消費(fèi),防止出現(xiàn)組內(nèi)消息重復(fù)消費(fèi)的問(wèn)題
    • 一個(gè) Consumer 可以消費(fèi)同一個(gè) Topic 下的多個(gè)分區(qū)
      在這里插入圖片描述
    • 不同組的 Consumer,可以消費(fèi)同一個(gè)分區(qū)的數(shù)據(jù)
      在這里插入圖片描述
    • 通常分區(qū)數(shù) >= 一組內(nèi)的Consumer數(shù),以實(shí)現(xiàn)系統(tǒng)的可伸縮性,否則有一些 Consumer 是無(wú)法消費(fèi)的
      在這里插入圖片描述
3 Consumer 重要參數(shù)
屬性值含義
enable_auto_commitfalse自動(dòng)提交偏移量,當(dāng)一個(gè)Group在一個(gè)Topic上提交偏移量時(shí),下次再使用該Group讀取該Topic的消息時(shí),就會(huì)從偏移量的位置開(kāi)始讀取
session_timeout_ms檢測(cè)Consumer發(fā)生崩潰所需的最長(zhǎng)時(shí)間。超過(guò)該時(shí)間Consumer未匯報(bào)心跳,則認(rèn)為Consumer失效,將其移出group
auto_offset_resetearliest決定當(dāng)Group在某Topic上無(wú)偏移時(shí),開(kāi)始讀取的位置。設(shè)置為earliest使得每次抽樣都從Topic的開(kāi)始位置進(jìn)行抽樣,如果設(shè)置為latest就只能抽樣那些正在寫入消息的Topic
max_poll_records單次poll()的大消息數(shù)
group_idGroup名
max_poll_interval_ms兩次poll()的大間隔時(shí)間,超過(guò)該時(shí)間則認(rèn)為Consumer失效,將其移出Group
heartbeat_interval_msConsumer向Cooperator匯報(bào)心跳的間隔時(shí)間

二 工作流程 1 消息寫入過(guò)程

只有完成所有流程的消息才可以被消費(fèi)

  1. 選擇分區(qū),根據(jù)以下策略
    • 寫入時(shí)指定分區(qū)
    • 沒(méi)有指定分區(qū)但設(shè)置了 Key,則根據(jù) HashCode 選擇分區(qū)
    • 沒(méi)有指定分區(qū)和 Key,輪詢選擇分區(qū)
  2. 獲取指定分區(qū) Leader
  3. 生產(chǎn)者將消息發(fā)送給分區(qū) Leader
  4. Leader 將消息寫入本地文件
  5. 對(duì)應(yīng)的 Follower 從 Leader 拉取消息并寫入本地文件
  6. Follower 向 Leader 發(fā)送 ACK
  7. (ACK策略為-1時(shí))Leader 收到所有 ISR Follower 的 ACK 后,向生產(chǎn)者發(fā)送 ACK
2 數(shù)據(jù)不丟失:ACK、ISR
acks行為
0生產(chǎn)者發(fā)起消息寫入請(qǐng)求后,不會(huì)等待任何來(lái)自 Broker 器的響應(yīng)(最不安全)
1生產(chǎn)者發(fā)起消息寫入請(qǐng)求后,分區(qū)的 Leader 成功落盤后,Broker 即向生產(chǎn)者返回成功響應(yīng)
-1生產(chǎn)者發(fā)起消息寫入請(qǐng)求后,ISR 集合中的所有副本都落盤,Broker 才向生產(chǎn)者返回成功響應(yīng)(最安全)

Kafka 副本備份策略——如何保證消息不丟失

AR(Assigned Repllicas):一個(gè)分區(qū)的所有副本
ISR(In-Sync Replicas):能夠和 Leader 保持同步的 Follower + Leader本身 組成的集合
OSR(Out-Sync Relipcas):不能和 Leader 保持同步的 Follower 集合
AR = ISR + OSR

  • Kafka 只保證對(duì) ISR 集合中的所有副本保證完全同步
  • ISR 集合是動(dòng)態(tài)調(diào)整的,如果一些副本**和 Leader 完全同步兩次時(shí)間差超過(guò)閾值replica.lag.time.max.ms**則被移出 ISR(因?yàn)樯a(chǎn)者可以批量發(fā)送消息,所以不能指定未同步的消息條數(shù)作為檢測(cè)標(biāo)準(zhǔn))
  • 要使消息不丟失,需要滿足(acks = -1) && (replication.factor>=2) && (min.insync.replicas>=2)
3 數(shù)據(jù)不重復(fù):冪等性
  • 數(shù)據(jù)傳遞語(yǔ)義
    • 至少一次 =(acks = -1) && (replication.factor>=2) && (min.insync.replicas>=2)
    • 最多一次 =(acks = 0)
    • 精確一次 =(冪等性) && (至少一次)
  • 冪等性:生產(chǎn)者發(fā)送若干次重復(fù)的數(shù)據(jù),Broker 都只會(huì)持久化一次
    • 配置方法 (默認(rèn))enable.idempotence = true
    • 判斷的標(biāo)準(zhǔn)是,其中 PID 在 Kafka 啟動(dòng)時(shí)分配,Partition 代表分區(qū),SeqNumber 自增
    • 僅保證單分區(qū)單會(huì)話內(nèi)的冪等性
  • 生產(chǎn)者事務(wù)
    • 開(kāi)啟事務(wù)的前提是開(kāi)啟冪等性
    • 需要給生產(chǎn)者指定全局唯一的事務(wù) ID
    • 開(kāi)啟事務(wù)后,即使服務(wù)器重啟,也能繼續(xù)處理未完成的事務(wù)
4 偏移量管理
  • Offset 存放于內(nèi)置 Topic__consumer_offsets,由 Coordinator 管理

  • Consumer 的偏移量是按照 組 + Topic + 分區(qū) 進(jìn)行維護(hù)的

  • 偏移量相關(guān)概念

    • LEO (Last End Offset):某個(gè)分區(qū) Leader 或其 Follower 的下一個(gè) Offset 值
    • HW (High Watermark):某個(gè)分區(qū) ISR 中,LEO 的最小值,僅 HW 之前的消息是已提交的消息,對(duì)于消費(fèi)者可見(jiàn)
      在這里插入圖片描述
  • 偏移量的提交方式

    1. 自動(dòng)提交(可能造成重復(fù)消費(fèi))
      • 指定enable_auto_commit = trueauto_commit_interval_ms設(shè)置自動(dòng)提交間隔
    2. 手動(dòng)提交(可能造成漏消費(fèi))
      • 同步提交 :consumer.commitSync()提交失敗的時(shí)候一直嘗試提交,直到遇到無(wú)法重試的情況下才會(huì)結(jié)束
      • 異步提交+回調(diào)函數(shù):consumer.commitAsync()消費(fèi)者線程不會(huì)阻塞,提交失敗的時(shí)候也不會(huì)進(jìn)行重試,可以配合回調(diào)函數(shù)記錄錯(cuò)誤信息
      • 組合提交:消費(fèi)時(shí)執(zhí)行異步提交,停止消費(fèi)后執(zhí)行同步提交
KafkaConsumerconsumer = new KafkaConsumer(configs);
        consumer.subscribe(Collections.singletonList("topic_0"));
        try {while (true){ConsumerRecordsrecords = consumer.poll(3000);
                for (ConsumerRecordrecord : records) {System.out.println(record.value());
                }
                consumer.commitAsync();  // 異步提交
            }
        } catch (Exception exception){// ...
        } finally {consumer.commitSync();  // 消費(fèi)者關(guān)閉前,或者異步提交發(fā)生異常時(shí),使用同步阻塞式提交
            consumer.close();
        }
5 分區(qū)分配和重平衡
  • 分區(qū)分配的目的是,給定一個(gè) Topic 和一個(gè)消費(fèi)者組,決定組內(nèi)哪個(gè)消費(fèi)者消費(fèi) Topic 哪個(gè)分區(qū)的數(shù)據(jù)的問(wèn)題
  • 分區(qū)分配過(guò)程
    1. 同組的所有消費(fèi)者向 Broker 的 Coordinator 發(fā)送 JoinGroup 請(qǐng)求(Broker 和 Coordinator 一一對(duì)應(yīng),負(fù)責(zé)管理消費(fèi)者組)
    2. Coordinator 選出其中一個(gè)消費(fèi)者作為 Leader,并把 Topic 的情況傳遞給 Leader
    3. Leader 根據(jù)指定的分區(qū)分配策略,決定消費(fèi)方案,發(fā)送給 Coordinator
    4. Coordinator 將消費(fèi)方案發(fā)送給每個(gè)消費(fèi)者
  • 對(duì)于同一個(gè) Topic 的分區(qū)分配策略partition_assignment_strategy_config
    1.Range:計(jì)算每個(gè)消費(fèi)者要消費(fèi)的分區(qū)數(shù),多余的分區(qū)分配給前幾個(gè)消費(fèi)者(Topic 增加時(shí)容易造成消費(fèi)不均衡)
    2.RoundRobin:輪詢向消費(fèi)者分配分區(qū)
    3.Sticy:盡量均勻地分配分區(qū),根據(jù)上次的分配結(jié)果盡量減少變動(dòng)
  • 重平衡 Rebalance
    • 重平衡是 Kafka 集群的一個(gè)保護(hù)設(shè)定,重新分配每個(gè)消費(fèi)者消費(fèi)的分區(qū),用于剔除掉無(wú)法消費(fèi)或者過(guò)慢的消費(fèi)者
    • 進(jìn)行重平衡時(shí) Kafka 基本處于不可用狀態(tài),應(yīng)該盡量避免
    • 發(fā)生重平衡的情況:組內(nèi)消費(fèi)者數(shù)量變化、訂閱 Topic 分區(qū)數(shù)量變化、組訂閱 Topic 變化、Coordinator 宕機(jī)

三 常見(jiàn)問(wèn)題 1 Kafka 高效讀寫原理
  1. 頁(yè)緩存

    • Kafka 的數(shù)據(jù)并不是實(shí)時(shí)的寫入硬盤,當(dāng)上層有寫操作時(shí),操作系統(tǒng)只是將數(shù)據(jù)寫入 PageCache,同時(shí)標(biāo)記為 Dirty
    • 當(dāng)讀操作發(fā)生時(shí),先從 PageCache 中查找,如果發(fā)生缺頁(yè)才進(jìn)行磁盤調(diào)度,最終返回需要的數(shù)據(jù)
    • 避免在 JVM 內(nèi)部(堆內(nèi)存)緩存數(shù)據(jù),避免 GC 等機(jī)制帶來(lái)的負(fù)面影響;如果進(jìn)程重啟,JVM 內(nèi)的 Cache 會(huì)失效,但 PageCache 仍然可用
    • 實(shí)際上 PageCache 是把盡可能多的空閑內(nèi)存都當(dāng)做了磁盤來(lái)使用
  2. 零拷貝
    參考鏈接

    • 作用是在數(shù)據(jù)報(bào)從網(wǎng)絡(luò)設(shè)備到用戶程序空間傳遞的過(guò)程中,減少數(shù)據(jù)拷貝次數(shù),減少系統(tǒng)調(diào)用,實(shí)現(xiàn) CPU 的零參與

    • 網(wǎng)絡(luò)數(shù)據(jù)持久化到磁盤 (Producer 到 Broker)
      在這里插入圖片描述

    • 磁盤文件通過(guò)網(wǎng)絡(luò)發(fā)送 (Broker 到 Consumer)
      在這里插入圖片描述

  3. 磁盤順序?qū)懭?/p>

    • 每條消息都是追加方式寫入,不會(huì)從中間寫入和刪除消息,保證了磁盤的順序訪問(wèn)
  4. 批量操作

    • 在磁盤順序?qū)懭氲膱?chǎng)景下有助于性能提升
    • 更大的數(shù)據(jù)包有利于在網(wǎng)絡(luò) I/O 時(shí)提高吞吐量
  5. 分區(qū)并行處理

    • 不同 Partition 可位于不同機(jī)器,可以充分利用集群優(yōu)勢(shì),實(shí)現(xiàn)機(jī)器間的并行處理

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享名稱:后端學(xué)習(xí)-Zookeeper&Kafka-創(chuàng)新互聯(lián)
路徑分享:http://chinadenli.net/article44/hpehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)公司小程序開(kāi)發(fā)微信小程序商城網(wǎng)站網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)