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

參考鏈接
一 概述
common.yml放在節(jié)點(diǎn)中,系統(tǒng) A、B、C 監(jiān)聽(tīng)節(jié)點(diǎn)數(shù)據(jù)有無(wú)變更,如變更及時(shí)響應(yīng)




| 組件 | 作用 |
|---|---|
| Producer | 消息生產(chǎn)者 |
| Consumer | 消息消費(fèi)者 |
| Consumer Group | 消費(fèi)者組 |
| Broker | Kafka 實(shí)例 |
| Topic | 消息主題(邏輯概念) |
| Partition | Topic 分區(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è)文件夾 |
| Segment | Partition 物理上被分成多個(gè) Segment,每個(gè) Segment 對(duì)應(yīng)一個(gè)物理文件 |
| Zookeeper | 保存元信息,現(xiàn)已廢除 |
同一 Broker 對(duì)同一個(gè)分區(qū)也只能存放一個(gè)副本,所以分區(qū)副本數(shù)不能超過(guò) Broker 數(shù)
消費(fèi)者組內(nèi)的消費(fèi)者,與分區(qū)的關(guān)系


分區(qū)數(shù) >= 一組內(nèi)的Consumer數(shù),以實(shí)現(xiàn)系統(tǒng)的可伸縮性,否則有一些 Consumer 是無(wú)法消費(fèi)的
| 屬性值 | 值 | 含義 |
|---|---|---|
enable_auto_commit | false | 自動(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_reset | earliest | 決定當(dāng)Group在某Topic上無(wú)偏移時(shí),開(kāi)始讀取的位置。設(shè)置為earliest使得每次抽樣都從Topic的開(kāi)始位置進(jìn)行抽樣,如果設(shè)置為latest就只能抽樣那些正在寫入消息的Topic |
max_poll_records | … | 單次poll()的大消息數(shù) |
group_id | … | Group名 |
max_poll_interval_ms | … | 兩次poll()的大間隔時(shí)間,超過(guò)該時(shí)間則認(rèn)為Consumer失效,將其移出Group |
heartbeat_interval_ms | … | Consumer向Cooperator匯報(bào)心跳的間隔時(shí)間 |
只有完成所有流程的消息才可以被消費(fèi)
| 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)(最安全) |
3 數(shù)據(jù)不重復(fù):冪等性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)
(acks = -1) && (replication.factor>=2) && (min.insync.replicas>=2)(acks = 0)(冪等性) && (至少一次)enable.idempotence = true,其中 PID 在 Kafka 啟動(dòng)時(shí)分配,Partition 代表分區(qū),SeqNumber 自增Offset 存放于內(nèi)置 Topic__consumer_offsets,由 Coordinator 管理
Consumer 的偏移量是按照 組 + Topic + 分區(qū) 進(jìn)行維護(hù)的
偏移量相關(guān)概念

偏移量的提交方式
enable_auto_commit = true和auto_commit_interval_ms設(shè)置自動(dòng)提交間隔consumer.commitSync()提交失敗的時(shí)候一直嘗試提交,直到遇到無(wú)法重試的情況下才會(huì)結(jié)束consumer.commitAsync()消費(fèi)者線程不會(huì)阻塞,提交失敗的時(shí)候也不會(huì)進(jìn)行重試,可以配合回調(diào)函數(shù)記錄錯(cuò)誤信息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ū)分配和重平衡partition_assignment_strategy_configRange:計(jì)算每個(gè)消費(fèi)者要消費(fèi)的分區(qū)數(shù),多余的分區(qū)分配給前幾個(gè)消費(fèi)者(Topic 增加時(shí)容易造成消費(fèi)不均衡)RoundRobin:輪詢向消費(fèi)者分配分區(qū)Sticy:盡量均勻地分配分區(qū),根據(jù)上次的分配結(jié)果盡量減少變動(dòng)頁(yè)緩存
零拷貝
參考鏈接
作用是在數(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)
磁盤順序?qū)懭?/p>
批量操作
分區(qū)并行處理
你是否還在尋找穩(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)
猜你還喜歡下面的內(nèi)容