1.kafka 集群的架構
Kafka是最初由Linkedin公司開發,是一個分布式、支持分區的(partition)、多副本的(replica),基于zookeeper協調的分布式消息系統,它的最大的特性就是可以實時的處理大量數據以滿足各種需求場景:比如基于hadoop的批處理系統、低延遲的實時系統、storm/Spark流式處理引擎,web/nginx日志、訪問日志,消息服務等等,用scala語言編寫,Linkedin于2010年貢獻給了Apache基金會并成為頂級開源 項目。
1.broker: 服務器集群的節點
2.topic : 專題
3.partition分區: 把一個 topic 分成不同的分區,提高負載,表現形式就是文件夾
1.leader:分區主節點(老大)
2.follower: 分區的從節點(小弟)
4.Consumer Group
2.生產者往 kafka發送數據的流程(6 步)
1、producer 從 kafka 集群獲取信息,知道誰是 leader
2、procucer 向 leader 發送數據
3、leader 存儲數據
4、leader 往 follwer 發送數據
5、follwer 告訴 leader 自己存儲完畢
6、leader 告訴 producer 自己存儲完畢
3.kafka 選擇分區模式
1.指定往哪個分區寫
2.指定 key,kafka 根據 key 做 hash 然后決定寫哪個分區
3.輪詢方式
4.生產者往 kafka 發送數據模式(3 種)
1.0
:把數據發給 leader 就成功,不等回復,效率最高,安全性最低
2.1
:把數據發送給 leader,等待 leader 回復 ACK
3.all
:把數據發送給 leader,確保 follower 從 leader 拉取到數據并回復 ACK 給 leader,leader 再回復 ACK;安全性最高
5.kafka為什么快
每個 partition 都是一個有序并且不可變的消息記錄集合。當有新的數據寫入時,就被追加到 partition 的末尾。在每個 partition 中,每條消息都會被分配一個順序的 唯一標識,這個標識稱為 offset,即偏移量。注意,kafka 只保證在同一個partition 內部消息是有序的,在不同 partition 之間,并不保證消息有序。