Grape前端
這幾天簡單學習了一下Kafka,看了一些書,也查了一些資料,結合這些,我簡單總結了一下Kafka的一些基礎知識,以此做記錄~
老規矩,拋出咱們這篇文章的三個問題:數據庫
你們簡單思考一下,若是你知道的話~segmentfault
首先咱們看一下來自百度百科的定義:Kafka是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它能夠處理消費者在網站中的全部動做流數據。
這裏邊有兩個重點:消息系統和發佈訂閱。那麼接下來咱們着重在這兩方面敘述。後端
什麼是消息系統?簡單的說它主要是用來作數據收集處理以及傳輸的一個系統。數據工程中最具挑戰性的部分之一是如何從不一樣點收集和傳輸大量數據到分佈式系統進行處理和分析。須要經過消息隊列正確地分離大量數據,由於若是一部分數據沒法傳送,則能夠在系統恢復時傳輸和分析其餘數據。一般有兩種消息排隊:點對點(Point to point)和發佈者——訂閱者(publisher-subscriber)。 對於上述目的,它們都是可靠的和異步的。安全
提及發佈訂閱咱們先來看下一般存在的兩種消息排隊中的另外一位玩家:點對點。在點對點或一對一中,有一個發件人和正在監聽發件人的多個消費者。當一個消費者從隊列收到消息時,該特定消息將從隊列中消失,而其餘消費者沒法得到該消息。
發佈訂閱:發佈者向同時收聽發佈者的多個消費者或訂閱者發送消息,而且每一個訂閱者能夠得到相同的消息。數據應經過數據管道傳輸,數據管道負責整合來自數據源的數據。
也就是說,點對點只能發送給一我的一份信息,而發佈訂閱式能夠發送給不用的人相同的信息。在這裏咱們不論述哪一種方式的好壞,由於,方式的好壞是看業務場景的。服務器
明白了定義,咱們要知道Kafka的結構式什麼樣子的。大概就是如下圖示:網絡
咱們看到,很明白的發佈訂閱者模式,以上三張圖也是由淺入深,第一張大概介紹整個Kafka架構,咱們能夠看到又多個發佈者向不一樣的broker發送消息,而後broker管理不一樣的topic,最後訂閱者去不一樣的分區消費消息。
固然,你可能還不太明白髮布者訂閱者之類的術語,下邊我來解答幾個常見的術語:
(1)Topics(主題) :屬於特定類別的消息流稱爲主題。 數據存儲在主題中。Topic至關於Queue。主題被拆分紅分區。 每一個這樣的分區包含不可變有序序列的消息。分區被實現爲具備相等大小的一組分段文件。
(2)Partition(分區)架構
一個Topic能夠分紅多個Partition,這是爲了平行化處理。每一個Partition內部消息有序,其中每一個消息都有一個offset序號。一個Partition只對應一個Broker,一個Broker能夠管理多個Partition。
(3)Partition offset(分區偏移) 每一個分區消息具備稱爲 offset 的惟一序列標識。
(4)Replicas of partition(分區備份) 副本只是一個分區的備份。 副本從不讀取或寫入數據。 它們用於防止數據丟失。
(5)Brokers(經紀人):單個的 Kafka 服務器叫作「中間人」(Broker)。一個 Kafka 中間人,接收生產者發來的消費,分配偏移量,並存儲入物理空間中去;同時,中間人還接收消費者的請求,把物理空間裏的消息響應回去。
(6)Kafka Cluster(Kafka集羣) Kafka有多個代理被稱爲Kafka集羣。 能夠擴展Kafka集羣,無需停機。 這些集羣用於管理消息數據的持久性和複製。
(7)Producers(生產者): 生產者是發送給一個或多個Kafka主題的消息的發佈者。 生產者向Kafka經紀人發送數據。 每當生產者將消息發佈給代理時,代理只需將消息附加到最後一個段文件。實際上,該消息將被附加到分區。 生產者還能夠向他們選擇的分區發送消息。
(8)Consumers(消費者) :Consumers從經紀人處讀取數據。 消費者訂閱一個或多個主題,並經過從代理中提取數據來使用已發佈的消息。異步
到這咱們總結一下,發佈訂閱系統的大體流程就是生產者生產消息推送到brokers,各個broker將消息發送到不一樣的topic的分區上,而後再由消費者來進行消費(固然,這是最簡單的模式)。
注意:生產者也能夠向指定的某個topic由向他們選擇的分區發送消息。分佈式
發佈/訂閱式的系統有不少,但Kafka出色在哪寫方面?
參考文章: