欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:分布式 Kafka概論

柚子快報(bào)激活碼778899分享:分布式 Kafka概論

http://yzkb.51969.com/

前言

任何消息中間件,除了基礎(chǔ)組件架構(gòu)外,核心特性無(wú)非三個(gè),消息可靠性、消息模型、吞吐量,本文要聊的正是這些東西,其余諸如API、下載安裝、集群搭建等都是死的,而且會(huì)隨著版本的變動(dòng)而改變,這類東西針對(duì)不同版本,查官方文檔即可。

目錄

前言

1.概述

1.1.特點(diǎn)

1.2.架構(gòu)

2.消息模型

2.1.發(fā)布訂閱模式

2.2.點(diǎn)對(duì)點(diǎn)

2.3.消息順序

2.4.消息傳遞語(yǔ)義

2.6.事務(wù)

3.如何保證吞吐量

3.1.順序?qū)?/p>

3.2.序列化

3.3.零拷貝

1.概述

1.1.特點(diǎn)

Kafka,一款具有高吞吐量、高可靠性的分布式消息中間件。其采用分布式架構(gòu)、順序?qū)?、序列化、零拷貝等機(jī)制保證了高吞吐量,數(shù)據(jù)自動(dòng)落磁盤完成持久化來(lái)保證消息不會(huì)丟失。

1.2.架構(gòu)

topic:

主題,消息的分類

partition:

分區(qū),Kafka是一個(gè)分布式的消息中間件,同一個(gè)topic可以被拆成多個(gè)partition,不同的partition存儲(chǔ)在不同的服務(wù)器節(jié)點(diǎn)上。分區(qū)是Kafka里的最小并行單位,一個(gè)消費(fèi)者可以消費(fèi)多個(gè)分區(qū),一個(gè)分區(qū)可以被多個(gè)消費(fèi)者組里的消費(fèi)者消費(fèi),但是一個(gè)分區(qū)不能同時(shí)被一個(gè)消費(fèi)者組里的多個(gè)消費(fèi)者消費(fèi),主要是為了避免重復(fù)消費(fèi)。

offset:

偏移量,Kafka會(huì)為每條消息分配一個(gè)偏移量,偏移量就是該消息的index,Kafka通過(guò)offset來(lái)對(duì)消息進(jìn)行提取,同一個(gè)分區(qū)中的offset是唯一的。

record:

消息記錄,Kafka中的消息以KV鍵值對(duì)的方式記錄,被稱為消息記錄。

replication:

Kafka通過(guò)副本機(jī)制,保證消息的可靠性,同編號(hào)的分區(qū)的個(gè)數(shù)和副本數(shù)是一致的,一份消息可以被復(fù)制為多個(gè)副本,分開(kāi)存儲(chǔ)在同編號(hào)的不同分區(qū)中。同編號(hào)的分區(qū)間有主從關(guān)系,讀寫都針對(duì)主分區(qū),從分區(qū)只負(fù)責(zé)進(jìn)行數(shù)據(jù)同步。Kafka會(huì)維護(hù)一個(gè)ISR,里面會(huì)記錄處于同步的分區(qū),不同步的會(huì)從ISR中剔除,直到同步后再重新納入。

2.消息模型

2.1.發(fā)布訂閱模式

一條消息可以被多個(gè)消費(fèi)者消費(fèi)。

消費(fèi)者或者消費(fèi)者組可以去訂閱某一個(gè)topic,該topic中的每一條消息都會(huì)推送給訂閱的消費(fèi)者或者消費(fèi)者組。

同一個(gè)消費(fèi)者組的不同消費(fèi)者回去消費(fèi)同一個(gè)topic的不同分區(qū),如果消費(fèi)者數(shù)量大于分區(qū)數(shù)量時(shí),同一個(gè)分區(qū)允許被同一個(gè)消費(fèi)組多次消費(fèi),只要不是同時(shí)并行消費(fèi)就行。

2.2.點(diǎn)對(duì)點(diǎn)

一條消息只能由一個(gè)消費(fèi)者消費(fèi)。

2.3.消息順序

同一個(gè)topic下,單個(gè)分區(qū)中消息是有序的,和發(fā)送順序一致。不同編號(hào)的分區(qū)間消息是無(wú)序的。

比如同一個(gè)topic的消息,A,B被存到了分區(qū)0中,C被存到了分區(qū)1中,那么消費(fèi)者消費(fèi)到的順序可能是ABC,也可能是ACB,或者其它排列組合。

2.4.消息傳遞語(yǔ)義

Kafka支持多種消息傳遞語(yǔ)義:

最多一次,消息可能會(huì)丟失,永遠(yuǎn)不重復(fù)發(fā)送。 至少一次,消息不會(huì)丟失,但是可能會(huì)重復(fù)發(fā)送。 精確一次,保證消息被傳遞到服務(wù)端且在服務(wù)端不重復(fù),精確一次需要生產(chǎn)者和消費(fèi)者一起來(lái)保證。

精確一次:

生產(chǎn)方需要保證:

發(fā)送方需要保證:

2.6.事務(wù)

Kafka的消息生產(chǎn)支持事務(wù),是標(biāo)準(zhǔn)的兩階段提交模型。

如果對(duì)兩階段的事務(wù)模型不熟悉的同學(xué),可以移步博主的另一篇文章:

分布式事務(wù)__BugMan的博客-CSDN博客

kafka中的事務(wù)狀態(tài):

開(kāi)啟(Ongoing):事務(wù)已經(jīng)開(kāi)啟,但尚未提交或回滾。 準(zhǔn)備提交(PreparingCommit):事務(wù)已經(jīng)發(fā)送了所有消息,并準(zhǔn)備提交。 提交(Committing):事務(wù)正在提交,即將把消息持久化到Kafka的主題中。 回滾(Aborting):事務(wù)正在回滾,將丟棄該事務(wù)中所有尚未提交的消息。

Kafka事務(wù)的主要流程:

開(kāi)啟事務(wù):生產(chǎn)者在發(fā)送消息前調(diào)用beginTransaction()方法來(lái)開(kāi)啟一個(gè)事務(wù)。開(kāi)啟事務(wù)時(shí),生產(chǎn)者會(huì)向事務(wù)協(xié)調(diào)器注冊(cè)自己,并獲取一個(gè)全局唯一的生產(chǎn)者ID和事務(wù)ID。 發(fā)送消息:生產(chǎn)者可以發(fā)送多個(gè)消息到不同的分區(qū),這些消息將在同一個(gè)事務(wù)中。 準(zhǔn)備提交:在所有消息都發(fā)送成功后,生產(chǎn)者調(diào)用commitTransaction()方法來(lái)準(zhǔn)備提交事務(wù)。在這個(gè)階段,生產(chǎn)者會(huì)將事務(wù)狀態(tài)更新為“準(zhǔn)備提交”,并向事務(wù)協(xié)調(diào)器發(fā)送“預(yù)提交”請(qǐng)求。 事務(wù)協(xié)調(diào)器處理:事務(wù)協(xié)調(diào)器接收到“預(yù)提交”請(qǐng)求后,會(huì)將該事務(wù)的狀態(tài)更新為“準(zhǔn)備提交”,并記錄下生產(chǎn)者ID和事務(wù)ID。然后,事務(wù)協(xié)調(diào)器將“預(yù)提交”請(qǐng)求發(fā)送給Kafka的其他Broker,并等待它們的響應(yīng)。 提交或回滾:如果所有Broker都能成功接受事務(wù)的“預(yù)提交”請(qǐng)求,那么事務(wù)協(xié)調(diào)器會(huì)向生產(chǎn)者發(fā)送“正式提交”請(qǐng)求,表示可以提交事務(wù)。生產(chǎn)者收到“正式提交”請(qǐng)求后,將所有消息持久化到Kafka的主題中。如果在準(zhǔn)備提交階段或提交階段出現(xiàn)錯(cuò)誤,生產(chǎn)者可以調(diào)用abortTransaction()方法來(lái)回滾事務(wù)。 結(jié)束事務(wù):事務(wù)完成后,生產(chǎn)者可以調(diào)用close()方法來(lái)關(guān)閉事務(wù)。這將會(huì)釋放生產(chǎn)者的資源并終止與事務(wù)協(xié)調(diào)器的連接。

kafka的事務(wù)隔離級(jí)別:

默認(rèn)為read_uncommitted,即臟讀。實(shí)際使用時(shí)設(shè)置為read_committed,讀已提交即可。

3.如何保證吞吐量

3.1.順序?qū)?/p>

Kafka為了保證消息不丟失,會(huì)將消息寫入磁盤來(lái)存儲(chǔ),消費(fèi)消息的時(shí)候再?gòu)拇疟P中讀出。眾所周知,磁盤IO是很慢的動(dòng)作,因?yàn)橐獙さ绬?。所以?duì)于磁盤IO來(lái)說(shuō)比較好的一種優(yōu)化方法就是將同類型的數(shù)據(jù)集中寫在連續(xù)的存儲(chǔ)空間上,減少尋道帶來(lái)的時(shí)間開(kāi)銷。這種方式叫做順序?qū)?,顧名思義將數(shù)據(jù)順序?qū)懺谶B續(xù)的存儲(chǔ)空間內(nèi)。Kafka采用了這種方式來(lái)加快磁盤IO??偨Y(jié)起來(lái)就是一個(gè)partition就是一個(gè)文件,向partition追加寫入,在消費(fèi)的時(shí)候就能保證數(shù)據(jù)的連續(xù)性。

kafka將來(lái)自Producer的數(shù)據(jù),順序追加在partition,partition就是一個(gè)文件,以此實(shí)現(xiàn)順序?qū)懭搿onsumer從broker讀取數(shù)據(jù)時(shí),因?yàn)樽詭Я似屏?,接著上次讀取的位置繼續(xù)讀,以此實(shí)現(xiàn)順序讀。

3.2.序列化

序列化和反序列化其實(shí)一張圖就能講明白:

MQ在網(wǎng)絡(luò)上傳輸message時(shí),將攜帶的數(shù)據(jù)序列化后進(jìn)行傳輸會(huì)加快傳輸速度,因?yàn)樾蛄谢蟮臄?shù)據(jù)在網(wǎng)絡(luò)傳輸種會(huì)具有以下幾個(gè)優(yōu)點(diǎn):

報(bào)文更加緊湊,序列化后的二進(jìn)制數(shù)據(jù)會(huì)比json之類的文本格式體積要小很多,自然報(bào)文的大小就更小。 不用依賴第三方依賴,像json轉(zhuǎn)對(duì)象之類的操作往往需要去依賴第三方的JSON框架,直接用序列化的話可以避免對(duì)第三方的依賴。 解析速度更快,序列化過(guò)程無(wú)需解析數(shù)據(jù),而 JSON 轉(zhuǎn)對(duì)象需要解析 JSON 文本。JSON 解析涉及字符到數(shù)字的轉(zhuǎn)換、字符串到對(duì)象的映射等處理,相比直接轉(zhuǎn)換二進(jìn)制數(shù)據(jù),解析過(guò)程較為復(fù)雜,因此在性能上較慢。

要注意的是以上優(yōu)點(diǎn)是指多數(shù)情況下,序列化相較于JSON之類的文本解析存在的優(yōu)勢(shì),少數(shù)極端的例子序列化不一定還存在以上優(yōu)勢(shì)。比如數(shù)據(jù)就傳一個(gè){"name":"zou"}之類的,序列化的報(bào)文由于某些描述性的字節(jié)位置是固定要有的,最終的報(bào)文大小不一定比JSON的報(bào)文大小要小,解析速度也不一定有JSON解析快。但是在實(shí)際應(yīng)用種我們傳輸?shù)臄?shù)據(jù)一定是一個(gè)相對(duì)復(fù)雜的對(duì)象,所以在實(shí)際業(yè)務(wù)場(chǎng)景種序列化是會(huì)存在以上的優(yōu)勢(shì)的。

Kafka的序列化和反序列化是在SDK內(nèi)實(shí)現(xiàn)的,Kafka在SDK內(nèi)提供了一套默認(rèn)的序列化機(jī)制,也支持自定義序列化機(jī)制。這里就不展開(kāi)談了,版本的更迭SDK種的API會(huì)有變化的,要用的時(shí)候查對(duì)應(yīng)版本的官方手冊(cè)更為穩(wěn)妥。

3.3.零拷貝

零拷貝(Zero-Copy)是一種優(yōu)化技術(shù),旨在提高數(shù)據(jù)傳輸?shù)男屎托阅?,特別是在文件傳輸和網(wǎng)絡(luò)數(shù)據(jù)傳輸中。傳統(tǒng)的數(shù)據(jù)傳輸方式涉及多次數(shù)據(jù)拷貝,而零拷貝通過(guò)避免不必要的數(shù)據(jù)拷貝操作,減少了數(shù)據(jù)傳輸?shù)拈_(kāi)銷,從而提高系統(tǒng)的性能。

在傳統(tǒng)的數(shù)據(jù)傳輸中,例如從磁盤讀取文件并通過(guò)網(wǎng)絡(luò)發(fā)送,通常涉及以下步驟:

將數(shù)據(jù)從磁盤讀取到內(nèi)核空間(Kernel Buffer)。將數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間(User Buffer)。將數(shù)據(jù)從用戶空間拷貝到網(wǎng)絡(luò)緩沖區(qū)(Network Buffer)。最終數(shù)據(jù)通過(guò)網(wǎng)絡(luò)發(fā)送。

這種傳統(tǒng)的數(shù)據(jù)傳輸方式涉及多次數(shù)據(jù)拷貝,每次拷貝都需要 CPU 參與,并且需要在內(nèi)核空間和用戶空間之間進(jìn)行數(shù)據(jù)復(fù)制,導(dǎo)致了額外的開(kāi)銷和延遲。

零拷貝技術(shù)的主要思想是避免不必要的數(shù)據(jù)拷貝,通過(guò)直接在內(nèi)核空間和用戶空間之間傳輸數(shù)據(jù),從而減少 CPU 和內(nèi)存的使用。

關(guān)于0拷貝更詳細(xì)的內(nèi)容異步博主的另一篇文章:

全網(wǎng)最清晰的零拷貝詳解,看一遍就會(huì)__BugMan的博客-CSDN博客

柚子快報(bào)激活碼778899分享:分布式 Kafka概論

http://yzkb.51969.com/

文章鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19320260.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄