Kafka的架構組建架構
Topic:消息存放的目錄主題socket
Producer:生產消息到topic的一方性能
Consumer:訂閱topic消費消息的一方操作系統
Consumergroup:各個consumer能夠組成一個組,每一個消息只能被組中的一個consumer消費,若是一個消息能被多個consumer消費,那麼這些個consumer確定不在同一個組中server
(因此同一個groupid下的consumer是各自消費消息的,不會出現消費同一個消息的狀況出現rabbitmq
Kafka性能優秀緣由揭祕進程
- kafka中的message並非保存在內存中的,而是保存在了磁盤上,惟一的區別是他運用了順序寫,而並不是採用隨機寫,順序寫的速度在600MB/S,隨機寫的速度在100KB/S,這個性能的提高的效果明顯的,順序寫的效率並不比內存寫差,甚至合理運用效率更高(充分利用了操做系統的預讀、後寫機制)
- kafka經過sendfile命令,減小了數據拷貝,數據的拷貝基本全在內存中完成。(原先是將數據從硬盤讀到內核區的pageCache,而後用戶進程copy到用戶區,用戶區在吧數據寫進socket中)如今是省掉了用戶copy數據這一步,直接讓內核區的數據寫入socket中
- push-and-pull:producer批量的push數據,consumer批量的pull數據,減小了io的次數
kafka和rabbitmq區別內存
- rabbitmq比kafka更嚴謹,不易出現消息的丟失,緣由是rabbit有一個ack消息確認機制,只有消息處理完畢後,consumer纔會給server發送一個回執,將queue中的消息刪除,不然不會被刪除
- rabbitmq一樣支持持久化,配置一個durable = true便可