徹底搞懂Kafka生產(chǎn)消費(fèi)流程,這篇文章就夠了!
引言
Hey, 小伙伴們!今天小米給大家?guī)硪黄P(guān)于Kafka生產(chǎn)消費(fèi)基本流程的揭秘,內(nèi)容超干貨!讓我們一起揭開Kafka神秘的面紗,探索它的工作原理吧!
圖片
Producer創(chuàng)建及其內(nèi)部結(jié)構(gòu)
當(dāng)我們創(chuàng)建一個(gè)Kafka Producer時(shí),Kafka會(huì)為我們創(chuàng)建一個(gè)叫做Sender的線程,并將其設(shè)置為守護(hù)線程(Daemon Thread)。這個(gè)線程的主要工作就是不斷地從緩沖區(qū)中取出消息并發(fā)送給Kafka Broker。守護(hù)線程的好處在于,它會(huì)隨著主線程的結(jié)束而自動(dòng)結(jié)束,不需要我們手動(dòng)去管理它的生命周期。
消息的處理流程
在Producer發(fā)送消息的過程中,消息會(huì)依次經(jīng)過以下幾個(gè)步驟:
- 攔截器(Interceptor):首先,消息會(huì)通過一系列的攔截器進(jìn)行處理。攔截器可以用來在消息發(fā)送之前或之后做一些額外的操作,比如修改消息內(nèi)容、統(tǒng)計(jì)日志等。
- 序列化器(Serializer):然后,消息會(huì)經(jīng)過序列化器,將消息對(duì)象轉(zhuǎn)換為字節(jié)數(shù)組,以便于網(wǎng)絡(luò)傳輸。
- 分區(qū)器(Partitioner):接下來,分區(qū)器會(huì)根據(jù)消息的Key或者其他策略將消息分配到指定的分區(qū)上。
- 緩沖區(qū)(Buffer Pool):最后,消息會(huì)被放入到Producer的緩沖區(qū)中等待發(fā)送。
批次發(fā)送的條件
Kafka的Producer會(huì)將消息進(jìn)行批量發(fā)送,以提高傳輸效率和吞吐量。具體的批次發(fā)送條件如下:
- 當(dāng)緩沖區(qū)中的數(shù)據(jù)大小達(dá)到batch.size時(shí),Producer會(huì)將這些消息組成一個(gè)批次進(jìn)行發(fā)送。
- 當(dāng)消息在緩沖區(qū)中的等待時(shí)間超過linger.ms時(shí),即使緩沖區(qū)中的數(shù)據(jù)大小沒有達(dá)到batch.size,Producer也會(huì)將這些消息組成一個(gè)批次進(jìn)行發(fā)送。
消息發(fā)送及落盤
當(dāng)批次發(fā)送的條件滿足時(shí),Producer會(huì)將消息發(fā)往指定的分區(qū),然后落盤到Kafka Broker中。消息發(fā)送的可靠性可以通過acks參數(shù)進(jìn)行控制:
- acks=0:當(dāng)acks設(shè)置為0時(shí),Producer只要將消息放到緩沖區(qū),就認(rèn)為消息已經(jīng)發(fā)送完成。這個(gè)模式下的消息發(fā)送速度最快,但可靠性最低,因?yàn)镻roducer不會(huì)等待任何確認(rèn),消息有可能會(huì)丟失。
- acks=1:當(dāng)acks設(shè)置為1時(shí),消息只需要寫到主分區(qū)(Leader Partition)即可。在這種情況下,如果主分區(qū)收到消息確認(rèn)之后就宕機(jī)了,而副本分區(qū)(Follower Partition)還沒來得及同步該消息,則該消息會(huì)丟失。
- acks=all(默認(rèn)):當(dāng)acks設(shè)置為all(默認(rèn)值)時(shí),Leader分區(qū)會(huì)等待所有的ISR副本分區(qū)(In-Sync Replica)確認(rèn)記錄。這種模式下,只要有一個(gè)ISR副本分區(qū)存活,消息就不會(huì)丟失,是可靠性最高的一種設(shè)置。
消息重試機(jī)制
如果生產(chǎn)者配置了retries參數(shù)大于0,并且未收到消息的確認(rèn),那么Producer客戶端會(huì)對(duì)該消息進(jìn)行重試。重試機(jī)制能夠有效提高消息發(fā)送的可靠性,避免由于網(wǎng)絡(luò)波動(dòng)或臨時(shí)故障導(dǎo)致的消息丟失。
消息落盤及元數(shù)據(jù)返回
當(dāng)消息成功落盤到Kafka Broker后,Broker會(huì)返回生產(chǎn)元數(shù)據(jù)給Producer。這個(gè)元數(shù)據(jù)包含了消息的主題、分區(qū)、偏移量等信息。Producer可以通過這些信息進(jìn)行消息的追蹤和管理。
END
好了,以上就是Kafka生產(chǎn)消費(fèi)基本流程的詳細(xì)揭秘啦!希望小伙伴們通過這篇文章對(duì)Kafka的工作原理有更深入的了解。如果你對(duì)Kafka還有其他疑問或者想要了解更多技術(shù)干貨,歡迎在評(píng)論區(qū)留言,小米會(huì)及時(shí)回復(fù)大家哦!
圖片