RabbitMQ
1. RabbitMQ的使用場景有哪些?
搶購活動,削峰填谷,防止系統崩塌。
延遲信息處理,比如10分鍾之后給下單未付款的用戶發送郵件提醒。解耦系統,對於新增的功能可以單獨寫模塊擴展,比如用戶確認評價之后,新增了給用戶返積分的功能,這個時候不用在業務代碼里添加新增積分的功能,只需要把新增積分的接口訂閱確認評價的消息隊列即可,后面再添加任何功能只需要訂閱對應的消息隊列即可。
2. RabbitMQ有哪些重要的角色?
RabbitMQ中重要的角色有:生產者、消費者和代理:
生產者:消息的創建者,負責創建和推送數據到消息服務器;
消費者:消息的接收方,用於處理數據和確認消息;
代理:就是RabbitMQ本身,用於扮演“快遞”的角色,本身不生產消息,只是扮演“快遞”的角色。
3. RabbitMQ有哪些重要的組件?
ConnectionFactory(連接管理器):應用程序與Rabbit之間建立連接的管理器,程序代碼中使用。
Channel(信道):消息推送使用的通道。
Exchange(交換器):用於接受、分配消息。
Queue(隊列):用於存儲生產者的消息。
RoutingKey(路由鍵):用於把生成者的數據分配到交換器上。
BindingKey(綁定鍵):用於把交換器的消息綁定到隊列上。
4. RabbitMQ中vhost的作用是什么?
vhost:每個RabbitMQ都能創建很多vhost,我們稱之為虛擬主機,每個虛擬主機其實都是mini版的RabbitMQ,它擁有自己的隊列,交換器和綁定,擁有自己的權限機制。
5. RabbitMQ的消息是怎么發送的?
首先客戶端必須連接到RabbitMQ服務器才能發布和消費消息,客戶端和rabbit server之間會創建一個tcp連接,一旦tcp打開並通過了認證(認證就是你發送給rabbit服務器的用戶名和密碼),你的客戶端和RabbitMQ就創建了一條amqp信道(channel),信道是創建在“真實”tcp上的虛擬連接,amqp命令都是通過信道發送出去的,每個信道都會有一個唯一的id,不論是發布消息,訂閱隊列都是通過這個信道完成的。
6. RabbitMQ怎么保證消息的穩定性?
提供了事務的功能。
通過將channel設置為confirm(確認)模式。
7. RabbitMQ怎么避免消息丟失?
把消息持久化磁盤,保證服務器重啟消息不丟失。
8.要保證消息持久化成功的條件有哪些?
聲明隊列必須設置持久化durable設置為true.
消息推送投遞模式必須設置持久化,deliveryMode設置為2(持久)。
以上四個條件都滿足才能保證消息持久化成功。
9. RabbitMQ持久化有什么缺點?
持久化的缺地就是降低了服務器的吞吐量,因為使用的是磁盤而非內存存儲,從而降低了吞吐量。可盡量使用ssd硬盤來緩解吞吐量的問題。
10. RabbitMQ有幾種廣播類型?
direct(默認方式):最基礎最簡單的模式,發送方把消息發送給訂閱方,如果有多個訂閱者,默認采取輪詢的方式進行消息發送。
headers:與direct類似,只是性能很差,此類型幾乎用不到。
fanout:分發模式,把消費分發給所有訂閱者。
topic:匹配訂閱模式,使用正則匹配到消息隊列,能匹配到的都能接收到。
11. RabbitMQ怎么實現延遲消息隊列?
延遲隊列的實現有兩種方式:
使用RabbitMQ-delayed-message-exchange插件實現延遲功能。
12. RabbitMQ集群有什么用?
集群主要有以下兩個用途:
13. RabbitMQ節點的類型有哪些?
14. RabbitMQ集群搭建需要注意哪些問題?
各節點使用的erlang cookie值必須相同,此值相當於“秘鑰”的功能,用於各節點的認證。整個集群中必須包含一個磁盤節點。
15. RabbitMQ每個節點是其他節點的完整拷貝嗎?為什么?
不是,原因有以下兩個:
存儲空間的考慮:如果每個節點都擁有所有隊列的完全拷貝,這樣新增節點不但沒有新增存儲空間,反而增加了更多的冗余數據;
性能的考慮:如果每條消息都需要完整拷貝到每一個集群節點,那新增節點並沒有提升處理消息的能力,最多是保持和單節點相同的性能甚至是更糟。
16. RabbitMQ集群中唯一一個磁盤節點崩潰了會發生什么情況?
如果唯一磁盤的磁盤節點崩潰了,不能進行以下操作:
不能創建隊列
不能創建綁定
不能添加用戶
不能添加和刪除集群節點
17. RabbitMQ對集群節點停止順序有要求嗎?
RabbitMQ對集群的停止的順序是有要求的,應該先關閉內存節點,最后再關閉磁盤節點。如果順序恰好相反的話,可能會造成消息的丟失。
Kafka
1. kafka可以脫離zookeeper單獨使用嗎?為什么?
kafka不能脫離zookeeper單獨使用,因為kafka使用zookeeper管理和協調kafka的節點服務器。
2. kafka有幾種數據保留的策略?
kafka有兩種數據保存策略:按照過期時間保留和按照存儲的消息大小保留。
3. kafka同時設置了7天和10G清除數據,到第五天的時候消息達到了10G,這個時候kafka將如何處理?
4.什么情況會導致kafka運行變慢?
cpu性能瓶頸磁盤讀寫瓶頸網絡瓶頸
5.使用kafka集群需要注意什么?
集群數量最好是單數,因為超過一半故障集群就不能用了,設置為單數容錯率更高。
ZooKeeper
1. zookeeper是什么?
zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是google chubby的開源實現,是hadoop和hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
2. zookeeper都有哪些功能?
分布式鎖:zookeeper提供兩種鎖:獨占鎖、共享鎖。獨占鎖即一次只能有一個線程使用資源,共享鎖是讀鎖共享,讀寫互斥,即可以有多線線程同時讀同一個資源,如果要使用寫鎖也只能有一個線程使用。zookeeper可以對分布式鎖進行控制。
3. zookeeper有幾種部署模式?
zookeeper有三種部署模式:
集群部署:多台集群運行;
偽集群部署:一台集群啟動多個zookeeper實例運行。
4. zookeeper怎么保證主從節點的狀態同步?
zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步。實現這個機制的協議叫做zab協議。
zab協議有兩種模式,分別是恢復模式(選主)和廣播模式(同步)。當服務啟動或者在領導者崩潰后,zab就進入了恢復模式,當領導者被選舉出來,且大多數server完成了和leader的狀態同步以后,恢復模式就結束了。狀態同步保證了leader和server具有相同的系統狀態。
5.集群中為什么要有主節點?
6.集群中有3台服務器,其中一個節點宕機,這個時候zookeeper還可以使用嗎?
可以繼續使用,單數服務器只要沒超過一半的服務器宕機就可以繼續使用。
7.說一下zookeeper的通知機制?
客戶端端會對某個znode建立一個watcher事件,當該znode發生變化時,這些客戶端會收到zookeeper的通知,然后客戶端可以根據znode變化來做出業務上的改變。
總結
關注公眾號:程序員追風,回復【009】獲取上述資料。