目錄
一、kafka生產(chǎn)者原理
二、kafka異步發(fā)送
配置kafka
創(chuàng)建對象,發(fā)送數(shù)據(jù)
帶回調(diào)函數(shù)的異步發(fā)送
同步發(fā)送
?文章來源地址http://www.zghlxwxcb.cn/news/detail-413572.html
三、kafka生產(chǎn)者分區(qū)
分區(qū)策略
指定分區(qū):
?指定key:
什么都不指定:
自定義分區(qū)器
四、生產(chǎn)者提高吞吐量
五、數(shù)據(jù)的可靠性
ACK應(yīng)答級別
數(shù)據(jù)完全可靠條件
可靠性總結(jié)
代碼中配置ACK
五、數(shù)據(jù)重復(fù)
冪等性
生產(chǎn)者事務(wù)
六、數(shù)據(jù)有序、亂序
數(shù)據(jù)有序
數(shù)據(jù)亂序
?
一、kafka生產(chǎn)者原理
main線程中創(chuàng)建生產(chǎn)者對象,然后調(diào)用send方法來發(fā)送數(shù)據(jù),根據(jù)生產(chǎn)環(huán)境的需求來判斷是否要增加攔截器(一般建議不用),因?yàn)槭强绻?jié)點(diǎn)通信,所以要對數(shù)據(jù)進(jìn)行序列化,用kafka自帶的序列化器處理,再由分區(qū)器來規(guī)定數(shù)據(jù)發(fā)送到哪個(gè)分區(qū),先發(fā)送到了一個(gè)緩存隊(duì)列當(dāng)中,隊(duì)列大小是32M,其中每個(gè)批次默認(rèn)大小是16k,達(dá)到16k后就會進(jìn)入sender線程發(fā)送到kafka集群,或者等待時(shí)間到了也會自動(dòng)發(fā)送,每一個(gè)broker節(jié)點(diǎn)接受一個(gè)隊(duì)列的消息,發(fā)送到分區(qū)后,分區(qū)最多緩存5個(gè)請求,如果達(dá)到5個(gè)請求都沒有ack應(yīng)答的話,那么接下來消息就會發(fā)送到別的分區(qū)上。
通過Selector將底層鏈路進(jìn)行打通進(jìn)行發(fā)送數(shù)據(jù),集群收到后進(jìn)行一個(gè)副本的同步,同步完成后進(jìn)行ack應(yīng)答。
?
應(yīng)答成功后清理隊(duì)列中的數(shù)據(jù)
?應(yīng)答失敗會進(jìn)行retry重試
?
二、kafka異步發(fā)送
?
?創(chuàng)建Maven工程導(dǎo)入kafka客戶端依賴
?導(dǎo)包
配置kafka
創(chuàng)建對象,發(fā)送數(shù)據(jù)
?
帶回調(diào)函數(shù)的異步發(fā)送
?
同步發(fā)送
?
?
三、kafka生產(chǎn)者分區(qū)
分區(qū)策略
?
指定分區(qū):
?
?指定key:
什么都不指定:
?
怎么把訂單表的數(shù)據(jù)發(fā)送到kafka的指定分區(qū)中?
????? key 上寫表名,表名的hashcode值一定會發(fā)送到同一個(gè)分區(qū)(生產(chǎn)環(huán)境通常將表名作為key)
自定義分區(qū)器
?
?
?在生產(chǎn)者中關(guān)聯(lián)自定義分區(qū)器
?在生產(chǎn)環(huán)境中可以過濾一些臟數(shù)據(jù)!
四、生產(chǎn)者提高吞吐量
壓縮類型:
?
五、數(shù)據(jù)的可靠性
ACK應(yīng)答級別
0的時(shí)候,數(shù)據(jù)發(fā)過來還沒落盤就應(yīng)答,結(jié)果leader掛了導(dǎo)致了數(shù)據(jù)丟失。
?
?1的時(shí)候,數(shù)據(jù)發(fā)送過來,leader落盤后就會應(yīng)答,生產(chǎn)者收到ack應(yīng)答認(rèn)為信息已經(jīng)發(fā)送成功,隨后就會清除掉隊(duì)列中的消息,但是此時(shí)follwer可能還沒完成同步,這個(gè)時(shí)候leader掛掉,就會有一個(gè)follwer成為新的leader,可是生產(chǎn)者已經(jīng)認(rèn)為信息發(fā)送成功從隊(duì)列中清除了消息,這就導(dǎo)致了數(shù)據(jù)的丟失。
?
-1(all):leader收到消息,并且所有follwer都完成消息同步后返回ack應(yīng)答
follwer掛掉的話,等時(shí)間達(dá)到閾值還沒向Leader發(fā)送通信請求或同步數(shù)據(jù)就會被踢出ISR,意味著這個(gè)follwer就不是有效副本了!
?
?
?
?上面幾種都有數(shù)據(jù)丟失的風(fēng)險(xiǎn),如何真正保護(hù)數(shù)據(jù)的可靠性呢?
數(shù)據(jù)完全可靠條件
ack級別設(shè)置為-1,且至少1個(gè)leader+1個(gè)follwer,ISR里min.insync.replicas >= 2
?
可靠性總結(jié)
?
代碼中配置ACK
?
五、數(shù)據(jù)重復(fù)
冪等性
?
?
生產(chǎn)者事務(wù)
?
?
?
六、數(shù)據(jù)有序、亂序
數(shù)據(jù)有序
數(shù)據(jù)亂序
文章來源:http://www.zghlxwxcb.cn/news/detail-413572.html
?
到了這里,關(guān)于Kafka 生產(chǎn)者的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!