对Kafka的总结
定位:kafka是一款分布式,高吞吐量,基于發布/訂閱的消息中間件。
核心組件:
broker:kafka服務器,負責消息的存儲和轉發。
topic:主題,消息的類別,kafka按照topic分類消息。
partition:分區,一個topic可以有多個partition分區,topic中的消息保存在各個partition上。
offset:偏移量。消息在kafka消息文件中的位置,可以理解為消息在partition上的偏移量,也是代表該消息的唯一序號。
producer:消息的生產者。
consumer:消息的消費者。
consumer group: 消費組,消費者的分組,每個消費者分組必須要屬于一個group
zookeeper:配置中心,保存kafka集群的broker,topic,partition等信息,另外還負責broker的故障發現,partition的leader選舉,負載均衡等。
?
? Kafka的存儲設計:
partition分區數據文件(offset,messageSize,data)
partition中的每條message包含3個屬性,offset表示這個消息在partition中的偏移量,可以看作每個消息的消息順序id。messageSIze則是消息的大小,data為消息的內容。
數據文件分段segement(順序讀寫,分段命令,二分查找)
partition物理上是由多個segement文件組成,每個segement文件大小相同,順序讀寫。而且每個segement文件都是以當前文件中offset最小的值命名.log,這樣我們查offset消息時,就可以很快二分查找定位到這個offset消息在哪個segement文件中。
數據文件索引(分段索引、稀疏存儲)
kafka為每個segement文件建立了索引文件,文件名與segement文件名相同.index。但是kafka并沒有給每一條消息都建立索引,而是采取稀疏索引的方式,每隔一定字節的數據建立索引,從而避免索引文件過大,因此可以將索引文件放入內存中。
?生產者設計(負載均衡)
由于topic是由多個partition組成,且partition均勻分布在不同的broker上,因此為了有效的利用broker的集群性能,提高吞吐量,producer會通過hash或者隨機等方式將消息平均發送到多個partittion上,以實現負載均衡。
批量發送
批量發送也是提高吞吐量的重要方式,Producer端可以在內存中合并多條消息,以一次請求的方式批量發送給不同的Broker,從而大大減少broker存儲消息時的io操作,所以也一定程度上影響消息的實時性,但是換取了更好的吞吐量。
消息壓縮
producer端可以用GZIP或者Snappy對消息集合壓縮。producer端壓縮后,consumer也需要解壓,壓縮解壓需要消耗少量cpu資源,但是好處是減少傳輸的數據量,減輕網絡壓力,在大數據處理上,往往瓶頸體現在網絡上而不是cpu。
消費者設計
consumer group?
同一 Consumer Group 中的多個 Consumer 實例,不同時消費同一個 partition,等效于隊列模 式。partition內消息是有序的,Consumer通過pull方式消費消息。Kafka不刪除已消費的消息?
對于partition,順序讀寫磁盤數據,以時間復雜度O(1)方式提供消息持久化能力。?
?
總結
- 上一篇: 杨辉三角java代码_【LeetCode
- 下一篇: windows 显示苹果分区_基准测试数