經驗分享:RabbitMQ與Kafka等訊息系統的使用者討論 - ycombinator
vel0city:我已經在相當小的VM上執行RabbitMQ很長時間了。RabbitMQ不需要每條訊息大量的資源,即使使用非常小的VM(512MB RAM,單個CPU),我也看到它每秒處理數千條訊息的峰值而不會出現問題。給它一些強大的硬體,它可能會處理您正在考慮的任何負載,除非您使10gig連結的訊息或其他內容飽和。
考慮擴充套件性和效能時,RabbitMQ和Kafka非常不同。Kafka幾乎是一個透過系統路由的訊息資料庫。在許多配置中,客戶端可能會回來並要求從幾乎任何時間點重播訊息流。這意味著您需要處理大量的磁碟和記憶體訪問。傳統上,使用RabbitMQ,訊息是短暫的。確認訊息後,訊息就消失了。不存在記憶體中,也不在磁碟上。沒有人會再來詢問該訊息。這樣可以提高處理每條訊息的效率,但是代價是無法記住幾毫秒前透過系統的訊息。
addisonj:作為已經在生產環境中執行許多訊息傳遞系統的人,這是我目前的大致看法:
如果您要轉向“事件溯源”架構,通常要考慮的兩個主要問題(除了正常執行時間,規模等基本操作之外)是路由和長期儲存。
RabbitMQ有路由,但沒有儲存。Kafka 可以儲存和路由,但是可能很複雜/昂貴。Apache Pulsar確實在此閃耀,因為該API是pub / sub,但是它的日誌結構為您提供了長期保留(無需手動重新平衡),但是靈活性確實伴隨著某些操作的複雜性與RabbitMQ相比。
如果您的需求只是移動大量資料,那麼Kafka無疑是最成熟的並且擁有龐大的生態系統,但是長期保留很困難,並且在消費者群體中也有一些利器。
如果您確實真的不需要長期保留並且需要複雜的拓撲,RabbitMQ是您的最佳選擇,並且即使在相當高的訊息速率下執行也相當合理(〜10k msgs/sec應該不太難實現)
但是,如今有更多的選擇,更老的Java解決方案(例如activeMQ和rocketMQ)或更多的“最小”實現(例如NAT),更不用說雲提供商上的託管服務了。
就個人而言,我是Apache Pulsar的忠實擁護者,因為它具有靈活性和一些不錯的設計選擇,但我認為在這個領域沒有任何靈丹妙藥。
atombender:請謹慎購買RabbitMQ的叢集。執行了多年之後,我發現它非常脆弱。我們經常丟失整個佇列,因為一個小的網路故障使RabbitMQ認為存在網路分割槽,並且當其他節點變為可見時,RabbitMQ沒有可靠的方式將其狀態恢復為原來的狀態。它有很多技巧可以緩解這種情況,但是它們並不能解決核心問題。可靠執行映象佇列(未稱為“經典映象佇列”)的唯一方法是禁用自動恢復,然後每次發生這種情況時都必須手動修復RabbitMQ。如果您關心完整性,則可以使用新的仲裁佇列,該佇列使用基於Raft的共識系統,但是它們缺少“經典”佇列的許多功能。例如,沒有訊息優先順序。
如果您願意在極高的負載下丟失偶爾出現的訊息,則NATS 絕對是奇妙的,而且非常快速且易於叢集。另外,NATS Streaming 和Liftbridge是建立在NATS之上的兩個訊息代理,它們實現了可靠的傳遞。我沒有用過,但聽到了好訊息。
[1] https://www.rabbitmq.com/partitions.html
[2] https://www.rabbitmq.com/quorum-queues.html
[3] https://nats.io/
[4] https://docs.nats.io/nats-streaming-concepts/intro
[5] https://github.com/liftbridge-io/liftbridge
snapetom:由於三個原因,我最終嚮往了Rabbit。
- 對於中小型體系結構,更容易實現和維護。但是,我聽到的故事表明,它開始成為大型叢集體系結構的麻煩。
- 因為它是傳統的訊息代理,所以我負責的輸入和輸出端的編寫要簡單得多,因為我不必擔心重新聯機時的重放。Rabbit知道它已經路由到了哪個客戶端以及訊息的去向。kafka在這方面並不那麼複雜。kafka被描述為“愚蠢經紀人/智慧客戶”,而Rabbit則被描述為“智慧經紀人/愚蠢的客戶”。
- 縮放。Rabbit是非常可擴充套件的。一旦達到Uber/Paypal級別(例如每秒幾百萬次寫入),那麼Kafka便成為顯而易見的選擇。Rabbit每秒可以處理數千次寫入。但是,在第二家公司以及其他許多公司中,他們認為必須吸收所有資料,因此,從長遠來看,Kafka當然是更具擴充套件性的工具。劇透:我們從來沒有接近PayPal級交易。
更多資訊點選標題。
相關文章
- Java訊息佇列:RabbitMQ與Kafka的整合與應用Java佇列MQKafka
- IM系統的MQ訊息中介軟體選型:Kafka還是RabbitMQ?MQKafka
- Kafka 分散式訊息系統Kafka分散式
- RabbitMQ,RocketMQ,Kafka 訊息模型對比分析MQKafka模型
- 訊息中介軟體(RabbitMq、Kafka)分析比較MQKafka
- 高吞吐量訊息系統—kafkaKafka
- 經驗分享:Apache Kafka的缺點與陷阱 - Emil KoutanovApacheKafka
- RabbitMQ,RocketMQ,Kafka 幾種訊息佇列的對比MQKafka佇列
- Kafka訊息系統基礎知識索引Kafka索引
- 釋出於訂閱訊息系統-KafkaKafka
- 駭客新聞上最近CQRS的討論和實踐經驗分享
- 訊息中介軟體選型分析:從Kafka與RabbitMQ的對比看全域性KafkaMQ
- 分散式訊息系統之Kafka叢集部署分散式Kafka
- RabbitMQ,RocketMQ,Kafka 事務性,訊息丟失和訊息重複傳送的處理策略MQKafka
- “簡單”的訊息佇列與kafka佇列Kafka
- 使用Kafka Streams構建事件源系統的經驗Kafka事件
- 關於 appium 獲取不到 toast 訊息的討論APPAST
- RabbitMq中的訊息應答與持久化MQ持久化
- 微服務訊息代理比較:Redis vs Kafka vs RabbitMQ - Mertcan微服務RedisKafkaMQ
- RabbitMQ訊息模式MQ模式
- 分散式系統訊息中介軟體——RabbitMQ的使用進階篇分散式MQ
- 2010.03.23 MSN群討論之服裝行業的ERP專案實施經驗分享行業
- 微服務選擇哪個訊息代理:RabbitMQ、Kafka和Redis? - Payoda微服務MQKafkaRedis
- 從 Kafka 到 Pulsar,BIGO 打造實時訊息系統之路KafkaGo
- Kafka入門(構建TB級非同步訊息系統)及Spring整合KafkaKafka非同步Spring
- 技術分享| 訊息佇列Kafka群集部署佇列Kafka
- 優步分享基於Apache Kafka的Presto使用經驗ApacheKafkaREST
- RabbitMQ 訊息的可靠投遞MQ
- [訊息佇列]RabbitMQ佇列MQ
- RabbitMQ訊息佇列MQ佇列
- 訊息中介軟體部署及比較:rabbitMQ、activeMQ、zeroMQ、rocketMQ、Kafka、redisMQKafkaRedis
- [文件教程]onethink的外掛討論總貼(視訊、技巧)等
- 雲控系統的玩法和實戰經驗分享
- 跨平臺socket通訊系統橋接技術的討論橋接
- 解鎖Kafka等訊息佇列中介軟體的測試之道Kafka佇列
- Linux系統入門實操經驗分享Linux
- RabbitMQ訊息佇列(五):Routing 訊息路由MQ佇列路由
- 分享一些 Kafka 消費資料的小經驗Kafka