消息中间件总结
異步、削峰填谷的作用。
一、RabbitMQ?
1、RabbitMQ?消息可靠性傳遞
ACK確認機制,消費者手動確認和自動確認
2、RabbitMQ? 冪等問題:
參考文章
4、簡介:
使用Erlang編寫的一個開源的消息隊列,本身支持很多的協議:AMQP,XMPP, SMTP,STOMP,也正是如此,使的它變的非常重量級,更適合于企業級的開發。同時實現了Broker架構,核心思想是生產者不會將消息直接發送給隊列,消息在發送給客戶端時先在中心隊列排隊。對路由(Routing),負載均衡(Load balance)、數據持久化都有很好的支持。多用于進行企業級的ESB整合。
5、RabbitMQ ?性能怎樣?
6、MQ底層實現原理?
7、MQ 是怎樣持久化的??
8、 MQ如何保證多個消費者順序消費?
參考
9、MQ有哪些組件及原理??
10、 MQ有幾種廣播機制 ?
11、
12、
13、
14、
15、
16
二、RocketMQ
1、簡潔
阿里系下開源的一款分布式、隊列模型的消息中間件,原名Metaq,3.0版本名稱改為RocketMQ,是阿里參照kafka設計思想使用java實現的一套mq。同時將阿里系內部多款mq產品(Notify、metaq)進行整合,只維護核心功能,去除了所有其他運行時依賴,保證核心功能最簡化,在此基礎上配合阿里上述其他開源產品實現不同場景下mq的架構,目前主要多用于訂單交易系統。
具有以下特點:
- 能夠保證嚴格的消息順序
- 提供針對消息的過濾功能
- 提供豐富的消息拉取模式
- 高效的訂閱者水平擴展能力
- 實時的消息訂閱機制
- 億級消息堆積能力
2、
3、
4、
5、
6、
三、Kafka?
1、RocketMQ 與?Kafka 區別
2、簡潔:適合大數據量
Apache下的一個子項目,使用scala實現的一個高性能分布式Publish/Subscribe消息隊列系統,具有以下特性:
- 快速持久化:通過磁盤順序讀寫與零拷貝機制,可以在O(1)的系統開銷下進行消息持久化;
- 高吞吐:在一臺普通的服務器上既可以達到10W/s的吞吐速率;
- 高堆積:支持topic下消費者較長時間離線,消息堆積量大;
- 完全的分布式系統:Broker、Producer、Consumer都原生自動支持分布式,依賴zookeeper自動實現復雜均衡;
- 支持Hadoop數據并行加載:對于像Hadoop的一樣的日志數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。
3、性能對比:
4、Kafka 如何保證消息 順序消費 ?
全局有序:
由于Kafka的一個Topic可以分為了多個Partition,Producer發送消息的時候,是分散在不同Partition的。當Producer按順序發消息給Broker,但進入Kafka之后,這些消息就不一定進到哪個Partition,會導致順序是亂的。
因此要滿足全局有序,需要1個Topic只能對應1個Partition。
而且對應的consumer也要使用單線程或者保證消費順序的線程模型,否則會出現下圖所示,消費端造成的消費亂序。
局部有序:
要滿足局部有序,只需要在發消息的時候指定Partition Key,Kafka對其進行Hash計算,根據計算結果決定放入哪個Partition。這樣Partition Key相同的消息會放在同一個Partition。此時,Partition的數量仍然可以設置多個,提升Topic的整體吞吐量。
如下圖所示,在不增加partition數量的情況下想提高消費速度,可以考慮再次hash唯一標識(例如訂單orderId)到不同的線程上,多個消費者線程并發處理消息(依舊可以保證局部有序)。
消息重試對順序消息的影響
對于一個有著先后順序的消息A、B,正常情況下應該是A先發送完成后再發送B,但是在異常情況下,在A發送失敗的情況下,B發送成功,而A由于重試機制在B發送完成之后重試發送成功了。這時對于本身順序為AB的消息順序變成了BA。
針對這種問題,嚴格的順序消費還需要max.in.flight.requests.per.connection
參數的支持。
該參數指定了生產者在收到服務器響應之前可以發送多少個消息。它的值越高,就會占用越多的內存,同時也會提升吞吐量。把它設為1就可以保證消息是按照發送的順序寫入服務器的。
此外,對于某些業務場景,設置max.in.flight.requests.per.connection=1會嚴重降低吞吐量,如果放棄使用這種同步重試機制,則可以考慮在消費端增加失敗標記的記錄,然后用定時任務輪詢去重試這些失敗的消息并做好監控報警。
參考
5、數據往哪個區寫,怎么設置?
參考1
6、kafka 底層原理?ACK確認、偏移量、如何保證順序消費?
7、
總結
- 上一篇: Linux(CentOS)安装VMwar
- 下一篇: 金山U盘卫士V1.5 绿色版