Title: kafka介紹
Date: 2018-08-09 11:08:45
Category: 數(shù)據(jù)
keywords: kafka,消息隊(duì)列
在一上篇文章介紹了消息隊(duì)列的使用場(chǎng)景嫁赏,現(xiàn)在介紹下kafka
kafka
Kafka主要特點(diǎn):
同時(shí)為發(fā)布和訂閱提供高吞吐量季希。據(jù)了解捣作,Kafka每秒可以生產(chǎn)約25萬(wàn)消息(50 MB),每秒處理55萬(wàn)消息(110 MB)。
可進(jìn)行持久化操作。將消息持久化到磁盤(pán),因此可用于批量消費(fèi)氨菇,例如ETL,以及實(shí)時(shí)應(yīng)用程序妓湘。通過(guò)將數(shù)據(jù)持久化到硬盤(pán)以及replication防止數(shù)據(jù)丟失查蓉。
分布式系統(tǒng),易于向外擴(kuò)展多柑。所有的producer奶是、broker和consumer都會(huì)有多個(gè),均為分布式的竣灌。無(wú)需停機(jī)即可擴(kuò)展機(jī)器聂沙。
消息被處理的狀態(tài)是在consumer端維護(hù),而不是由server端維護(hù)初嘹。當(dāng)失敗時(shí)能自動(dòng)平衡及汉。
支持online和offline的場(chǎng)景。
kafka 架構(gòu)
Kafka的整體架構(gòu)非常簡(jiǎn)單屯烦,是顯式分布式架構(gòu)坷随,producer、broker(kafka)和consumer都可以有多個(gè)驻龟。Producer温眉,consumer實(shí)現(xiàn)Kafka注冊(cè)的接口,數(shù)據(jù)從producer發(fā)送到broker翁狐,broker承擔(dān)一個(gè)中間緩存和分發(fā)的作用类溢。broker分發(fā)注冊(cè)到系統(tǒng)中的consumer。broker的作用類似于緩存露懒,即活躍的數(shù)據(jù)和離線處理系統(tǒng)之間的緩存闯冷∩靶模客戶端和服務(wù)器端的通信,是基于簡(jiǎn)單蛇耀,高性能辩诞,且與編程語(yǔ)言無(wú)關(guān)的TCP協(xié)議。
幾個(gè)基本概念:
Topic:特指Kafka處理的消息源(feeds of messages)的不同分類纺涤。
Partition:Topic物理上的分組译暂,一個(gè)topic可以分為多個(gè)partition,每個(gè)partition是一個(gè)有序的隊(duì)列洒琢。partition中的每條消息都會(huì)被分配一個(gè)有序的id(offset)秧秉。
Message:消息褐桌,是通信的基本單位衰抑,每個(gè)producer可以向一個(gè)topic(主題)發(fā)布一些消息。
Producers:消息和數(shù)據(jù)生產(chǎn)者荧嵌,向Kafka的一個(gè)topic發(fā)布消息的過(guò)程叫做producers呛踊。
Consumers:消息和數(shù)據(jù)消費(fèi)者,訂閱topics并處理其發(fā)布的消息的過(guò)程叫做consumers啦撮。
Broker:緩存代理谭网,Kafka集群中的一臺(tái)或多臺(tái)服務(wù)器統(tǒng)稱為broker。
消息發(fā)送流程
1.Producer根據(jù)指定的partition方法(round-robin赃春、hash等)愉择,將消息發(fā)布到指定topic的partition里面
2.kafka集群接收到Producer發(fā)過(guò)來(lái)的消息后,將其持久化到硬盤(pán)织中,并保留消息指定時(shí)長(zhǎng)(可配置)锥涕,而不關(guān)注消息是否被消費(fèi)。
3.Consumer從kafka集群pull數(shù)據(jù)狭吼,并控制獲取消息的offset
消息存儲(chǔ)策略
談到kafka的存儲(chǔ)层坠,就不得不提到分區(qū),即partitions刁笙,創(chuàng)建一個(gè)topic時(shí)破花,同時(shí)可以指定分區(qū)數(shù)目,分區(qū)數(shù)越多疲吸,其吞吐量也越大座每,但是需要的資源也越多,同時(shí)也會(huì)導(dǎo)致更高的不可用性摘悴,kafka在接收到生產(chǎn)者發(fā)送的消息之后峭梳,會(huì)根據(jù)均衡策略將消息存儲(chǔ)到不同的分區(qū)中。
在每個(gè)分區(qū)中烦租,消息以順序存儲(chǔ)延赌,最晚接收的的消息會(huì)最后被消費(fèi)除盏。
與生產(chǎn)者的交互
生產(chǎn)者在向kafka集群發(fā)送消息的時(shí)候,可以通過(guò)指定分區(qū)來(lái)發(fā)送到指定的分區(qū)中
也可以通過(guò)指定均衡策略來(lái)將消息發(fā)送到不同的分區(qū)中
如果不指定挫以,就會(huì)采用默認(rèn)的隨機(jī)均衡策略者蠕,將消息隨機(jī)的存儲(chǔ)到不同的分區(qū)中
與消費(fèi)者的交互
在消費(fèi)者消費(fèi)消息時(shí),kafka使用offset來(lái)記錄當(dāng)前消費(fèi)的位置
在kafka的設(shè)計(jì)中掐松,可以有多個(gè)不同的group來(lái)同時(shí)消費(fèi)同一個(gè)topic下的消息踱侣,如圖,我們有兩個(gè)不同的group同時(shí)消費(fèi)大磺,他們的的消費(fèi)的記錄位置offset不互相干擾抡句。
對(duì)于一個(gè)group而言,消費(fèi)者的數(shù)量不應(yīng)該多余分區(qū)的數(shù)量杠愧,因?yàn)樵谝粋€(gè)group中待榔,每個(gè)分區(qū)至多只能綁定到一個(gè)消費(fèi)者上,即一個(gè)消費(fèi)者可以消費(fèi)多個(gè)分區(qū)流济,一個(gè)分區(qū)只能給一個(gè)消費(fèi)者消費(fèi)
若一個(gè)group中的消費(fèi)者數(shù)量大于分區(qū)數(shù)量的話锐锣,多余的消費(fèi)者將不會(huì)收到任何消息。