0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

kafka支持哪些消息交付語(yǔ)義?

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金技術(shù)社區(qū) ? 2023-12-22 11:27 ? 次閱讀

1 背景

在讀完kafka官方文檔,kafka設(shè)計(jì)里的消息交付語(yǔ)義一章后,給我的第一印象是內(nèi)容很抽象,于是草擬和總結(jié)了給個(gè)副標(biāo)題,并把相關(guān)內(nèi)容進(jìn)行了歸類;有些生澀的句子,盡量用大白話和舉例進(jìn)行說(shuō)明,并加入了總結(jié)。

消息交付語(yǔ)義的級(jí)別有哪些?

消息交付,即消息在生產(chǎn)端,broker端,消費(fèi)者端的傳遞保證。

最多一次——消息可能會(huì)丟失,但永遠(yuǎn)不會(huì)重新傳送。
至少一次——消息永遠(yuǎn)不會(huì)丟失,但可以重新傳送。
恰好一次——這就是人們真正想要的,每條消息都傳遞一次且僅一次。

kafka 支持哪些消息交付語(yǔ)義?

根據(jù)英文文檔,進(jìn)行了總結(jié)

fd77e27a-9ff2-11ee-8b88-92fbcf53809c.jpg

###################以下為個(gè)人觀點(diǎn)###################

kafka 真的支持了 最少一次 的交付語(yǔ)義嗎?

我的回答是:不同的條件下,可能支持了,也可能沒(méi)支持。

kafka支持最少一次交付的前提條件

生產(chǎn)端:
kafka生產(chǎn)端在發(fā)送消息時(shí),如果遇到底層網(wǎng)絡(luò)問(wèn)題,可能會(huì)導(dǎo)致消息發(fā)送給了broker端,也有可能網(wǎng)絡(luò)閃斷或者丟包,發(fā)送的消息可能丟了;但最后的結(jié)果是,生產(chǎn)端會(huì)根據(jù)指定的參數(shù)retries,進(jìn)行一定次數(shù)的重試。以此來(lái)保證生產(chǎn)端,做到消息至少傳遞一次。即發(fā)送失敗了,就重試吧。

所以生產(chǎn)端 支持"最少一次"的前提條件 有如下:

生產(chǎn)端的應(yīng)用在重試的時(shí)候,沒(méi)有重啟,或者宕機(jī)

網(wǎng)絡(luò),或者broker端,需要在生產(chǎn)端重試次數(shù)用完之前恢復(fù)

消費(fèi)者端:
消費(fèi)者端保證消息至少被消費(fèi)一次的建議是:在消費(fèi)者端消費(fèi)完消息后,在手工提交offset;偽代碼如下:


while(true){ 
consumer.poll(); 
XXX 
consumer.commit();
}

具體原因和說(shuō)明見(jiàn):juejin.cn/post/729328…

broker端:
broker端,要實(shí)現(xiàn)此交付,主要是保證消息不丟。kafka 數(shù)據(jù)是具備高可靠的,但不代表你的kafka集群就具備了此功能。需要有如下配置:

第一:生產(chǎn)端參數(shù)ack 設(shè)置為all

第二:在broker端 配置min.insync.replicas參數(shù)設(shè)置至少為2

第三:在broker端配置replicator.factor參數(shù)至少3

第四:在broker端配置 unclean.leader.election.enable 參數(shù)建議設(shè)置為false

具體原因和說(shuō)明見(jiàn):juejin.cn/post/729328…

不支持的情況下,如何去保證消息交付最少一次的保證

消費(fèi)者端和broker端,可以根據(jù)配置和對(duì)應(yīng)代碼編寫(xiě)順序進(jìn)行解決;但生產(chǎn)端在進(jìn)行重試時(shí),還需依賴生產(chǎn)端應(yīng)用的穩(wěn)定性,底層網(wǎng)絡(luò)和broker端的可用性;

生產(chǎn)端之所以需要這三個(gè)條件的支持,還是生產(chǎn)端沒(méi)有把待發(fā)送消息進(jìn)行持久化,畢竟待發(fā)送的消息是保存在jvm內(nèi)存中的,jvm重啟或者OOM或者宕機(jī)了,內(nèi)存中的消息也就丟了;
如果把待發(fā)送的消息進(jìn)行了持久化,即使應(yīng)用宕機(jī),網(wǎng)絡(luò)失敗,broker不可用,但在經(jīng)過(guò)應(yīng)用重啟,網(wǎng)絡(luò)和broker恢復(fù),也可以保證待發(fā)送消息不丟失,做到消息的至少一次交付。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3109

    瀏覽量

    75004
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7769

    瀏覽量

    90403
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    5363

原文標(biāo)題:kafka的消息交付語(yǔ)義 真的支持了最少一次嗎?

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    kafka設(shè)計(jì)原理的深度探討

    在非常廉價(jià)的商用機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸 支持Kafka Server間的消息分區(qū),及分布式消費(fèi),同時(shí)保證每個(gè)partition內(nèi)的消息順序傳輸 同時(shí)支持離線數(shù)據(jù)
    的頭像 發(fā)表于 10-08 07:50 ?2237次閱讀
    <b class='flag-5'>kafka</b>設(shè)計(jì)原理的深度探討

    Kafka特性和應(yīng)用場(chǎng)景

    Kafka簡(jiǎn)介及部署
    發(fā)表于 06-17 09:31

    淺析kafka

    kafka常見(jiàn)問(wèn)題
    發(fā)表于 09-29 10:09

    基于發(fā)布與訂閱的消息系統(tǒng)Kafka

    Kafka權(quán)威指南》——初識(shí) Kafka
    發(fā)表于 03-05 13:46

    Kafka基礎(chǔ)入門(mén)文檔

    kafka系統(tǒng)入門(mén)教程(原理、配置、集群搭建、Java應(yīng)用、Kafka-manager)
    發(fā)表于 03-12 07:22

    Kafka集群環(huán)境的搭建

    1、環(huán)境版本版本:kafka2.11,zookeeper3.4注意:這里zookeeper3.4也是基于集群模式部署。2、解壓重命名tar -zxvf
    發(fā)表于 01-05 17:55

    阿里云消息隊(duì)列Kafka商業(yè)化:支持消息無(wú)縫遷移到云上

    Kafka徹底解決了開(kāi)源產(chǎn)品穩(wěn)定性不足的痛點(diǎn),可用性達(dá)99.9%,數(shù)據(jù)可靠性99.999999%,并且支持消息無(wú)縫遷移到云上。7月25日,阿里云宣布正式推出消息隊(duì)列Kafka,全面融合開(kāi)源生態(tài)。在
    發(fā)表于 07-27 10:49 ?359次閱讀
    阿里云消息隊(duì)列<b class='flag-5'>Kafka</b>商業(yè)化:<b class='flag-5'>支持</b>消息無(wú)縫遷移到云上

    如何將物聯(lián)網(wǎng)數(shù)據(jù)從設(shè)備連接到Kafka集群?

    在與HiveMQ客戶的對(duì)話中,一些操作集群具有數(shù)百萬(wàn)臺(tái)設(shè)備和非常高的消息吞吐量,我們看到需要為Kafka創(chuàng)建MQTT代理擴(kuò)展。我們的客戶希望從MQTT和Kafka協(xié)議的本地實(shí)現(xiàn)中受益,因?yàn)檫@兩個(gè)協(xié)議都有所有的交付保證。因此,我們
    發(fā)表于 07-28 11:53 ?1510次閱讀

    Kafka的概念及Kafka的宕機(jī)

    問(wèn)題要從一次Kafka的宕機(jī)開(kāi)始說(shuō)起。 筆者所在的是一家金融科技公司,但公司內(nèi)部并沒(méi)有采用在金融支付領(lǐng)域更為流行的 RabbitMQ ,而是采用了設(shè)計(jì)之初就為日志處理而生的 Kafka ,所以我一直
    的頭像 發(fā)表于 08-27 11:21 ?2402次閱讀
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕機(jī)

    Kafka 的簡(jiǎn)介

    ,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間的訪問(wèn)性能 高吞吐率。即使在非常廉價(jià)的機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸 支持Kafka Server間的消息分區(qū),及分布式消費(fèi),同時(shí)保證每個(gè)
    的頭像 發(fā)表于 07-03 11:10 ?841次閱讀
    <b class='flag-5'>Kafka</b> 的簡(jiǎn)介

    物通博聯(lián)5G-kafka工業(yè)網(wǎng)關(guān)實(shí)現(xiàn)kafka協(xié)議對(duì)接到云平臺(tái)

    Kafka協(xié)議是一種基于TCP層的網(wǎng)絡(luò)協(xié)議,用于在分布式消息傳遞系統(tǒng)Apache Kafka中發(fā)送和接收消息。Kafka協(xié)議定義了客戶端和服務(wù)器之間的通信方式和數(shù)據(jù)格式,允許客戶端發(fā)送消息到K
    的頭像 發(fā)表于 07-11 10:44 ?699次閱讀

    Spring Kafka的各種用法

    Kafka 是不支持消息重試的。但是 Spring Kafka 2.7+ 封裝了 Retry Topic 這個(gè)功能。 1. @RetryableTopic 使用注解的方式啟用 Retry Topic,在
    的頭像 發(fā)表于 09-25 17:04 ?1327次閱讀

    Kafka架構(gòu)技術(shù):Kafka的架構(gòu)和客戶端API設(shè)計(jì)

    Kafka 給自己的定位是事件流平臺(tái)(event stream platform)。因此在消息隊(duì)列中經(jīng)常使用的 "消息"一詞,在 Kafka 中被稱為 "事件"。
    的頭像 發(fā)表于 10-10 15:41 ?2691次閱讀
    <b class='flag-5'>Kafka</b>架構(gòu)技術(shù):<b class='flag-5'>Kafka</b>的架構(gòu)和客戶端API設(shè)計(jì)

    kafka相關(guān)命令詳解

    kafka常用命令詳解
    的頭像 發(fā)表于 10-20 11:34 ?1258次閱讀

    kafka基本原理詳解

    今天浩道跟大家分享一篇關(guān)于kafka相關(guān)原理的硬核干貨,可以說(shuō)即使你沒(méi)有接觸過(guò)kafka,也可以秒懂,一起看看!
    的頭像 發(fā)表于 01-03 09:57 ?1110次閱讀
    <b class='flag-5'>kafka</b>基本原理詳解

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品