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

Kafka系列 - 生產(chǎn)者客戶端架構(gòu)以及3個重要參數(shù)

這篇具有很好參考價值的文章主要介紹了Kafka系列 - 生產(chǎn)者客戶端架構(gòu)以及3個重要參數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

整體架構(gòu)

Kafka系列 - 生產(chǎn)者客戶端架構(gòu)以及3個重要參數(shù),Kafka庖丁解牛,kafka,架構(gòu),分布式

整個生產(chǎn)者客戶端由兩個縣城協(xié)調(diào)運行,這兩個線程分別為主線程和Sender線程(發(fā)送線程)。

主線程中由KafkaProducer創(chuàng)建消息,然后通過可能的攔截器,序列化器和分區(qū)器之后緩存到消息累加器(RecordAccumulator)。Sender線程負(fù)責(zé)從RecordAccumulator中獲取消息并將其發(fā)送到kafka中。

RecordAccumulator 主要用來緩存消息以便 Sender 線程可以批量發(fā)送,進而減少網(wǎng)絡(luò)傳輸?shù)馁Y源消耗以提升性能。RecordAccumulator 緩存的大小可以通過生產(chǎn)者客戶端參數(shù) buffer.memory 配置,默認(rèn)值為 33554432B,即32MB。如果生產(chǎn)者發(fā)送消息的速度超過發(fā)送到服務(wù)器的速度,則會導(dǎo)致生產(chǎn)者空間不足,這個時候 KafkaProducer 的 send() 方法調(diào)用要么被阻塞,要么拋出異常,這個取決于參數(shù) max.block.ms 的配置,此參數(shù)的默認(rèn)值為60000,即60秒。

主線程中發(fā)送過來的消息都會被追加到 RecordAccumulator 的某個雙端隊列(Deque)中,在 RecordAccumulator 的內(nèi)部為每個分區(qū)都維護了一個雙端隊列,隊列中的內(nèi)容就是 ProducerBatch,即 Deque。消息寫入緩存時,追加到雙端隊列的尾部;Sender 讀取消息時,從雙端隊列的頭部讀取。注意 ProducerBatch 不是 ProducerRecord,ProducerBatch 中可以包含一至多個 ProducerRecord。通俗地說,ProducerRecord 是生產(chǎn)者中創(chuàng)建的消息,而 ProducerBatch 是指一個消息批次,ProducerRecord 會被包含在 ProducerBatch 中,這樣可以使字節(jié)的使用更加緊湊。與此同時,將較小的 ProducerRecord 拼湊成一個較大的 ProducerBatch,也可以減少網(wǎng)絡(luò)請求的次數(shù)以提升整體的吞吐量。

Sender 從 RecordAccumulator 中獲取緩存的消息之后,會進一步將原本<分區(qū), Deque< ProducerBatch>> 的保存形式轉(zhuǎn)變成 <Node, List< ProducerBatch> 的形式,其中 Node 表示 Kafka 集群的 broker 節(jié)點。對于網(wǎng)絡(luò)連接來說,生產(chǎn)者客戶端是與具體的 broker 節(jié)點建立的連接,也就是向具體的 broker 節(jié)點發(fā)送消息,而并不關(guān)心消息屬于哪一個分區(qū);而對于 KafkaProducer 的應(yīng)用邏輯而言,我們只關(guān)注向哪個分區(qū)中發(fā)送哪些消息,所以在這里需要做一個應(yīng)用邏輯層面到網(wǎng)絡(luò)I/O層面的轉(zhuǎn)換。

在轉(zhuǎn)換成 <Node, List> 的形式之后,Sender 還會進一步封裝成 <Node, Request> 的形式,這樣就可以將 Request 請求發(fā)往各個 Node 了,這里的 Request 是指 Kafka 的各種協(xié)議請求,對于消息發(fā)送而言就是指具體的 ProduceRequest。

請求在從 Sender 線程發(fā)往 Kafka 之前還會保存到 InFlightRequests 中,InFlightRequests 保存對象的具體形式為 Map<NodeId, Deque>,它的主要作用是緩存了已經(jīng)發(fā)出去但還沒有收到響應(yīng)的請求(NodeId 是一個 String 類型,表示節(jié)點的 id 編號)。與此同時,InFlightRequests 還提供了許多管理類的方法,并且通過配置參數(shù)還可以限制每個連接(也就是客戶端與 Node 之間的連接)最多緩存的請求數(shù)。這個配置參數(shù)為 max.in.flight.requests.per.connection,默認(rèn)值為5,即每個連接最多只能緩存5個未響應(yīng)的請求,超過該數(shù)值之后就不能再向這個連接發(fā)送更多的請求了,除非有緩存的請求收到了響應(yīng)(Response)。通過比較 Deque 的 size 與這個參數(shù)的大小來判斷對應(yīng)的 Node 中是否已經(jīng)堆積了很多未響應(yīng)的消息,如果真是如此,那么說明這個 Node 節(jié)點負(fù)載較大或網(wǎng)絡(luò)連接有問題,再繼續(xù)向其發(fā)送請求會增大請求超時的可能。

前面提及的 InFlightRequests 還可以獲得 leastLoadedNode,即所有 Node 中負(fù)載最小的那一個。這里的負(fù)載最小是通過每個 Node 在 InFlightRequests 中還未確認(rèn)的請求決定的,未確認(rèn)的請求越多則認(rèn)為負(fù)載越大。對于下圖中的 InFlightRequests 來說,圖中展示了三個節(jié)點 Node0、Node1和Node2,很明顯 Node1 的負(fù)載最小。也就是說,Node1 為當(dāng)前的 leastLoadedNode。選擇 leastLoadedNode 發(fā)送請求可以使它能夠盡快發(fā)出,避免因網(wǎng)絡(luò)擁塞等異常而影響整體的進度。leastLoadedNode 的概念可以用于多個應(yīng)用場合,比如元數(shù)據(jù)請求、消費者組播協(xié)議的交互。

Kafka系列 - 生產(chǎn)者客戶端架構(gòu)以及3個重要參數(shù),Kafka庖丁解牛,kafka,架構(gòu),分布式

生產(chǎn)者重要參數(shù)

acks

  • acks=1。(默認(rèn)值):生產(chǎn)者發(fā)送消息之后,只要分區(qū)的 leader 副本成功寫入消息,那么它就會收到來自服務(wù)端的成功響應(yīng)。如果消息無法寫入 leader 副本,比如在 leader 副本崩潰、重新選舉新的 leader 副本的過程中,那么生產(chǎn)者就會收到一個錯誤的響應(yīng),為了避免消息丟失,生產(chǎn)者可以選擇重發(fā)消息。如果消息寫入 leader 副本并返回成功響應(yīng)給生產(chǎn)者,且在被其他 follower 副本拉取之前 leader 副本崩潰,那么此時消息還是會丟失,因為新選舉的 leader 副本中并沒有這條對應(yīng)的消息。acks 設(shè)置為1,是消息可靠性和吞吐量之間的折中方案。
  • acks=0。生產(chǎn)者發(fā)送消息之后不需要等待任何服務(wù)端的響應(yīng)。如果在消息從發(fā)送到寫入 Kafka 的過程中出現(xiàn)某些異常,導(dǎo)致 Kafka 并沒有收到這條消息,那么生產(chǎn)者也無從得知,消息也就丟失了。在其他配置環(huán)境相同的情況下,acks 設(shè)置為0可以達到最大的吞吐量。
  • acks=-1或acks=all。生產(chǎn)者在消息發(fā)送之后,需要等待 ISR 中的所有副本都成功寫入消息之后才能夠收到來自服務(wù)端的成功響應(yīng)。在其他配置環(huán)境相同的情況下,acks 設(shè)置為 -1(all) 可以達到最強的可靠性。但這并不意味著消息就一定可靠,因為ISR中可能只有 leader 副本,這樣就退化成了 acks=1 的情況。要獲得更高的消息可靠性需要配合 min.insync.replicas 等參數(shù)的聯(lián)動

retries和retry.backoff.ms

retries 參數(shù)用來配置生產(chǎn)者重試的次數(shù),默認(rèn)值為0,即在發(fā)生異常的時候不進行任何重試動作。消息在從生產(chǎn)者發(fā)出到成功寫入服務(wù)器之前可能發(fā)生一些臨時性的異常,比如網(wǎng)絡(luò)抖動、leader 副本的選舉等,這種異常往往是可以自行恢復(fù)的,生產(chǎn)者可以通過配置 retries 大于0的值,以此通過內(nèi)部重試來恢復(fù)而不是一味地將異常拋給生產(chǎn)者的應(yīng)用程序。如果重試達到設(shè)定的次數(shù),那么生產(chǎn)者就會放棄重試并返回異常。不過并不是所有的異常都是可以通過重試來解決的,比如消息太大,超過 max.request.size 參數(shù)配置的值時,這種方式就不可行了。

重試還和另一個參數(shù) retry.backoff.ms 有關(guān),這個參數(shù)的默認(rèn)值為100,它用來設(shè)定兩次重試之間的時間間隔,避免無效的頻繁重試。在配置 retries 和 retry.backoff.ms 之前,最好先估算一下可能的異常恢復(fù)時間,這樣可以設(shè)定總的重試時間大于這個異?;謴?fù)時間,以此來避免生產(chǎn)者過早地放棄重試。

Kafka 可以保證同一個分區(qū)中的消息是有序的。如果生產(chǎn)者按照一定的順序發(fā)送消息,那么這些消息也會順序地寫入分區(qū),進而消費者也可以按照同樣的順序消費它們。

對于某些應(yīng)用來說,順序性非常重要,比如 MySQL 的 binlog 傳輸,如果出現(xiàn)錯誤就會造成非常嚴(yán)重的后果。如果將 retries 參數(shù)配置為非零值,并且 max.in.flight.requests.per.connection 參數(shù)配置為大于1的值,那么就會出現(xiàn)錯序的現(xiàn)象:如果第一批次消息寫入失敗,而第二批次消息寫入成功,那么生產(chǎn)者會重試發(fā)送第一批次的消息,此時如果第一批次的消息寫入成功,那么這兩個批次的消息就出現(xiàn)了錯序。一般而言,在需要保證消息順序的場合建議把參數(shù) max.in.flight.requests.per.connection 配置為1,而不是把 retries 配置為0,不過這樣也會影響整體的吞吐。文章來源地址http://www.zghlxwxcb.cn/news/detail-757539.html

到了這里,關(guān)于Kafka系列 - 生產(chǎn)者客戶端架構(gòu)以及3個重要參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 三、Kafka生產(chǎn)者1---Kafka生產(chǎn)者初始化-new KafkaProducer

    概述 本文主要是分享Kafka初始化生產(chǎn)者的 大體過程 初始化過程中會新建很多對象,本文暫先分享部分對象 1.分區(qū)器---Partitioner partitioner 2.重試時間---long retryBackoffMs 3.序列化器---SerializerK keySerializer,SerializerV valueSerializer 4.攔截器--- ListProducerInterceptorK, V interceptorList 5.累加器-

    2024年03月14日
    瀏覽(37)
  • Kafka生產(chǎn)者原理 kafka生產(chǎn)者發(fā)送流程 kafka消息發(fā)送到集群步驟 kafka如何發(fā)送消息 kafka詳解

    Kafka生產(chǎn)者原理 kafka生產(chǎn)者發(fā)送流程 kafka消息發(fā)送到集群步驟 kafka如何發(fā)送消息 kafka詳解

    kafka尚硅谷視頻: 10_尚硅谷_Kafka_生產(chǎn)者_原理_嗶哩嗶哩_bilibili ? ???? 1. producer初始化:加載默認(rèn)配置,以及配置的參數(shù),開啟網(wǎng)絡(luò)線程 ???? 2. 攔截器攔截 ???? 3. 序列化器進行消息key, value序列化 ???? 4. 進行分區(qū) ???? 5. kafka broker集群 獲取metaData ???? 6. 消息緩存到

    2024年02月11日
    瀏覽(21)
  • Kafka-生產(chǎn)者

    Kafka-生產(chǎn)者

    Kafka在實際應(yīng)用中,經(jīng)常被用作高性能、可擴展的消息中間件。 Kafka自定義了一套網(wǎng)絡(luò)協(xié)議,只要遵守這套協(xié)議的格式,就可以向Kafka發(fā)送消息,也可以從Kafka中拉取消息。 在實踐生產(chǎn)過程中,一套API封裝良好、靈活易用的客戶端可以避免開發(fā)人員重復(fù)勞動,提高開發(fā)效率,也

    2024年01月20日
    瀏覽(24)
  • (三)Kafka 生產(chǎn)者

    (三)Kafka 生產(chǎn)者

    創(chuàng)建一個 ProducerRecord 對象,需要包含目標(biāo)主題和要發(fā)送的內(nèi)容,還可以指定鍵、分區(qū)、時間戳或標(biāo)頭。 在發(fā)送 ProducerRecord 對象時,生產(chǎn)者需要先把鍵和值對象序列化成字節(jié)數(shù)組,這樣才能在網(wǎng)絡(luò)上傳輸。 如果沒有顯式地指定分區(qū),那么數(shù)據(jù)將被傳給分區(qū)器。分區(qū)器通常會基

    2024年02月09日
    瀏覽(21)
  • 三、Kafka生產(chǎn)者

    三、Kafka生產(chǎn)者

    1 發(fā)送原理 在消息發(fā)送的過程中,涉及到了兩個線程——main 線程和 Sender 線程。在 main 線程中創(chuàng)建了一個雙端隊列 RecordAccumulator。main 線程將消息發(fā)送給 RecordAccumulator,Sender 線程不斷從 RecordAccumulator 中拉取消息發(fā)送到 Kafka Broker 【RecordAccumulator緩沖的結(jié)構(gòu): 每一個分區(qū)對應(yīng)一

    2024年02月12日
    瀏覽(21)
  • Kafka(生產(chǎn)者)

    Kafka(生產(chǎn)者)

    目 前 企 業(yè) 中 比 較 常 見 的 消 息 隊 列 產(chǎn) 品 主 要 有 Kafka(在大數(shù)據(jù)場景主要采用 Kafka 作為消息隊列。) ActiveMQ RabbitMQ RocketMQ 1.1.1 傳統(tǒng)消息隊列的應(yīng)用場景 傳統(tǒng)的消息隊列的主要應(yīng)用場景包括: 緩存/消峰 、 解耦 和 異步通信 。 緩沖/消峰: 有助于控制和優(yōu)化數(shù)據(jù)流經(jīng)過

    2024年02月11日
    瀏覽(27)
  • 「Kafka」生產(chǎn)者篇

    「Kafka」生產(chǎn)者篇

    在消息發(fā)送的過程中,涉及到了 兩個線程 —— main 線程 和 Sender 線程 。 在 main 線程中創(chuàng)建了 一個 雙端隊列 RecordAccumulator 。 main線程將消息發(fā)送給RecordAccumulator,Sender線程不斷從 RecordAccumulator 中拉取消息發(fā)送到 Kafka Broker。 main線程創(chuàng)建 Producer 對象,調(diào)用 send 函數(shù)發(fā)送消息,

    2024年01月19日
    瀏覽(23)
  • Kafka 生產(chǎn)者

    Kafka 生產(chǎn)者

    目錄 一、kafka生產(chǎn)者原理 二、kafka異步發(fā)送 配置kafka 創(chuàng)建對象,發(fā)送數(shù)據(jù) 帶回調(diào)函數(shù)的異步發(fā)送 同步發(fā)送 ? 三、kafka生產(chǎn)者分區(qū) 分區(qū)策略 指定分區(qū): ?指定key: 什么都不指定: 自定義分區(qū)器 四、生產(chǎn)者提高吞吐量 五、數(shù)據(jù)的可靠性 ACK應(yīng)答級別 數(shù)據(jù)完全可靠條件 可靠性

    2023年04月15日
    瀏覽(27)
  • Kafka生產(chǎn)者

    1.acks 如果acks=0,生產(chǎn)者在成功寫入消息之前不會等待任何來自服務(wù)器的響應(yīng)。 缺點:如果當(dāng)中出現(xiàn)了問題,導(dǎo)致服務(wù)器沒有收到消息,那么生產(chǎn)者就無從得知,消息就丟失了 優(yōu)點:因為生產(chǎn)者不需要等待服務(wù)器的響應(yīng),所有他可以以網(wǎng)絡(luò)能夠支持的最大速度發(fā)送消息,從而

    2024年01月19日
    瀏覽(36)
  • kafka學(xué)習(xí)-生產(chǎn)者

    kafka學(xué)習(xí)-生產(chǎn)者

    目錄 1、消息生產(chǎn)流程 2、生產(chǎn)者常見參數(shù)配置 3、序列化器 基本概念 自定義序列化器 4、分區(qū)器 默認(rèn)分區(qū)規(guī)則 自定義分區(qū)器 5、生產(chǎn)者攔截器 作用 自定義攔截器 6、生產(chǎn)者原理解析 在Kafka中保存的數(shù)據(jù)都是字節(jié)數(shù)組。 消息發(fā)送前,需要將消息序列化為字節(jié)數(shù)組進行發(fā)送。

    2024年02月09日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包