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

Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析

這篇具有很好參考價值的文章主要介紹了Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析,kafka,kafka,生產(chǎn)者,消息有序性,分區(qū)策略,消息重試

  • 生產(chǎn)者通過producerRecord 對象封裝消息主題、消息的value(內(nèi)容)、timestamp(時間戳)等

  • 生產(chǎn)者通過send()方法發(fā)送消息,send()方法會經(jīng)過如下幾步
    1. 首先將消息交給攔截器(Interceptor)處理, 攔截器對生產(chǎn)者而言,對所有消息都是生效的,攔截器也支持鏈?zhǔn)骄幊蹋ㄘ?zé)任器鏈)的效果,攔截器一般將一些通用的功能加進(jìn)來,通常在消息發(fā)送前,producer回調(diào)邏輯前對消息做一些定制化需求,消息頭部添加消息的屬性等
    2. 接下來交給序列化器(Serializer),Key的序列化器和value的序列化器,對消息的key和value進(jìn)行序列化,序列化為字節(jié)數(shù)組,
    3. 然后將序列化的結(jié)果交給分區(qū)器(Partitioner),分區(qū)器有3種策略來計算消息應(yīng)該屬于哪個分區(qū),

    • 在producerRecord中直接指定分區(qū),分區(qū)器會直接將消息放到指定分區(qū)

    • 如果沒有指定分區(qū)器,但是消息有key,分區(qū)器會根據(jù)消息的key計算hash值,根據(jù)主題分區(qū)數(shù)量取模,來決定將消息放到哪個分區(qū)

    • 如果沒有指定分區(qū)、也沒有指定key,分區(qū)器會以輪詢(Round Robin)的方式給消息分配分區(qū)

      在這里插入圖片描述

  • 消息經(jīng)過以上攔截器->序列化器->分區(qū)器 進(jìn)行加工后,會將消息放到RecordAccumulator緩沖區(qū),對每個分區(qū)都會有一個單獨的緩沖區(qū),經(jīng)過分區(qū)器計算出分區(qū)號之后,不同的消息就會分配給不同的緩沖區(qū),緩沖區(qū)里面消息也是有序的,我們可以指定對緩沖區(qū)里的消息進(jìn)行分批次,也可以指定緩沖區(qū)大小

  • Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析,kafka,kafka,生產(chǎn)者,消息有序性,分區(qū)策略,消息重試

  • 當(dāng)緩沖區(qū)中消息達(dá)到條件會按批次發(fā)送到broker對應(yīng)分區(qū)上

  • broker將接收到的消息進(jìn)行刷盤持久化

  • 一個消息發(fā)出去之后,服務(wù)器(broker)會返回給producer響應(yīng),producer再來判斷消息是否發(fā)送成功,

  • broker返回元數(shù)據(jù)信息 - > 落盤成功 ->生產(chǎn)者繼續(xù)發(fā)送后面消息

  • broker返回元數(shù)據(jù)信息 - >落盤失敗 - 生產(chǎn)者設(shè)置了重試次數(shù) -> producer 會將消息重新放入緩沖區(qū)進(jìn)行排隊,等待再次發(fā)送,當(dāng)一個消息發(fā)送失敗重試需要重發(fā),消息是放到緩沖區(qū)隊尾,

  • 生產(chǎn)者去緩沖區(qū)重試發(fā)送


生產(chǎn)者在重試消息時,消息的順序就錯了,那怎么保證消息的有序性呢?

Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析,kafka,kafka,生產(chǎn)者,消息有序性,分區(qū)策略,消息重試

針對這種情況,可以做一個配置,
參數(shù):max.in.flight.requests.per.connection表示producer 在收到broker響應(yīng)之前可以發(fā)送多少批消息,默認(rèn)5,
設(shè)置此值是1,表示broker在響應(yīng)之前producer不能再向同一個broker發(fā)送請求,就是我確認(rèn)一批你再發(fā)下一批,這樣可以保證消息有序性,對消息順序要求不高情況可以不考慮


補充:

  • Producer 創(chuàng)建時,會創(chuàng)建一個Sender線程(IO線程)設(shè)置為守護(hù)線程

  • Producer 創(chuàng)建時,會創(chuàng)建緩沖區(qū)

  • Producer 生產(chǎn)消息,內(nèi)部是一個異步流程,Sender線程不斷輪詢RecordAccumulator,滿足條件后進(jìn)行真正的網(wǎng)絡(luò)IO發(fā)送消息

  • Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析,kafka,kafka,生產(chǎn)者,消息有序性,分區(qū)策略,消息重試

  • RecordAccumulator(緩沖區(qū)) 對每一個分區(qū)都有一個緩沖區(qū)

    • 每個分區(qū)的緩沖區(qū)中消息也是有序的
    • 可以指定緩沖區(qū)中的消息按批次發(fā)送
      • 緩沖區(qū)大小達(dá)到batch.size,默認(rèn)16KB
      • 在緩沖區(qū)等待時間 lingger.ms 達(dá)到上限
      • 以上兩個條件滿足一個即發(fā)送一批
    • 可以指定整個緩沖區(qū)的大小

批次的概念很好理解,緩沖區(qū)就像一輛公交車,有兩種發(fā)車方式,一是人滿了就發(fā)車,一是等5分鐘就發(fā)車,不管是人滿了還是到5分鐘了,發(fā)車,go~
分批發(fā)送可以減少網(wǎng)絡(luò)IO,節(jié)省帶寬使用,減少網(wǎng)絡(luò)傳輸?shù)膲毫?,提升吞吐?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-595877.html

  • 一個批次消息發(fā)送后,通過網(wǎng)絡(luò),發(fā)往Kafka指定分區(qū),然后刷盤到broker
  • 如果Producer設(shè)置了retries參數(shù)值>0,那么允許消息發(fā)送失敗進(jìn)行重試,重試機制由客戶端Producer內(nèi)部實現(xiàn)
  • Broker端消息落盤成功,會返回元數(shù)據(jù)給生產(chǎn)者
    • 通過阻塞直接返回 (同步發(fā)送)
    • 通過回調(diào)函數(shù)返回(異步發(fā)送)

到了這里,關(guān)于Kafka 入門到起飛系列 - 生產(chǎn)者發(fā)送消息流程解析的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • 分布式 - 消息隊列Kafka:Kafka生產(chǎn)者發(fā)送消息的方式

    分布式 - 消息隊列Kafka:Kafka生產(chǎn)者發(fā)送消息的方式

    不管是把Kafka作為消息隊列、消息總線還是數(shù)據(jù)存儲平臺,總是需要一個可以往Kafka寫入數(shù)據(jù)的生產(chǎn)者、一個可以從Kafka讀取數(shù)據(jù)的消費者,或者一個兼具兩種角色的應(yīng)用程序。 Kafka 生產(chǎn)者是指使用 Apache Kafka 消息系統(tǒng)的應(yīng)用程序,它們負(fù)責(zé)將消息發(fā)送到 Kafka 集群中的一個或多

    2024年02月13日
    瀏覽(29)
  • 分布式 - 消息隊列Kafka:Kafka生產(chǎn)者發(fā)送消息的分區(qū)策略

    分布式 - 消息隊列Kafka:Kafka生產(chǎn)者發(fā)送消息的分區(qū)策略

    01. Kafka 分區(qū)的作用 分區(qū)的作用就是提供負(fù)載均衡的能力,或者說對數(shù)據(jù)進(jìn)行分區(qū)的主要原因,就是為了實現(xiàn)系統(tǒng)的高伸縮性。不同的分區(qū)能夠被放置到不同節(jié)點的機器上,而數(shù)據(jù)的讀寫操作也都是針對分區(qū)這個粒度而進(jìn)行的,這樣每個節(jié)點的機器都能獨立地執(zhí)行各自分區(qū)的

    2024年02月13日
    瀏覽(32)
  • 分布式 - 消息隊列Kafka:Kafka生產(chǎn)者發(fā)送消息的3種方式

    分布式 - 消息隊列Kafka:Kafka生產(chǎn)者發(fā)送消息的3種方式

    不管是把Kafka作為消息隊列、消息總線還是數(shù)據(jù)存儲平臺,總是需要一個可以往Kafka寫入數(shù)據(jù)的生產(chǎn)者、一個可以從Kafka讀取數(shù)據(jù)的消費者,或者一個兼具兩種角色的應(yīng)用程序。 Kafka 生產(chǎn)者是指使用 Apache Kafka 消息系統(tǒng)的應(yīng)用程序,它們負(fù)責(zé)將消息發(fā)送到 Kafka 集群中的一個或多

    2024年02月13日
    瀏覽(28)
  • kafka服務(wù)端允許生產(chǎn)者發(fā)送最大消息體大小

    ????????server.properties中加上的message.max.bytes配置,我目前設(shè)置為5242880,即5MB,可以根據(jù)實際情況增大。 ????????在生產(chǎn)者端配置max.request.size,這是單個消息最大字節(jié)數(shù),根據(jù)實際調(diào)整,max.request.size 必須小于 message.max.bytes 以及消費者的 max.partition.fetch.bytes。這樣消息

    2024年02月15日
    瀏覽(24)
  • 07、Kafka ------ 消息生產(chǎn)者(演示 發(fā)送消息) 和 消息消費者(演示 監(jiān)聽消息)

    07、Kafka ------ 消息生產(chǎn)者(演示 發(fā)送消息) 和 消息消費者(演示 監(jiān)聽消息)

    簡單來說,就是一個數(shù)據(jù)項。 ▲ 消息就是 Kafka 所記錄的數(shù)據(jù)節(jié)點,消息在 Kafka 中又被稱為記錄(record)或事件(event)。 從存儲上來看,消息就是存儲在分區(qū)文件(有點類似于List)中的一個數(shù)據(jù)項,消息具有 key、value、時間戳 和 可選的元數(shù)據(jù)頭。 ▲ 下面是一個示例事件

    2024年01月20日
    瀏覽(46)
  • 【注意】Kafka生產(chǎn)者異步發(fā)送消息仍有可能阻塞

    Kafka是常用的消息中間件。在Spring Boot項目中,使用KafkaTemplate作為生產(chǎn)者發(fā)送消息。有時,為了不影響主業(yè)務(wù)流程,會采用 異步 發(fā)送的方式,如下所示。 本以為采用異步發(fā)送,必然不會影響到主業(yè)務(wù)流程。但實際使用時發(fā)現(xiàn),在第一次發(fā)送消息時,如果Kafka Broker連接失敗,

    2023年04月13日
    瀏覽(26)
  • Kafka中的生產(chǎn)者如何處理消息發(fā)送失敗的情況?

    在Kafka中,生產(chǎn)者可以通過以下方式處理消息發(fā)送失敗的情況: 同步發(fā)送模式(Sync Mode):在同步發(fā)送模式下,生產(chǎn)者發(fā)送消息后會阻塞等待服務(wù)器的響應(yīng)。如果發(fā)送失敗,生產(chǎn)者會拋出異常(例如 ProducerRecord 發(fā)送異常)或返回錯誤信息。開發(fā)者可以捕獲異常并根據(jù)需要進(jìn)行

    2024年02月06日
    瀏覽(24)
  • kafka入門,生產(chǎn)者異步發(fā)送、回調(diào)函數(shù),同步發(fā)送(四)

    引入依賴 回調(diào)函數(shù)會在producer收到ack時調(diào)用,該方法有兩個參數(shù),分別是元數(shù)據(jù)信息(RecordMetadata)和異常信息(Exception),如果Exception為null,說明信息發(fā)送失敗 注意:消息發(fā)送失敗會自動重試,不需要我們在回調(diào)函數(shù)中手動重試。 只需在異步發(fā)送的基礎(chǔ)上,再調(diào)用一下 get(

    2024年02月11日
    瀏覽(29)
  • Kafka系列:查看Topic列表、消息消費情況、模擬生產(chǎn)者消費者

    Kafka系列:查看Topic列表、消息消費情況、模擬生產(chǎn)者消費者

    執(zhí)行topic刪除命令時,出現(xiàn)提示 這條命令其實并不執(zhí)行刪除動作,僅僅是在zookeeper上標(biāo)記該topic要被刪除而已,同時也提醒用戶一定要提前打開delete.topic.enable開關(guān),否則刪除動作是不會執(zhí)行的。 解決辦法: a)在server.properties中設(shè)置delete.topic.enable參數(shù)為ture b)如下操作: 1.登

    2023年04月26日
    瀏覽(29)
  • kafka生產(chǎn)者發(fā)送消息報錯 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

    kafka生產(chǎn)者發(fā)送消息報錯 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

    報這個錯誤是因為kafka里的配置要修改下 在config目錄下 server.properties配置文件 這下發(fā)送消息就不會一直等待,就可以發(fā)送成功了

    2024年02月06日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包