來自2019年1月4號的學習總結

這幾天針對高性能,強順序的MQ產品進行了測試和選型,主要針對的是apache kafka和apache rocketmq 兩款產品。

 

對兩端產品的特性做一個簡單的闡述:

 

rocketmq 是國內阿里巴巴出產,來自大廠,聽說經過雙十一洗禮,穩定可靠,主要針對電商場景,支持事務消息,支持延遲消息(用於付款),支持多副本(高可用),消息嚴格有序,性能測試與kafka不相上下,異步刷盤和同步刷盤,消息持久化。每個topic下都有讀/取 隊列劃分,可以路由消息到指定隊列,這一點和kafka的消息分區概念接近。

 

kafka 出自國際大廠 linkin, 目前主要創始人目前自立門戶創辦了公司 confluent並且推出開源的平臺和組件,穩定可靠,上手部署快。各種大廠都在用,用戶羣體廣,穩定可靠,但是有些問題。其支持的特性是 異步刷盤、0.10版本開始支持事務消息和流處理,支持多副本,要嚴重依賴zookeeper實現副本集羣和leader、follower切換,支持topic分區。

 

不支持 延遲消息隊列(要靠自己實現),因消費通過offset進行確認的機制,導致消息卡頓和消息重複消費。

 

kafka 的事務消息與 rocketmq 實現方式有差異,kafka 的事務可以跨分區並且有回滾操作,而rocketmq 採用2PC 強一致的方式進行。

 

kafka 會在生產者與broker兩端可能丟失部分消息,kafka的生產者將累計消息發送,而不是一條消息就發送一次,所以當消息沒有達到發送閾值生產者又異常退出,則消息丟失。

 

kafka 和rmq都是用的page cache,而不是堆內存,所以應用退出後操作系統會保證數據寫回磁盤。

 

rocketmq 主要針對的是topic 數據,而kafka 則已經擴展至stream.

 

rocketmq 對每一條消息都要設置key與tag ,沒有Key與tag的消息容易出現不可預期的問題。

 

rocketmq consumer 有兩種方式,一種是pull consumer,一種是push consumer

 

pull 爲主動拉取,可以拉取指定offset和message queue 的消息, 適合補充消費。Pull模式爲嚴格排序方式。

 

push 爲被動推,又可分爲多線程亂序方式與嚴格排序方式,嚴格排序方式無論多少線程,都會變成單線程模式。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章