我被要求評估RabbitMQ而不是卡夫卡,但發現很難找到一個比卡夫卡更好的理由。有誰知道在吞吐量,耐用性,延遲或易用性方面是否真的更好?是否有任何理由使用RabbitMQ而非Kafka?
回答
RabbitMQ的是固體時,通用,支持多種協議,如AMQP,MQTT,STOMP等,它可以處理高通量和常見的用例爲它是處理後臺作業或之間消息代理消息代理微服務。 Kafka是針對高入口數據流而優化的消息總線並重播。
可以將卡夫卡視爲持久消息代理,其中應用程序可以處理和重新處理磁盤上的流式數據。卡夫卡有一個非常簡單的路由方法。如果您需要以複雜的方式將消息發送給消費者,RabbitMQ有更好的選擇。如果您需要支持可能處於脫機狀態的批量使用者或需要低延遲消息的使用者,請使用Kafka。
RabbitMQ將保留有關消費/確認/未確認消息的所有狀態,而Kafka則不會,它假定消費者保持跟蹤已消費的消息。 RabbitMQ的隊列空閒時速度最快,而Kafka保留大量數據並且開銷很小 - 卡夫卡用於保存和分發大量消息。 (如果您計劃在RabbitMQ中排隊很長,您可以看看lazy queues。)
Kafka是從頭開始考慮水平縮放,而 RabbitMQ主要是爲垂直縮放設計的。
RabbitMQ有一個用戶友好的界面,可以讓您從網絡瀏覽器監控並處理您的RabbitMQ服務器。除此之外,隊列,連接,通道,交換,用戶和用戶權限可以被處理 - 創建,刪除並在瀏覽器中列出,您可以手動監控消息速率和發送/接收消息。 Kafka經理還沒有像RabbitMQ Management界面那樣發達。我會說,對RabbitMQ有更好的理解會更容易/更快速。
更多的閱讀和一些對比數據可以在這裏找到:https://www.cloudkarafka.com/blog/2016-12-05-apachekafka-vs-rabbitmq.html
還建議行業紙:「卡夫卡與RabbitMQ的:兩個行業基準的比較研究發佈/訂閱的實現」:http://dl.acm.org/citation.cfm?id=3093908
- 1. 是否有任何理由使用SGML而不是XML?
- 2. C++:是否有任何理由使用uint64_t,而不是size_t
- 3. 是否有任何理由使用System.Uri?
- 4. 是否有任何理由使用[:over @:?
- 5. 是否有任何理由使用isset()?
- 6. 是否有任何理由使用CSS陰影而不是陰影?
- 7. 是否有任何理由在C++ 1z中使用std :: map :: emplace()而不是try_emplace()?
- 8. 是否有任何理由使用一個DataContext實例,而不是幾個?
- 9. 是否有任何理由使用這個Regex方法而不是String.IsNullOrEmpty()?
- 10. 是否有任何充分的理由使用Json而不是obj for Three.js
- 11. 是否有任何理由Object.freeze函數?
- 12. 是否有任何理由在C#中使用私有屬性?
- 13. 是否有任何理由在Swift中使用選擇器?
- 14. 是否有任何理由使用等待和異步馬上?
- 15. 是否有任何理由在'.class'上使用selector'* .class'?
- 16. 是否有任何理由對羣集使用鎖文件?
- 17. 是否有任何理由不使用INLINABLE pragma作爲函數?
- 18. 是否有任何理由,你爲什麼會使用document.writeln
- 19. 是否有任何理由使用threading.Lock over multiprocessing.Lock?
- 20. 是否有任何理由在微軟ISV中使用TFS 2010?
- 21. 是否有任何理由在兩個MemoryStream之間使用CopyToAsync
- 22. 是否有任何理由使用HTTP 410 GONE狀態碼?
- 23. 是否有任何理由使用self關鍵字?
- 24. 是否有任何理由通過PyMem_Malloc使用malloc?
- 25. 是否有任何理由在VBA中使用ENUM?
- 26. 是否有任何真正的理由在Uitextfield上使用UiSearchBar?
- 27. 是否有任何理由使用jpg文件擴展名?
- 28. 是否有任何理由不使用Boost :: shared_ptrs?
- 29. 是否kafka代理持有複製集而不是分區?
- 30. 是否有理由不使用Pressflow而不是Drupal 6?
一件事要考慮的是,在Java之外的本地(比如捆綁並正式支持)向kafka說話非常困難。 RabbitMQ似乎還有其他官方支持的語言。 – Guillaume
主要基於觀點,許多優秀的問題根據專家的經驗產生一定程度的意見,但對這個問題的回答往往幾乎完全基於意見,而不是事實,參考或具體的專業知識。 – VedX
@Guillaume這不一定是真的。有許多用於Kafka的語言的客戶端:https://cwiki.apache.org/confluence/display/KAFKA/Clients此外,Confluent還提供許多其他語言的高性能開源Kafka客戶端。查看「Confluent Open Source」優惠:https://www.confluent.io/product/compare/ –