Kafka特性
————————————————————————————————————————————————
【關鍵原理】
1.消息文件存儲(消息堆積能力)
2.消息topic分區
3.消息順序的保證
4.拉模型(消費者水平擴展)
————————————————————————————————————————————————
【關鍵概念】
Producer :消息生產者,就是向kafka broker發消息的客戶端。
Consumer :消息消費者,向kafka broker取消息的客戶端
Topic :咋們可以理解為一個隊列。
Consumer Group (CG):這是kafka用來實現一個topic消息的廣播(發給所有的consumer)和單播(發給任意一個consumer)的手段。一個topic可以有多個CG。topic的消息會復制(不是真的復制,是概念上的)到所有的CG,但每個CG只會把消息發給該CG中的一個consumer。如果需要實現廣播,只要每個consumer有一個獨立的CG就可以了。要實現單播只要所有的consumer在同一個CG。用CG還可以將consumer進行自由的分組而不需要多次發送消息到不同的topic。
Broker :一臺kafka服務器就是一個broker。一個集群由多個broker組成。一個broker可以容納多個topic。
Partition:為了實現擴展性,一個非常大的topic可以分布到多個broker(即服務器)上,一個topic可以分為多個partition,每個partition是一個有序的隊列。partition中的每條消息都會被分配一個有序的id(offset)。kafka只保證按一個partition中的順序將消息發給consumer,不保證一個topic的整體(多個partition間)的順序。
Offset:kafka的存儲文件都是按照offset.kafka來命名,用offset做名字的好處是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。當然the first offset就是00000000000.kafka
————————————————————————————————————————————————
處理大量數據。Kafka主要的設計約束是吞吐量而不是功能。(活躍的流式數據實時處理)
分布式應用間的通信。
基于拉的消費模型讓消費者以自己的速度處理消息
如果處理消息時出現了異常,消費者始終可以選擇再消費該消息。
【kafka設計目標】
高吞吐量是其核心設計之一。
數據磁盤持久化:消息不在內存中cache,直接寫入到磁盤,充分利用磁盤的順序讀寫性能。
zero-copy:減少IO操作步驟。
支持數據批量發送和拉取。
支持數據壓縮。
Topic劃分為多個partition,提高并行處理能力。
【特征】
嚴格的消息順序、豐富的消息拉取模型、高效訂閱者水平擴展、實時的消息訂閱、億級的消息堆積能力。
【kafka特性】
通過O(1)的磁盤數據結構提供消息的持久化,這種結構對于即使數以TB的消息存儲也能夠保持長時間的穩定性能。
高吞吐量:即使是非常普通的硬件kafka也可以支持每秒數十萬的消息。
支持同步和異步復制兩種HA
Consumer客戶端pull,隨機讀,利用sendfile系統調用,zero-copy ,批量拉數據
消費狀態保存在客戶端
消息存儲順序寫
數據遷移、擴容對用戶透明
支持Hadoop并行數據加載。
支持online和offline的場景。
持久化:通過將數據持久化到硬盤以及replication防止數據丟失。
scale out:無需停機即可擴展機器。
定期刪除機制,支持設定partitions的segment file保留時間。
【應用場景】
日志異步記錄:高吞吐量+低一致性要求。
順序同步:MySQL binlog復制。
消息廣播。(消息推送)
分布式消息路由。
【消息分發的可靠性】
kafka(MQ)要實現從producer到consumer之間的可靠的消息傳送和分發。
傳統的MQ系統通常都是通過broker和consumer間的確認(ack)機制實現的,并在broker保存消息分發的狀態。即使這樣一致性也是很難保證的。
kafka的做法是由consumer自己保存狀態,也不要任何確認。這樣雖然consumer負擔更重,但其實更靈活了。
因為不管consumer上任何原因導致需要重新處理消息,都可以再次從broker獲得。
————————————————————————————————————————————————

浙公網安備 33010602011771號