Kafka 都有哪些特點(diǎn)?
Kafka 都有哪些特點(diǎn)?
高吞吐量、低延遲:kafka每秒可以處理幾十萬(wàn)條消息,它的延遲最低只有幾毫秒,每個(gè)topic可以分多個(gè)partition, consumer group 對(duì)partition進(jìn)行consume操作。
可擴(kuò)展性:kafka集群支持熱擴(kuò)展
持久性、可靠性:消息被持久化到本地磁盤,并且支持?jǐn)?shù)據(jù)備份防止數(shù)據(jù)丟失
容錯(cuò)性:允許集群中節(jié)點(diǎn)失?。ㄈ舾北緮?shù)量為n,則允許n-1個(gè)節(jié)點(diǎn)失敗)
高并發(fā):支持?jǐn)?shù)千個(gè)客戶端同時(shí)讀寫
請(qǐng)簡(jiǎn)述下你在哪些場(chǎng)景下會(huì)選擇 Kafka?
日志收集:一個(gè)公司可以用Kafka可以收集各種服務(wù)的log,通過(guò)kafka以統(tǒng)一接口服務(wù)的方式開放給各種consumer,例如hadoop、HBase、Solr等。
消息系統(tǒng):解耦和生產(chǎn)者和消費(fèi)者、緩存消息等。
用戶活動(dòng)跟蹤:Kafka經(jīng)常被用來(lái)記錄web用戶或者app用戶的各種活動(dòng),如瀏覽網(wǎng)頁(yè)、搜索、點(diǎn)擊等活動(dòng),這些活動(dòng)信息被各個(gè)服務(wù)器發(fā)布到kafka的topic中,然后訂閱者通過(guò)訂閱這些topic來(lái)做實(shí)時(shí)的監(jiān)控分析,或者裝載到hadoop、數(shù)據(jù)倉(cāng)庫(kù)中做離線分析和挖掘。
運(yùn)營(yíng)指標(biāo):Kafka也經(jīng)常用來(lái)記錄運(yùn)營(yíng)監(jiān)控?cái)?shù)據(jù)。包括收集各種分布式應(yīng)用的數(shù)據(jù),生產(chǎn)各種操作的集中反饋,比如報(bào)警和報(bào)告。
流式處理:比如spark streaming和 Flink
Kafka 的設(shè)計(jì)架構(gòu)你知道嗎?
Kafka 架構(gòu)分為以下幾個(gè)部分:
Producer :消息生產(chǎn)者,就是向 kafka broker 發(fā)消息的客戶端。
Consumer :消息消費(fèi)者,向 kafka broker 取消息的客戶端。
Topic :可以理解為一個(gè)隊(duì)列,一個(gè) Topic 又分為一個(gè)或多個(gè)分區(qū),
Consumer Group:這是 kafka 用來(lái)實(shí)現(xiàn)一個(gè) topic 消息的廣播(發(fā)給所有的 consumer)和單播(發(fā)給任意一個(gè) consumer)的手段。一個(gè) topic 可以有多個(gè) Consumer Group。
Broker :一臺(tái) kafka 服務(wù)器就是一個(gè) broker。一個(gè)集群由多個(gè) broker 組成。一個(gè) broker 可以容納多個(gè) topic。
Partition:為了實(shí)現(xiàn)擴(kuò)展性,一個(gè)非常大的 topic 可以分布到多個(gè) broker上,每個(gè) partition 是一個(gè)有序的隊(duì)列。partition 中的每條消息都會(huì)被分配一個(gè)有序的id(offset)。將消息發(fā)給 consumer,kafka 只保證按一個(gè) partition 中的消息的順序,不保證一個(gè) topic 的整體(多個(gè) partition 間)的順序。
Offset:kafka 的存儲(chǔ)文件都是按照 offset.kafka 來(lái)命名,用 offset 做名字的好處是方便查找。例如你想找位于 2049 的位置,只要找到 2048.kafka 的文件即可。當(dāng)然 the first offset 就是 00000000000.kafka。
Kafka 分區(qū)的目的?
分區(qū)對(duì)于 Kafka 集群的好處是:實(shí)現(xiàn)負(fù)載均衡。分區(qū)對(duì)于消費(fèi)者來(lái)說(shuō),可以提高并發(fā)度,提高效率。
你知道 Kafka 是如何做到消息的有序性?
kafka 中的每個(gè) partition 中的消息在寫入時(shí)都是有序的,而且單獨(dú)一個(gè) partition 只能由一個(gè)消費(fèi)者去消費(fèi),可以在里面保證消息的順序性。但是分區(qū)之間的消息是不保證有序的。
Kafka Producer 的執(zhí)行過(guò)程?
1,Producer生產(chǎn)消息 --> 2,從Zookeeper找到Partition的Leader --> 3,推送消息 --> 4,通過(guò)ISR列表通知給Follower --> 5, Follower從Leader拉取消息,并發(fā)送ack --> 6,Leader收到所有副本的ack,更新Offset,并向Producer發(fā)送ack,表示消息寫入成功。