1零截、介紹Kafka
? ? Kafka最初由Linkedln(領(lǐng)英)公司發(fā)布麸塞,使用Scala語言編寫,后成為Apache的頂級項(xiàng)目涧衙。主要用于處理活躍的數(shù)據(jù)哪工,如登陸、瀏覽弧哎、點(diǎn)擊雁比、分享等用戶行為產(chǎn)生的數(shù)據(jù)。
? ? 特點(diǎn):
? ? ? ? · 高吞吐量
? ? ? ? ? ?可以滿足每秒百萬級別消息的產(chǎn)生和消費(fèi)
? ? ? ? · 持久性
? ? ? ? ? ?有一套完善的消息存儲機(jī)制撤嫩,確保數(shù)據(jù)的高效安全的持久化
? ? ? ? · 分布式
? ? ? ? ? ?基于分布式的擴(kuò)展和容錯機(jī)制
? ? ? ? ? ? 將數(shù)據(jù)復(fù)制到多臺服務(wù)器上章贞,當(dāng)某一臺發(fā)生故障時,生產(chǎn)者和消費(fèi)者自動切換到其它服務(wù)器上
2、架構(gòu)
3鸭限、組成
? ? Broker節(jié)點(diǎn)蜕径,Kafka集群中包含多個Kafka服務(wù)節(jié)點(diǎn),每一個節(jié)點(diǎn)就是一個Broker(Broker里包含多個主題)
? ? Topic主題:用來存儲不同類別的消息(Kafka消息數(shù)據(jù)是儲存在硬盤上)(主題里包含分區(qū))
? ? Partition分區(qū):每個Topic包含一個或多個Partition败京,在創(chuàng)建Topic時指定包含的Partition數(shù)量(目的時為了進(jìn)行分布式存儲)
? ? Replication副本:在集群環(huán)境下兜喻,每個分區(qū)可以有多個副本,分布在不同的Broker上赡麦,選出一個副本作為Leader(領(lǐng)導(dǎo)者)朴皆,其余Broker上的副本作為Follower(跟隨者),所有的讀寫請求都會同南宮Leader晚才泛粹,F(xiàn)ollower只負(fù)責(zé)備份數(shù)據(jù)遂铡。Follower會自動從Leader中復(fù)制數(shù)據(jù),當(dāng)Leader宕機(jī)后晶姊,會從Follower中選出一個新的Leader繼續(xù)提供服務(wù)扒接,實(shí)現(xiàn)故障自動轉(zhuǎn)移
? ? message消息:通訊的基本單位,每個消息都屬于一個Partition们衙,消息儲存在分區(qū)里
? ? Producer生產(chǎn)者:向Kafka的一個topic發(fā)布消息
? ? Consumer消費(fèi)者: 訂閱topic并讀取其發(fā)布的消息钾怔,可以訂閱多個topic
? ? Consumer Group消費(fèi)者組:每個Consumer屬于一個特定的Consumer?Group,多個Consumer可以屬于同一個Consumer Group
? ? Zookeeper注冊消息: 協(xié)調(diào)Kafka運(yùn)行蒙挑,主要存儲Kafka源數(shù)據(jù)信息(Kafka集群的節(jié)點(diǎn)宗侦,Broker,Topic等等信息)忆蚀,發(fā)送給Topic的消息數(shù)據(jù)并不存儲在ZK中矾利,而是存儲在Kafka磁盤文件中