作為開(kāi)發(fā)人員,我們?cè)谶x擇一個(gè)框架或者工具時(shí),我們都需要考慮些什么,我們不是頭腦發(fā)熱,一拍腦袋就它了,我們首先要認(rèn)清這個(gè)框架或工具的作用是什么,能給我們帶來(lái)什么樣的好處,同時(shí)也要考慮帶來(lái)什么樣的負(fù)面結(jié)果,我們?cè)谑褂脮r(shí)才能更好的揚(yáng)其長(zhǎng)避其短,kafka大家可能都不陌生,到底我們?yōu)槭裁催x擇kafka呢?

          1.首先kafka是一個(gè)消息隊(duì)列,作為消息隊(duì)列一般會(huì)在很多場(chǎng)景中用到,如:

          應(yīng)用解耦


          在系統(tǒng)交互時(shí),有時(shí)我們很難一次性就設(shè)計(jì)出非常完善的接口,可能會(huì)隨著業(yè)務(wù)發(fā)展,這些交互接口也會(huì)不斷的變遷,如果我們的系統(tǒng)較多,系統(tǒng)間交互也較多,維護(hù)起來(lái)可能就是噩夢(mèng),這是可能就需要考慮引入一種基于數(shù)據(jù)的接口層(消息隊(duì)列),這樣各個(gè)系統(tǒng)可以獨(dú)立的擴(kuò)展或修改自己的處理過(guò)程,只要保證他們準(zhǔn)守實(shí)現(xiàn)設(shè)計(jì)的數(shù)據(jù)格式約束。解耦的同時(shí)也提高了系統(tǒng)的穩(wěn)定性(某個(gè)組件失效不會(huì)影響其他部分正常運(yùn)行)和擴(kuò)展性(可以橫向擴(kuò)展系統(tǒng)以增加處理消息的能力)。

          異步處理


          有時(shí)候我們的業(yè)務(wù)邏輯可能涉及到很多步驟,而且這些步驟可能上下關(guān)聯(lián)性不是很強(qiáng),如果我們串行執(zhí)行時(shí),總耗時(shí)=每個(gè)步驟耗時(shí)之和,如果我們讓每個(gè)步驟并行處理,總耗時(shí)<
          每個(gè)步驟耗時(shí)之和,在這里我們就可以引入消息隊(duì)列,將每個(gè)處理步驟發(fā)送到消息隊(duì)列,并且針對(duì)每個(gè)處理步驟都有對(duì)應(yīng)的線程去監(jiān)聽(tīng),這樣就能達(dá)到串行執(zhí)行異步化轉(zhuǎn)為并行執(zhí)行,從而提高系統(tǒng)的的吞吐量。

          流量削峰


          在秒殺或搶購(gòu)活動(dòng)中,一般會(huì)因?yàn)榱髁勘┰觯瑧?yīng)用因處理不過(guò)來(lái)而掛掉,此時(shí)一般會(huì)引入消息隊(duì)列,這樣流量會(huì)先進(jìn)入消息隊(duì)列,我們的應(yīng)用再根據(jù)自己的實(shí)際處理能力來(lái)消費(fèi)這些消息,從而達(dá)到緩解流量暴增對(duì)系統(tǒng)構(gòu)成的壓力

          日志處理


          有時(shí)我們需要采集日志,系統(tǒng)運(yùn)行中會(huì)產(chǎn)生大量的日志,尤其是在流量高峰時(shí),而這項(xiàng)日志需要存儲(chǔ)在其他地方,一般進(jìn)行其他的計(jì)算或處理,日志在寫(xiě)入磁盤(pán)此時(shí),由于磁盤(pán)IO速度可能不是很快,會(huì)對(duì)系統(tǒng)造成壓力,這時(shí)我們就可以引入比較高性能的消息隊(duì)列(kafka往往會(huì)被用到),消息隊(duì)列可以起到緩沖作用。

          消息通信

          消息隊(duì)列一般都內(nèi)置了高效的通信機(jī)制,有點(diǎn)對(duì)點(diǎn)通信,也有發(fā)布訂閱式通信,因此也可以用在純的消息通訊。

          冗余存儲(chǔ)

          消息隊(duì)列一般會(huì)把消息存儲(chǔ)起來(lái),只有消費(fèi)完成后,才把消息刪除,這樣就防止了某些時(shí)候因?yàn)樘幚懋惓?,而?dǎo)致消息丟失的問(wèn)題

          2.在眾多的消息中間件中,為什么選擇kafka

          Kafka最早是由LinkedIn公司開(kāi)發(fā)的,作為其自身業(yè)務(wù)消息處理的基礎(chǔ),后LinkedIn公司將Kafka捐贈(zèng)給Apache,現(xiàn)在已經(jīng)成為Apache的一個(gè)頂級(jí)項(xiàng)目了,Kafka作為一個(gè)高吞吐的分布式的消息系統(tǒng),是一個(gè)高性能跨語(yǔ)言分布式發(fā)布/訂閱消息隊(duì)列系統(tǒng)。
          主要特性

          * 快速持久化:可以在O(1)的系統(tǒng)開(kāi)銷(xiāo)下進(jìn)行消息持久化;
          * 高吞吐:在一臺(tái)普通的服務(wù)器上既可以達(dá)到10W/s的吞吐速率;
          * 完全的分布式系統(tǒng):Broker、Producer和Consumer都原生自動(dòng)支持分布式,自動(dòng)實(shí)現(xiàn)負(fù)載均衡;
          * 支持同步和異步復(fù)制兩種高可用機(jī)制;
          * 支持?jǐn)?shù)據(jù)批量發(fā)送和拉取;
          * 零拷貝技術(shù)(zero-copy):減少I(mǎi)O操作步驟,提高系統(tǒng)吞吐量;
          * 數(shù)據(jù)遷移、擴(kuò)容對(duì)用戶(hù)透明;
          * 無(wú)需停機(jī)即可擴(kuò)展機(jī)器;
          * 其他特性:豐富的消息拉取模型、高效訂閱者水平擴(kuò)展、實(shí)時(shí)的消息訂閱、億級(jí)的消息堆積能力、定期刪除機(jī)制;
          優(yōu)點(diǎn)

          * 客戶(hù)端語(yǔ)言豐富:支持Java、.Net、PHP、Ruby、Python、Go等多種語(yǔ)言;
          * 高性能:?jiǎn)螜C(jī)寫(xiě)入TPS約在100萬(wàn)條/秒,消息大小10個(gè)字節(jié);
          * 提供完全分布式架構(gòu),并有replica機(jī)制,擁有較高的可用性和可靠性,理論上支持消息無(wú)限堆積;
          * 支持批量操作;
          * 消費(fèi)者采用Pull方式獲取消息。消息有序,通過(guò)控制能夠保證所有消息被消費(fèi)且僅被消費(fèi)一次;
          * 有優(yōu)秀的第三方KafkaWeb管理界面Kafka-Manager;
          * 在日志領(lǐng)域比較成熟,被多家公司和多個(gè)開(kāi)源項(xiàng)目使用。
          缺點(diǎn)

          * Kafka單機(jī)超過(guò)64個(gè)隊(duì)列/分區(qū)時(shí),Load時(shí)會(huì)發(fā)生明顯的飆高現(xiàn)象。隊(duì)列越多,負(fù)載越高,發(fā)送消息響應(yīng)時(shí)間變長(zhǎng);
          * 使用短輪詢(xún)方式,實(shí)時(shí)性取決于輪詢(xún)間隔時(shí)間;
          * 消費(fèi)失敗不支持重試;
          * 支持消息順序,但是一臺(tái)代理宕機(jī)后,就會(huì)產(chǎn)生消息亂序;
          * 社區(qū)更新較慢。
          附和其他MQ速度對(duì)比:



          ?

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                干少妇30p | 学生妹做爱视频 | 在线观看成人无码片 | 激情五月天婷婷 | 男ji大巴进入女人的视频66m |