1.2.1 消息
消息:字節(jié)數據組琅拌。消息有一個可選的元數據稱為鍵某残,也是一個字節(jié)數組,在分區(qū)時會對鍵取hash值再模以分區(qū)數得到這條數據存進哪個分區(qū)暂衡。
1.2.2 模式
可以理解為數據的格式:如:json、xml低飒、強類型模式
Avro提供了一種緊湊的序列化格式计螺,模式和消息體是分開的蕾各,支持強烈型和模式進化。
數據格式要一致才能解除生產者和消費者之間的耦合。
1.2.3 主題和分區(qū)
主題:可以把一個主題看成是從生產者流到消費者的一條數據流遏乔。
分區(qū):一個主題可以有多個分區(qū)义矛,數據被追加到這些分區(qū),單個分區(qū)內到數據是有序的盟萨。
分區(qū)的好處是數據冗余備份和數據吞吐的伸縮性凉翻,分區(qū)是負載均衡和冗余備份的單位。
1.2.4 生產者和消費者
生產者:負責把數據寫入主題捻激。默認是均衡的把消息寫到所有分區(qū)制轰,也可以指定分區(qū)器,通過消息的鍵生成一個散列值胞谭,將其映射到指定分區(qū)上垃杖。
消費者:讀取主題數據。
偏移量:消費者通過檢查偏移量來記錄已經讀區(qū)過的消息丈屹,每個分區(qū)內的偏移量都是唯一调俘、遞增的。每個分區(qū)最后讀取的偏移量被保存到zookeeper或Kafka中
消費者群組:一個消費者組對應一個主題泉瞻。一個主題內的一個分區(qū)只能被一個消費者所有脉漏,但一個消費者可以擁有多個分區(qū)苞冯。
這樣設計的好處在于:
1. 保證了在一個組內袖牙,每條消息只被處理一次。
2. 這種方式讓消費者組可以負載均衡的消費大量消息的主題舅锄,而且還具有容災的特性鞭达。
1.2.5 broker和集群
broker:一個獨立的Kafka server就是一個broker
對生產者作用:接收消息->設置偏移量->提交存盤
對消費者作用:響應讀取消息的請求
性能:數千分區(qū)、每秒百萬級別數據
對于分區(qū):一個分區(qū)可以存儲到多個broker上皇忿,其中一個是master負責讀寫消息畴蹭,其它的salve負責復制數據備份,master掛了會有一個頂上
集群:集群內會有一個broker作為controller的角色鳍烁,負責分配分區(qū)給broker和監(jiān)控broker
保留消息:保留一段時間叨襟、保留一定大小、緊湊型日志(只有最后一個帶有特定鍵的消息會被保留)
1.3選擇kafka的理由
1. 支持多個生產者同時寫如一個主題幔荒,消費者可以獲得統(tǒng)一主題數據
2. 可以重復消費一個主題糊闽,一個主題可以由多個消費者并發(fā)消費,每個分區(qū)只能指定一個消費者爹梁,保證了每條消費只被消費一次右犹。
3. 基于磁盤的存儲。讓消息可以保留姚垃、不會阻塞在生產端念链、消費端可重復消費、消費者離線也不會丟數據
4. 伸縮性好,broker可以從一個逐步擴展到多個