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

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

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

kafka支持哪些消息交付語義?

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

1 背景

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

消息交付語義的級別有哪些?

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

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

kafka 支持哪些消息交付語義?

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

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

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

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

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

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

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

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

生產(chǎn)端的應(yīng)用在重試的時候,沒有重啟,或者宕機(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();
}

具體原因和說明見: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

具體原因和說明見:juejin.cn/post/729328…

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

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

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

審核編輯:湯梓紅

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

    關(guān)注

    8

    文章

    2947

    瀏覽量

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

    關(guān)注

    14

    文章

    7443

    瀏覽量

    88444
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    5200

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    淺析kafka

    kafka常見問題
    發(fā)表于 09-29 10:09

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

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

    Kafka基礎(chǔ)入門文檔

    kafka系統(tǒng)入門教程(原理、配置、集群搭建、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è)化:支持消息無縫遷移到云上

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

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

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

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

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

    Kafka 的簡介

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

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

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

    Spring Kafka的各種用法

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

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

    Kafka 給自己的定位是事件流平臺(event stream platform)。因此在消息隊(duì)列中經(jīng)常使用的 "消息"一詞,在 Kafka 中被稱為 "事件"。
    的頭像 發(fā)表于 10-10 15:41 ?2242次閱讀
    <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 ?800次閱讀

    kafka基本原理詳解

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