日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ和Kafka

發(fā)布時間:2024/1/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ和Kafka 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自通九大神的博客

?

起因

最近公司RabbitMQ的集群出了點問題,然后有些親就說RabbitMQ慢且不好用,是一個瓶頸,不如換成Kafka。而我本人,使用RabbitMQ有一點久了,認為這個事情應(yīng)當(dāng)辯證的去看。所以就在沒事的時候簡單的看了看RabbitMQ的代碼。但是我并沒有看太多Kafka的代碼,我只簡單提下。

關(guān)于Kafka

根據(jù)Kafka官方的文檔,Kafka可以被認為一個高大上的集群消息中間件,但是讀了下以前一個朋友給的部署文檔和Kafka的官方的文檔。發(fā)現(xiàn)Kafka確實不錯,真的可以說是集群消息中間件。

  • 用topic來進行消息管理,每個topic包含多個part,每個part對應(yīng)一個邏輯log,有多個segment組成。

  • segment中的消息id由其邏輯位置決定,可以用消息id直接定位到消息的存儲位置,避免id到位置的額外映射。

  • 生產(chǎn)者發(fā)到某個topic的消息會被均勻的分布到多個part上,broker收到消息會寫入最后的segment文件中,當(dāng)某個segment上的消息條數(shù)達到配置值或消息發(fā)布時間超過閾值時,segment上的消息會被flush到磁盤,只有flush到磁盤上的消息消費者才能收到。并且通過rolling的機制,保證segment的文件不至于過大。

  • 消費者可以rewind back到任意位置重新進行消費,當(dāng)消費者故障時,可以選擇最小的offset進行重新讀取消費消息。

  • 是不是看起來很爽,但是深入往下看,發(fā)現(xiàn)了一些深坑

  • Kafka對消息的重復(fù)、丟失、錯誤以及順序型沒有嚴格的要求。但是part只會被consumer group內(nèi)的一個consumer消費,故kafka保證每個parti內(nèi)的消息會被順序的消費。

  • broker沒有副本機制,一旦broker宕機,該broker的消息將都不可用。同時broker是無狀態(tài)的,broker不保存消費者的狀態(tài),由消費者自己保存。無狀態(tài)導(dǎo)也致消息的刪除成為難題,所以Kafka選擇消息保存一定時間后會被刪除。

  • 大量的依賴Zookeeper,需要Zookeeper來管理broker與consumer的動態(tài)加入與離開。以及消費關(guān)系及每個partion的消費信息。

  • 看到這里,你如果還明白我說這些深坑是什么意思,那就請帶入運維場景和特定故障場景思考下。我稍后會說一下這些坑會帶來什么問題。

    關(guān)于RabbitMQ

    RabbitMQ是使用Erlang開發(fā)的一個消息隊列,可以構(gòu)建成集群,也可以單獨使用。

    根據(jù)測試,RabbitMQ在不使用ACK機制的,Msg大小為1K的情況下,QPS可達6W+。再雙方ACK機制,Msg大小為1K的情況下,QPS瞬間降到了1W+。從某種意義上RabbitMQ還真是慢,但是我們需要思考下。

  • 我們真的每個消息都能到1K嗎?

  • 我們真的需要雙方都對消息ACK的系統(tǒng)嗎?

  • 好了,如果兩個回答都是YES,那么RabbitMQ就是慢的。如果是No,那么RabbitMQ還是一個非常快的隊列。

    RabbitMQ慢有幾個原因:

  • RabbitMQ做為一個Broker,不單單做到了簡單的數(shù)據(jù)轉(zhuǎn)發(fā)功能,還保證了單個隊列上的數(shù)據(jù)有序,即便是有多個消費者和多個生產(chǎn)者。

  • RabbitMQ的策略是實時轉(zhuǎn)發(fā),而不像Kafka那樣等待刷盤之后才讓消費者來消費。

  • 如果消費者和生產(chǎn)者不對等,會產(chǎn)生大量的磁盤IO操作,進行消息換出。

  • RabbitMQ為什么不好用:

  • AMQP協(xié)議本身比較復(fù)雜,參數(shù)比較多。

  • Erlang寫的,很多人不熟悉,并且Mnesia出現(xiàn)問題好多人解決不了。

  • RabbitMQ和Kafka相比沒價值了嗎?

    很多親們讀到這里,就會想RabbitMQ好像也不怎么樣呀。和Kafka相比沒什么價值可言了,但是我前面說了一些Kafka的坑,我就在這里面揭示一下。

  • Kafka大量依賴Zookeeper,它的broker并不保存任何狀態(tài),如果Zookeeper集群不幸悲劇了,那么整個Kafka集群的消息就全完蛋了。

  • 上面問題有人會說這概率好小,我也同樣認為這個概率很小,那么一個broker當(dāng)機呢?當(dāng)一個broker當(dāng)機了整個消息隊列由于負載均衡的算法,在一瞬間消費者和生產(chǎn)者之間的消息就全亂掉了。很多需要保證消息順序的系統(tǒng)一下子就完蛋了。

  • 這就是RabbitMQ存在的價值和意義,同時RabbitMQ使用了MirrorQueue的機制,也可以做到多個機器進行熱備。

    RabbitMQ該怎么用

  • RabbitMQ的消息應(yīng)當(dāng)盡可能的小,并且只用來處理實時且要高可靠性的消息。

  • 消費者和生產(chǎn)者的能力盡量對等,否則消息堆積會嚴重影響RabbitMQ的性能。

  • 集群部署,使用熱備,保證消息的可靠性。

  • Kafka該怎么用

  • 應(yīng)當(dāng)有一個非常好的運維監(jiān)控系統(tǒng),不單單要監(jiān)控Kafka本身,還要監(jiān)控Zookeeper。

  • 對消息順序不依賴,且不是那么實時的系統(tǒng)。

  • 對消息丟失并不那么敏感的系統(tǒng)。

  • 轉(zhuǎn)載于:https://www.cnblogs.com/ziyouchutuwenwu/p/4786818.html

    總結(jié)

    以上是生活随笔為你收集整理的RabbitMQ和Kafka的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。