柚子快報激活碼778899分享:Kafka基本原理|特性
柚子快報激活碼778899分享:Kafka基本原理|特性
Kafka是什么
Kafka是最初由Linkedin公司開發(fā),是一個分布式、支持分區(qū)的(partition)、多副本的(replica),基于zookeeper協(xié)調的分布式消息系統(tǒng) 它的最大的特性就是可以實時的處理大量數據以滿足各種需求場景:比如基于hadoop的批處理系統(tǒng)、低延遲的實時系統(tǒng)、storm/Spark流式處理引擎,web/nginx日志、訪問日志,消息服務等等,用scala語言編寫,Linkedin于2010年貢獻給了Apache基金會并成為頂級開源 項目。
Kafka的主要應用場景
日志收集: 通過Kafka收集和聚合來自不同源的日志數據。 流式處理: 利用Kafka進行實時數據流的處理和分析。 事件sourcing: 基于Kafka的事件驅動架構進行應用開發(fā)。 數據管道: 使用Kafka在不同系統(tǒng)間傳輸和共享數據。
Kafka的特性
高吞吐:能夠每秒處理數百萬條消息,滿足大規(guī)模數據處理的需求,延遲最低只有幾毫秒
擴展性:kafka集群支持熱擴展,無需停機即可擴展節(jié)點及節(jié)點上線。
持久性、可靠性:消息被持久化到本地磁盤,并且支持數據備份防止數據丟失
容錯性:允許集群中節(jié)點失?。ㄈ舾北緮盗繛閚,則允許n-1個節(jié)點失?。?/p>
高并發(fā):支持數千個客戶端同時讀寫
Kafka 的架構原理
kafaka 底層架構 Producer:Producer即生產者,消息的產生者,是消息的入口。 Broker:kafka集群中包含一個或者多個服務實例(節(jié)點),這種服務實例被稱為broker(一個broker就是一個節(jié)點/一個服務器) Topic:每條發(fā)布到kafka集群的消息都屬于某個類別,這個類別就叫做topic Partition:partition是一個物理上的概念也叫分區(qū),每個topic包含一個或者多個partition。分區(qū)的作用是做負載,提高kafka的吞吐量。 Replication:每一個分區(qū)都有多個副本,副本的作用是做備胎。當主分區(qū)(Leader)故障的時候會選擇一個備胎(Follower)上位,成為Leader。在kafka中默認副本的最大數量是10個,且副本的數量不能大于Broker的數量,follower和leader是在不同的機器,同一機器對同一個分區(qū)也只可能存放一個副本(包括自己)。 Message:每一條發(fā)送的消息主體。 Consumer:消費者,即消息的消費方,是消息的出口。 Consumer Group:將多個消費者組成一個消費者組,同一個分區(qū)的數據只能被消費者組中的某一個消費者消費。 Zookeeper:kafka集群依賴zookeeper來保存集群的的元信息,來保證系統(tǒng)的可用性。
kafaka 的主要組件
producer(生產者) producer主要是用于生產消息,是kafka當中的消息生產者,生產的消息通過topic進行歸類,保存到kafka的broker里面去。 topic(主題) kafka將消息以topic為單位進行歸類; topic特指kafka處理的消息源(feeds of messages)的不同分類; topic是一種分類。kafka主題始終是支持多用戶訂閱的;也就是說,一 個主題可以有零個,一個或者多個消費者訂閱寫入的數據; 在kafka集群中,可以有無數的主題; 生產者和消費者消費數據一般以主題為單位,更細粒度可以到分區(qū)級別。 partition(分區(qū)) kafka當中,topic是消息的歸類,一個topic可以有多個分區(qū)(partition),每個分區(qū)保存部分topic的數據,所有的partition當中的數據全部合并起來,就是一個topic當中的所有的數據。 一個broker服務下,可以創(chuàng)建多個分區(qū); 每一個分區(qū)會有一個編號:編號從0開始。 每一個分區(qū)內的數據是有序的,但全局的數據不能保證是有序的。(有序是指生產什么樣順序,消費時也是什么樣的順序) consumer(消費者) consumer是kafka當中的消費者,主要用于消費kafka當中的數據,消費者一定是歸屬于某個消費組中的。 consumer group(消費者組) 消費者組由一個或者多個消費者組成,同一個組中的消費者對于同一條消息只消費一次。
每個消費者都屬于某個消費者組,如果不指定,那么所有的消費者都屬于默認的組。
每個消費者組都有一個ID,即group ID。組內的所有消費者協(xié)調在一起來消費一個訂閱主題( topic)的所有分區(qū)(partition)。當然,每個分區(qū)只能由同一個消費組內的一個消費者(consumer)來消費,可以由不同的消費組來消費。
partition數量決定了每個consumer group中并發(fā)消費者的最大數量。如下圖:
如上面左圖所示,如果只有兩個分區(qū),即使一個組內的消費者有4個,也會有兩個空閑的。 如上面右圖所示,有4個分區(qū),每個消費者消費一個分區(qū),并發(fā)量達到最大4。
在來看如下一幅圖:
如上圖所示,不同的消費者組消費同一個topic,這個topic有4個分區(qū),分布在兩個節(jié)點上。左邊的 消費組1有兩個消費者,每個消費者就要消費兩個分區(qū)才能把消息完整的消費完,右邊的 消費組2有四個消費者,每個消費者消費一個分區(qū)即可。
總結下kafka中分區(qū)與消費組的關系
消費組: 由一個或者多個消費者組成,同一個組中的消費者對于同一條消息只消費一次。 某一個主題下的分區(qū)數,對于消費該主題的同一個消費組下的消費者數量,應該小于等于該主題下的分區(qū)數。 同一個分區(qū)下的數據,在同一時刻,不能同一個消費組的不同消費者消費。 分區(qū)數越多,同一時間可以有越多的消費者來進行消費,消費數據的速度就會越快,提高消費的性能。
partition replicas(分區(qū)副本) kafka 中的分區(qū)副本如下圖所示:
kafka 分區(qū)副本
副本數(replication-factor):控制消息保存在幾個broker(服務器)上,一般情況下副本數等于broker的個數。
一個broker服務下,不可以創(chuàng)建多個副本因子。創(chuàng)建主題時,副本因子應該小于等于可用的broker數。
副本因子操作以分區(qū)為單位的。每個分區(qū)都有各自的主副本和從副本;
主副本叫做leader,從副本叫做 follower(在有多個副本的情況下,kafka會為同一個分區(qū)下的所有分區(qū),設定角色關系:一個leader和N個 follower),處于同步狀態(tài)的副本叫做in-sync-replicas(ISR);
follower通過拉的方式從leader同步數據。 消費者和生產者都是從leader讀寫數據,不與follower交互。
副本因子的作用:讓kafka讀取數據和寫入數據時的可靠性。
副本因子是包含本身,同一個副本因子不能放在同一個broker中。
如果某一個分區(qū)有三個副本因子,就算其中一個掛掉,那么只會剩下的兩個中,選擇一個leader,但不會在其他的broker中,另啟動一個副本(因為在另一臺啟動的話,存在數據傳遞,只要在機器之間有數據傳遞,就會長時間占用網絡IO,kafka是一個高吞吐量的消息系統(tǒng),這個情況不允許發(fā)生)所以不會在另一個broker中啟動。
如果所有的副本都掛了,生產者如果生產數據到指定分區(qū)的話,將寫入不成功。
lsr表示:當前可用的副本。
kafka中的數據不丟失機制
生產者生產數據不丟失 發(fā)送消息方式 生產者發(fā)送給kafka數據,可以采用同步方式或異步方式
同步方式:
發(fā)送一批數據給kafka后,等待kafka返回結果:
生產者等待10s,如果broker沒有給出ack響應,就認為失敗。 生產者重試3次,如果還沒有響應,就報錯. 異步方式:
發(fā)送一批數據給kafka,只是提供一個回調函數:
先將數據保存在生產者端的buffer中。buffer大小是2萬條 。 滿足數據閾值或者數量閾值其中的一個條件就可以發(fā)送數據。 發(fā)送一批數據的大小是500條。 注:如果broker遲遲不給ack,而buffer又滿了,開發(fā)者可以設置是否直接清空buffer中的數據。
ack機制(確認機制) 生產者數據發(fā)送出去,需要服務端返回一個確認碼,即ack響應碼;ack的響應有三個狀態(tài)值0,1,-1
0:生產者只負責發(fā)送數據,不關心數據是否丟失,丟失的數據,需要再次發(fā)送
1:partition的leader收到數據,不管follow是否同步完數據,響應的狀態(tài)碼為1
-1:所有的從節(jié)點都收到數據,響應的狀態(tài)碼為-1
如果broker端一直不返回ack狀態(tài),producer永遠不知道是否成功;producer可以設置一個超時時間10s,超過時間認為失敗。
broker中數據不丟失 在broker中,保證數據不丟失主要是通過副本因子(冗余),防止數據丟失。 消費者消費數據不丟失 在消費者消費數據的時候,只要每個消費者記錄好offset值即可,就能保證數據不丟失。也就是需要我們自己維護偏移量(offset),可保存在 Redis 中。
參考文章:https://www.cnblogs.com/itlz/p/14292104.html
柚子快報激活碼778899分享:Kafka基本原理|特性
參考文章
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。