1.技術選型的考量條件
- 業內常用的MQ有哪些?
- 每一種MQ各自的表現如何?
- 這些MQ在同等機器條件下,能抗多少QPS(每秒抗幾千QPS還是幾萬QPS)?
- 性能有多高(發送一條訊息給他要2ms還是20ms)?
- 可用性能不能得到保證(要是MQ部署的機器掛了怎么辦)?
2.深層次的考量
- 他們會不會丟資料?
- 如果需要的話能否讓他們進行線性的集群擴容(就是多加機臺機器)?
- 訊息中間件經常需要使用的一些功能他們都有嗎(比如說延遲訊息、事務訊息、訊息堆積、訊息回溯、死信佇列,等待)?
3.Kafka、RabbitMQ以及RocketMQ的調研對比
(1)Kafka
優點:常規的單機配置下,可以達到每秒十幾萬的QPS,適合大資料場景下使用,
缺點:
- 容易丟失資料——kafka收到訊息不是直接落盤,而是放記憶體了,宕機后會導致丟失資料;
- 功能單一——只能進行發送訊息,然后kafka消費訊息,然后……沒了
(2)RabbitMQ
優點:可以保證資料不丟失,能保證高可用性,也就是集群部署的時候部分集群宕機可以繼續運行;然后支持部分高級功能,比如:死信佇列、訊息重試之類的,
缺點:吞吐量低,相較于Kafka只有每秒幾萬的級別,高并發場景下容易達到瓶頸;底層原始碼問題,他的開發語言是erlang,難以讀懂和修改,
提一嘴:筆者之前想過去學一下RabbitMQ,但是在DEBUG看原始碼時被勸退了,┭┮﹏┭┮,
(3)RocketMQ
優點:吞吐量高,單機可達到10萬QPS以上;可以保證高可用性,性能很高;而且支持通過配置保證資料絕對不丟失,可以部署大規模的集群;支持各種高級的功能,比如延遲訊息、事務訊息、訊息回溯、死信隊里、訊息積壓等;底層代碼基于Java開發,便于閱讀和修改,
缺點:暫無明顯缺陷,
(4)活躍的社區和廣泛的應用
基本上Kafka、RabbitMQ和RocketMQ的社區都還算活躍,更新效率都還可以,而且基本運用都非常的廣泛,
目前Kafka幾乎是國內大資料領域日志采集傳輸的標準,RabbitMQ在各種中小公司里運用極為廣泛;RocketMQ在一些大公司和其他公司已經廣泛使用,并且RocketMQ已經成為了apache的頂級專案,
(5)關于高可用集群
RabbitMQ是偽分布式的,只能部署鏡像集群,集群中國內每臺集群存盤的資料是一樣的,只能垂直的擴展,沒能水平擴展,
而Kafka和RocketMQ都是將message拆分后存盤到不同的partition上,然后每個partition對應一個主節點,其他機器存盤副本,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287902.html
標籤:其他
上一篇:大資料技術之Hadoop(入門)概述、運行環境搭建、運行模式
下一篇:js資料精度
