一、業(yè)務(wù)場(chǎng)景
二、解決方案
消費(fèi)者組的某個(gè)消費(fèi)者可能負(fù)責(zé)消費(fèi)一個(gè)topic的多個(gè)分區(qū)。每個(gè)分區(qū)都維護(hù)了偏移量(都是從0開始的),在消息存儲(chǔ)時(shí)按照一定的策略來找到不同的分區(qū)進(jìn)行存儲(chǔ),消費(fèi)同樣如此,并不能保證消息的順序性。要想保證順序性,可以只提供一個(gè)分區(qū),或者相同的業(yè)務(wù)只在一個(gè)分區(qū)下進(jìn)行存儲(chǔ)和消費(fèi),因?yàn)橥粋€(gè)分區(qū)的偏移量是由順序的。這樣,就能保證消息的順序性。
- topic分區(qū)中消息只能由消費(fèi)者組中的唯一一個(gè)消費(fèi)者處理,所以消息肯定是按照先后順序進(jìn)行處理的,但是它也僅僅是保證topic的一個(gè)分區(qū)順序處理,不能保證跨分區(qū)的消息先后處理順序。
- 如果想要順序的處理topic的所有消息,那就只提供一個(gè)分區(qū),或者相同的業(yè)務(wù)只在一個(gè)分區(qū)下進(jìn)行存儲(chǔ)和消費(fèi)。
- 指定分區(qū):設(shè)置分區(qū)參數(shù),把有順序要求的消息放在同一個(gè)分區(qū)即可。
- 相同的業(yè)務(wù)key:key決定消息存儲(chǔ)在哪個(gè)分區(qū),默認(rèn)情況下,Kafka會(huì)計(jì)算key的hashcode值,根據(jù)hash值找到不同分區(qū)進(jìn)行存儲(chǔ)。如果要求有順序性,可以設(shè)置同一個(gè)key,同一個(gè)key的hash值是一樣的,最終會(huì)存儲(chǔ)到同一個(gè)分區(qū)中。
三、總結(jié)
文章來源:http://www.zghlxwxcb.cn/news/detail-618413.html
四、模擬面試
文章來源地址http://www.zghlxwxcb.cn/news/detail-618413.html
到了這里,關(guān)于Kafka面試】Kafka如何保證消費(fèi)的順序性?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!