**1.ZeroMQ**
號稱最快的消息隊列系統,尤其針對大吞吐量的需求場景。
擴展性好,開發比較靈活,采用C語言實現,實際上只是一個socket庫的重新封裝,如果做為消息隊列使用,需要開發大量的代碼。ZeroMQ僅提供非持久性的隊列,也就是說如果down機,數據將會丟失;**Twitter的Storm中使用ZeroMQ作為數據流的傳輸**
**2.RabbitMQ**
結合erlang語言本身的并發優勢,支持很多的協議:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它變的非常重量級,更適合于企業級的開發。
性能較好,但是不利于做二次開發和維護
**3.ActiveMQ**
歷史悠久的開源項目,是Apache下的一個子項目。已經在很多產品中得到應用,實現了JMS1.1規范,可以和spring-jms輕松融合,實現了多種協議,不夠輕巧(源代碼比RocketMQ多),支持持久化到數據庫,對隊列數較多的情況支持不好
**4.Kafka/Jafka**
Kafka是Apache下的一個子項目,是一個高性能跨語言分布式發布/訂閱消息隊列系統,而Jafka是在Kafka之上孵化而來的,即Kafka的一個升級版。
具有以下特性:
* 快速持久化,可以在O(1)的系統開銷下進行消息持久化;
* 高吞吐,在一臺普通的服務器上既可以達到10W/s的吞吐速率;完全的分布式系統,Broker、Producer、Consumer都原生自動支持分布式,自動實現負載均衡;
* 支持Hadoop數據并行加載,對于像Hadoop的一樣的日志數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。
Kafka通過Hadoop的并行加載機制統一了在線和離線的消息處理。Apache Kafka相對于ActiveMQ是一個非常輕量級的消息系統,除了性能非常好之外,還是一個工作良好的分布式系統
### 當前主流MQ比較
| | kafka | RocketMQ | RabbitMQ |
| --- | --- | --- | --- |
| 設計定位 |系統間的數據流管道,實時數據處理,例如常規的消息系統,監控數據日志的收集處理 | 非日志消息的可靠傳輸,例如訂單、交易、充值、消息推送等 | 可靠消息傳輸,和RocketMQ類似 |
| 成熟度 | 成熟 | 成熟 | 成熟 |
| 社區/公司 |apache |alibaba/已捐獻給apache | |
| 社區活躍度 | 高 | 中 | 高 |
| 文檔 | 完備 | 完備 | 完備 |
|開發語言 | scala | java | erlang |
| 協議 |自定義基于TCP的二進制協議 |自定義 |AMQP |
| 多語言支持 |c/c++/python/go/erlang/.net/Ruby/node/java/php | java |java/c/c++/python/php/perl |
|持久化方式 |磁盤文件 |磁盤文件 |內存/文件 |
|部署方式 |單機/集群 |單機/集群 | 單機/集群 |
|集群管理 |zookeeper | name server | |
|選主方式 |從ISR中自動選舉一個Leader |不支持自動選主 |最早加入集群的Broker |
|主從切換 |自動切換 |不支持自動切換 | 自動切換 |
|數據可靠性 |支持producer單條發送/同步刷盤/同步復制 |單條發送/同步刷盤/異步刷盤/同步雙寫/異步復制 | |
|堆積能力 | 非常好,消息存儲在log,每個分區一個Log | 非常好,消息存儲在同一個commitlog |一般 |
|消息過濾 |不支持 | 支持 | 不支持 |
| 消息重試 |不支持 | 支持 |支持 |
| 消費方式 |consumer pull | consumer pull/ broker push | broker push |
| 部署依賴 |zookeeper | name server | erlang環境 |
| 管理后臺 |官方不提供 | rocketmq-console |rabbitmqadmin |
|優點 |1.高吞吐、低延遲、高可用、集群熱擴展、集群容錯;<br>2.支持多語言客戶端;<br>3.生態完善,在大數據處理方面有大量配套設施 |1.高吞吐、低延遲、高可用,消息堆積時性能也很好;<br>2.系統設計更加適合業務處理場景;<br>3.支持多種消費方式;<br>4.支持broker消息過濾;<br>5.支持事務;<br>6.支持順序消息;<br>7.集群規模50臺左右,單日處理消息上百億,經歷過大數量驗證,比較可靠穩定 | 1.高吞吐、高可用不如前兩者;<br>2.支持多語言客戶端;支持AMQP協議;<br>3.由于erlang語言的特性,性能較好;互聯網公司有大規模應用 |
|缺點 | 1.消費集群數目受到分區數目限制;<br>2.單機topic多時性能明顯降低;<br>3.不支持事務 |1.相比于Kafka使用者較少,生態不夠完善;消息堆積、吞吐率也有所不如;<br>2.不支持主從自動切換,master失效后,consumer需要一定時間才能感知(30s);<br>3.客戶端只支持JAVA |1.erlang語言難度較大,集群不支持動態擴展;<br>2.不支持事務、消息吞吐能力有限;<br>3.消息堆積時性能明顯降低 |
- 概述
- CAP理論
- BASE理論
- ACID
- 分布式系統相關技術
- 主流數據庫連接池
- 基礎
- 系統單點
- 負載均衡
- HTTP重定向負載均衡
- DNS域名解析負載均衡
- 反向代理負載均衡
- IP負載均衡
- 數據鏈路層負載均衡
- 負載均衡算法
- 輪詢法(Round Robin)
- 加權輪詢(Weight Round Robin)
- 隨機算法(Random)
- 源地址Hash算法
- 加權隨機法(Weight Random)
- 最小連接數法(Least Connections)
- 接入層負載均衡
- 軟件架構
- 性能
- 性能測試指標
- 響應時間
- 并發數
- 吞吐量
- 性能計數器
- 性能測試方法
- 性能測試報告
- 性能優化
- Web前端性能優化
- 應用服務器性能優化
- 可用性
- 服務降級
- 伸縮性
- 擴展性
- 事件驅動架構
- 安全性
- 信息加密技術
- 分布式系統概述
- 自動化
- 分布式唯一ID
- 冪等設計
- 分布式鎖
- 腦裂
- 一致性原理
- Paxos
- Zab
- Raft
- 分布式遠程服務調用
- RMI
- Spring RMI
- WebService
- SOA服務架構
- 微服務架構
- 微服務的九大特性
- 服務注冊和發現
- 解決方案及組件
- 分布式網關
- 注冊中心
- Zookeeper
- ZNode
- Watch接口
- 持久節點-配置中心實現原理
- 臨時節點-注冊中心
- Zookeeper選舉
- Zookeeper角色
- ZooKeeper工作原理
- 選主流程
- 同步流程
- Leader工作流程
- Follower工作流程
- 常見限流算法
- 計數器算法
- 漏桶算法
- 令牌桶算法
- 滑動窗口
- 計數器&滑動窗口
- 斷路器
- 大流量高并發高可用
- 高可用
- 高并發/大流量
- 分布式緩存系統
- 基本概念
- 緩存命中率
- 緩存最大元素
- 緩存回收策略
- 回收算法
- 緩存穿透與緩存雪崩
- CDN緩存
- 緩存分類
- memcached
- 客戶端路由原理
- 內存管理機制
- Redis
- Redis數據模型
- redisObject/Redis type/Redis encoding
- 命令的類型檢查和多態
- skiplist跳躍表
- 為什么使用跳躍表
- redis-內存管理機制
- Redis淘汰策略
- Redis持久化策略
- Redis并發競爭
- redis主從復制
- Redis集群實現方案
- Redis Cluster
- redis事務
- Redis-Sentinel
- Redis適用場景
- Redis客戶端
- redis rehash原理
- dict數據結構
- 觸發rehash的條件
- 漸進式rehash
- 漸進式rehash過程
- Redis多線程版本
- 緩存實際應用
- 堆緩存-Guava Cache
- 主要參數
- Caffeine
- Spring注解緩存
- 分布式存儲
- Database
- AUTOCOMMIT
- 臟讀&幻讀&不可重復讀
- 子查詢
- 連接
- 內連接
- 自連接
- 自然連接
- 外連接
- 組合查詢
- 隔離級別
- 數據庫范式
- 索引實現機制
- 數據庫拆分
- 表分區
- 分庫
- 分表
- MySQL
- MySQL基礎架構
- 鎖分類
- 排它鎖&獨占鎖
- 共享鎖
- 間隙鎖
- 表級鎖
- 存儲引擎
- 磁盤IO
- 磁盤結構圖
- 磁盤數據讀寫原理
- MySQL索引原理
- B+樹索引
- 局部性原理
- 索引數據結構
- 聯合索引
- 最左前綴匹配原則
- 建索引的幾大原則
- 數據文件和索引文件
- 執行計劃explain
- 常見問題
- 數據頁
- MYSQL單表存儲量計算
- 回表
- 索引覆蓋
- 索引下推
- 頁分裂和頁合并
- InnoDB
- innodb索引
- Innodb引擎的底層實現
- MyISAM
- MyISAM引擎的底層實現
- MVCC
- Next-Key Locks
- MySQL索引類型
- MYSQL復制
- 主從復制
- 讀寫分離
- MySQL Dual-Master
- 分庫分表實現方案
- MySQL事務實現原理
- MYSQL調優
- 性能優化
- HBase
- 不停機分庫分表遷移
- RDBMS&NoSQL
- 分布式事務
- 協議或事務模型
- X/Open XA協議
- 分布式事務編程接口規范JTA
- TCC模型
- 解決方案
- 兩階段提交2PC
- 三階段提交3PC
- Seata
- 分布式事務Seata產品模塊
- AT模式
- TCC模式
- Saga模式
- XA模式
- 基于消息中間件的最終一致性事務方案
- 消息隊列
- AMQP
- JMS
- ActiveMQ
- RabbitMQ
- RocketMQ
- RocketMQ基本概念
- 主要特性
- 分區順序消息
- 全局順序消息
- 消息可靠性
- 定時消息
- 消息重試
- 死信隊列
- 分布式事務消息
- RocketMQ架構
- Producer
- Consumer
- NameServer
- Broker
- RocketMQ設計
- 消息存儲
- 頁緩存與內存映射
- 消息刷盤
- 通信機制
- console控制臺
- RocketMQ部署架構
- Kafka
- Pulsar
- MQ消息重復消費與丟失
- 主流消息隊列比較
- 分布式調度系統
- 分布式搜索
- 分布式計算
- 架構案例
- 秒殺業務
- 秒殺整體架構
- 常見的監控系統
- 小米手機搶購秒殺方案
- 架構師領導藝術
- 架構師箴言
- 技術leader核心職責
- WEB服務器
- Servlet
- Servlet實現
- Servlet生命周期
- Servlet容器工作模式
- Servlet工作原理
- servlet線程安全
- CGI&FastCGI
- CGI
- FastCGI
- FastCGI與CGI特點
- CGI與Servlet比較
- HTTP Server
- Nginx
- Apache
- Nginx與Apache比較
- Application Server
- Tomcat
- Tomcat總體架構
- Connector
- 連接器核心功能
- ProtocolHandler
- EndPoint
- Processor
- Adapter
- Container
- 請求定位Servlet的過程
- Lifecycle生命周期
- Tomcat模塊設計
- Tomcat實例
- Tomcat運行原理
- spring & servlet
- Tomcat啟動流程
- Tomcat支持的I/O模型
- Tomcat應用層協議
- Tomcat類加載機制
- Tomcat類加載器
- Tomcat類加載器層次
- Apache+Tomcat
- 序列化
- XML&JSON
- JSON
- JAVA原生序列化
- hessian
- 常見中間件
- Canal
- Databus
- ELK日志套件
- 數據庫連接池
- spring狀態機
- 常見解決方案
- 二維碼掃碼登錄原理
- 前沿技術
- Saas服務
- 服務網格(Service Mesh)
- 云原生
- 常見面試問題
- Redis持久化的幾種方式
- Redis的緩存失效策略
- 附錄
- 二將軍問題
- 常見問題定位步驟
- 如何快速熟悉新系統
- 制定技術方案套路
- NUMA陷阱