多圖詳解 Kafka 原理與架構(gòu),建議收藏引润!

來源:https://www.cnblogs.com/bainianminguo/p/12247158.html
標(biāo)題:kafka概念掃盲
作者:bainianminguo

一巩趁、kafka概述

1.1、定義

Kakfa是一個分布式的基于發(fā)布/訂閱模式的消息隊(duì)列(message queue)淳附,主要應(yīng)用于大數(shù)據(jù)的實(shí)時處理領(lǐng)域

1.2议慰、消息隊(duì)列

1.2.1、傳統(tǒng)的消息隊(duì)列&新式的消息隊(duì)列的模式
image

上面是傳統(tǒng)的消息隊(duì)列燃观,比如一個用戶要注冊信息褒脯,當(dāng)用戶信息寫入數(shù)據(jù)庫后,后面還有一些其他流程缆毁,比如發(fā)送短信番川,則需要等這些流程處理完成后,在返回給用戶

而新式的隊(duì)列是脊框,比如一個用戶注冊信息颁督,數(shù)據(jù)直接丟進(jìn)數(shù)據(jù)庫,就直接返回給用戶成功

1.2.2浇雹、使用消息隊(duì)列的好處

A沉御、 解耦

B、 可恢復(fù)性

C昭灵、 緩沖

D吠裆、 靈活性&峰值處理能力

E、 異步通信

1.2.3烂完、消息隊(duì)列的模式

A试疙、點(diǎn)對點(diǎn)模式

消息生產(chǎn)者發(fā)送消息到消息隊(duì)列中,然后消息消費(fèi)者從隊(duì)列中取出并且消費(fèi)消息抠蚣,消息被消費(fèi)后祝旷,隊(duì)列中不在存儲。所以消息消費(fèi)者不可能消費(fèi)到已經(jīng)被消費(fèi)的消息;隊(duì)列支持存在多個消費(fèi)者怀跛,但是對于一個消息而言距贷,只會
有一個消費(fèi)者可以消費(fèi);如果想發(fā)給多個消費(fèi)者吻谋,則需要多次發(fā)送該條消息

B】發(fā)布/訂閱模式(一對多忠蝗,消費(fèi)者消費(fèi)數(shù)據(jù)之后不會清除消息)

消息生產(chǎn)者將消息發(fā)布到topic中,同時有多個消息消費(fèi)者(訂閱)消費(fèi)該消息滨溉,和點(diǎn)對點(diǎn)的方式不同什湘,發(fā)布到topic的消息會被所有的訂閱者消費(fèi);但是數(shù)據(jù)保留是期限的晦攒,默認(rèn)是7天,因?yàn)樗皇谴鎯ο到y(tǒng)得哆;kafka就是這種模式的脯颜;有兩種方式,一種是是消費(fèi)者去主動去消費(fèi)(拉确肪荨)消息栋操,而不是生產(chǎn)者推送消息給消費(fèi)者;另外一種就是生產(chǎn)者主動推送消息給消費(fèi)者饱亮,類似公眾號

1.3矾芙、kafka的基礎(chǔ)架構(gòu)

image

kafka的基礎(chǔ)架構(gòu)主要有broker、生產(chǎn)者近上、消費(fèi)者組構(gòu)成剔宪,當(dāng)前還包括zookeeper

生產(chǎn)者負(fù)責(zé)發(fā)送消息

broker負(fù)責(zé)緩沖消息,broker中可以創(chuàng)建topic壹无,每個topic又有partition和replication的概念

消費(fèi)者組負(fù)責(zé)處理消息葱绒,同一個消費(fèi)者組的中消費(fèi)者不能消費(fèi)同一個partition中的數(shù)據(jù),消費(fèi)者組主要是提高消費(fèi)能力斗锭,比如之前是一個消費(fèi)者消費(fèi)100條數(shù)據(jù)地淀,現(xiàn)在是2個消費(fèi)者消費(fèi)100條數(shù)據(jù),可以提高消費(fèi)能力岖是;所以消費(fèi)者組的消費(fèi)者的個數(shù)要小于partition的個數(shù)帮毁,不然就會有消費(fèi)者沒有partition可以消費(fèi),造成資源的浪費(fèi)

注:但是不同的消費(fèi)者組的消費(fèi)者是可以消費(fèi)相同的partition數(shù)據(jù)

Kakfa如果要組件集群豺撑,則只需要注冊到一個zk中就可以了烈疚,zk中還保留消息消費(fèi)的進(jìn)度或者說偏移量或者消費(fèi)位置

0.9版本之前偏移量存儲在zk

0.9版本之后偏移量存儲在kafka中,kafka定義了一個系統(tǒng)的topic前硫,專用用來存儲偏移量的數(shù)據(jù)胞得;

為什么要改?主要是考慮到頻繁更改偏移量,對zk 的壓力較大阶剑,而且kafka 本身自己的處理也較復(fù)雜

1.4跃巡、kafka安裝

A、Kafka的安裝只需要解壓安裝包就可以完成安裝

    tar -zxvf kafka_2.11-2.1.1.tgz -C /usr/local/

B牧愁、查看配置文件

    [root@es1 config]# pwd
    /usr/local/kafka/config
    [root@es1 config]# ll
    total 84
    -rw-r--r--. 1 root root  906 Feb  8  2019 connect-console-sink.properties
    -rw-r--r--. 1 root root  909 Feb  8  2019 connect-console-source.properties
    -rw-r--r--. 1 root root 5321 Feb  8  2019 connect-distributed.properties
    -rw-r--r--. 1 root root  883 Feb  8  2019 connect-file-sink.properties
    -rw-r--r--. 1 root root  881 Feb  8  2019 connect-file-source.properties
    -rw-r--r--. 1 root root 1111 Feb  8  2019 connect-log4j.properties
    -rw-r--r--. 1 root root 2262 Feb  8  2019 connect-standalone.properties
    -rw-r--r--. 1 root root 1221 Feb  8  2019 consumer.properties
    -rw-r--r--. 1 root root 4727 Feb  8  2019 log4j.properties
    -rw-r--r--. 1 root root 1925 Feb  8  2019 producer.properties
    -rw-r--r--. 1 root root 6865 Jan 16 22:00 server-1.properties
    -rw-r--r--. 1 root root 6865 Jan 16 22:00 server-2.properties
    -rw-r--r--. 1 root root 6873 Jan 16 03:57 server.properties
    -rw-r--r--. 1 root root 1032 Feb  8  2019 tools-log4j.properties
    -rw-r--r--. 1 root root 1169 Feb  8  2019 trogdor.conf
    -rw-r--r--. 1 root root 1023 Feb  8  2019 zookeeper.properties

C素邪、修改配置文件server.properties

設(shè)置broker.id 這個是kafka集群區(qū)分每個節(jié)點(diǎn)的唯一標(biāo)志符

image

D、設(shè)置kafka的數(shù)據(jù)存儲路徑

image

注:這個目錄下不能有其他非kafka的目錄猪半,不然會導(dǎo)致kafka集群無法啟動

E兔朦、設(shè)置是否可以刪除topic,默認(rèn)情況先kafka的topic是不允許刪除的

image

F磨确、Kafka的數(shù)據(jù)保留的時間沽甥,默認(rèn)是7天

image

G、Log文件最大的大小乏奥,如果log文件超過1g會創(chuàng)建一個新的文件

image
image

H摆舟、Kafka連接的zk的地址和連接kafka的超時時間

image

J、默認(rèn)的partition的個數(shù)

image

1.5邓了、啟動kafka

A恨诱、啟動方式1,kafka只能單節(jié)點(diǎn)啟動骗炉,所以每個kakfa節(jié)點(diǎn)都需要手動啟動照宝,下面的方式阻塞的方式啟動

image

B、啟動方式2句葵,守護(hù)的方式啟動厕鹃,推薦

image

1.6、kafka操作

A笼呆、查看當(dāng)前kafka集群已有的topic

image

注意:這里連接的zookeeper熊响,而不是連接的kafka

B、創(chuàng)建topic诗赌,指定分片和副本個數(shù)

image

注:

replication-factor:副本數(shù)

replication-factor:分區(qū)數(shù)

Topic:主題名

如果當(dāng)前kafka集群只有3個broker節(jié)點(diǎn)汗茄,則replication-factor最大就是3了,下面的例子創(chuàng)建副本為4铭若,則會報錯

image

C洪碳、刪除topic

image

D、查看topic信息

image
image

1.7叼屠、啟動生產(chǎn)者生產(chǎn)消息瞳腌,kafka自帶一個生產(chǎn)者和消費(fèi)者的客戶端

A、啟動一個生產(chǎn)者镜雨,注意此時連的9092端口嫂侍,連接的kafka集群

image

B、啟動一個消費(fèi)者,注意此時連接的還是9092端口挑宠,在0.9版本之前連接的還是2181端口

image

這里我們啟動2個消費(fèi)者來測試一下

image

注:如果不指定的消費(fèi)者組的配置文件的話菲盾,默認(rèn)每個消費(fèi)者都屬于不同的消費(fèi)者組

C、發(fā)送消息各淀,可以看到每個消費(fèi)者都能收到消息

image
image
image

D懒鉴、Kakfa中的實(shí)際的數(shù)據(jù)

image
image

二、kafka架構(gòu)深入

image

Kafka不能保證消息的全局有序碎浇,只能保證消息在partition內(nèi)有序临谱,因?yàn)橄M(fèi)者消費(fèi)消息是在不同的partition中隨機(jī)的

2.1、kafka的工作流程

Kafka中的消息是以topic進(jìn)行分類的奴璃,生產(chǎn)者生成消息悉默,消費(fèi)者消費(fèi)消息,都是面向topic的

image

Topic是一個邏輯上的概念溺健,而partition是物理上的概念

每個partition又有副本的概念

每個partition對應(yīng)于一個log文件麦牺,該log文件中存儲的就是生產(chǎn)者生成的數(shù)據(jù),生產(chǎn)者生成的數(shù)據(jù)會不斷的追加到該log的文件末端鞭缭,且每條數(shù)據(jù)都有自己的offset,消費(fèi)者都會實(shí)時記錄自己消費(fèi)到了那個offset魏颓,以便出錯的時候從上次的位置繼續(xù)消費(fèi)岭辣,這個offset就保存在index文件中

kafka的offset是分區(qū)內(nèi)有序的,但是在不同分區(qū)中是無順序的甸饱,kafka不保證數(shù)據(jù)的全局有序

2.2沦童、kafka原理

由于生產(chǎn)者生產(chǎn)的消息會不斷追加到log文件的末尾,為防止log文件過大導(dǎo)致數(shù)據(jù)定位效率低下叹话,Kafka采用分片和索引的機(jī)制偷遗,將每個partition分為多個segment,每個segment對應(yīng)2個文件
----index文件和log文件驼壶,這2個文件位于一個相同的文件夾下氏豌,文件夾的命名規(guī)則為topic名稱+分區(qū)序號

image

Indx和log的文件的文件名是當(dāng)前這個索引是最小的數(shù)據(jù)的offset

Kafka如何快速的消費(fèi)數(shù)據(jù)呢?

image

Index文件中存儲的數(shù)據(jù)的索引信息热凹,第一列是offset泵喘,第二列這這個數(shù)據(jù)所對應(yīng)的log文件中的偏移量,就像我們?nèi)プx文件般妙,使用seek()設(shè)置當(dāng)前鼠標(biāo)的位置一樣纪铺,可以更快的找到數(shù)據(jù)

如果要去消費(fèi)offset為3的數(shù)據(jù),首先通過二分法找到數(shù)據(jù)在哪個index文件中碟渺,然后在通過index中offset找到數(shù)據(jù)在log文件中的offset鲜锚;這樣就可以快速的定位到數(shù)據(jù),并消費(fèi)

所以kakfa雖然把數(shù)據(jù)存儲在磁盤中,但是他的讀取速度還是非澄叻保快的

三旺隙、kafka的生產(chǎn)者和消費(fèi)者

3.1、kafka的生產(chǎn)者

Kafka的partition的分區(qū)的作用

Kafka的分區(qū)的原因主要就是提供并發(fā)提高性能浆洗,因?yàn)樽x寫是partition為單位讀寫的催束;

那生產(chǎn)者發(fā)送消息是發(fā)送到哪個partition中呢?

A伏社、在客戶端中指定partition

B抠刺、輪詢(推薦)消息1去p1,消息2去p2摘昌,消息3去p3速妖,消息4去p1,消息5去p2聪黎,消息6去p3 罕容。。稿饰。锦秒。。喉镰。旅择。

3.2 kafka如何保證數(shù)據(jù)可靠性呢?通過ack來保證

為保證生產(chǎn)者發(fā)送的數(shù)據(jù)侣姆,能可靠的發(fā)送到指定的topic生真,topic的每個partition收到生產(chǎn)者發(fā)送的數(shù)據(jù)后,都需要向生產(chǎn)者發(fā)送ack(確認(rèn)收到),如果生產(chǎn)者收到ack,就會進(jìn)行下一輪的發(fā)送惜傲,否則重新發(fā)送數(shù)據(jù)

image
image

那么kafka什么時候向生產(chǎn)者發(fā)送ack

確保follower和leader同步完成话速,leader在發(fā)送ack給生產(chǎn)者,這樣才能確保leader掛掉之后,能再follower中選舉出新的leader后,數(shù)據(jù)不會丟失

那多少個follower同步完成后發(fā)送ack

方案1:半數(shù)已經(jīng)完成同步,就發(fā)送ack

方案2:全部完成同步痰哨,才發(fā)送ack(kafka采用這種方式)

采用第二種方案后,設(shè)想以下場景匾嘱,leader收到數(shù)據(jù)斤斧,所有的follower都開始同步數(shù)據(jù),但是有一個follower因?yàn)槟撤N故障霎烙,一直無法完成同步撬讽,那leader就要一直等下蕊连,直到他同步完成,才能發(fā)送ack游昼,這樣就非常影響效率甘苍,這個問題怎么解決?

image

Leader維護(hù)了一個動態(tài)的ISR列表(同步副本的作用)烘豌,只需要這個列表的中的follower和leader同步载庭;當(dāng)ISR中的follower完成數(shù)據(jù)的同步之后,leader就會給生產(chǎn)者發(fā)送ack廊佩,如果follower長時間未向leader同步數(shù)據(jù)囚聚,則該follower將被剔除ISR,這個時間閾值也是自定義的标锄;同樣leader故障后顽铸,就會從ISR中選舉新的leader

怎么選擇ISR的節(jié)點(diǎn)呢?

首先通信的時間要快料皇,要和leader要可以很快的完成通信谓松,這個時間默認(rèn)是10s

然后就看leader數(shù)據(jù)差距,消息條數(shù)默認(rèn)是10000條(后面版本被移除)

為什么移除:因?yàn)閗afka發(fā)送消息是批量發(fā)送的践剂,所以會一瞬間leader接受完成鬼譬,但是follower還沒有拉取,所以會頻繁的踢出加入ISR逊脯,這個數(shù)據(jù)會保存到zk和內(nèi)存中拧簸,所以會頻繁的更新zk和內(nèi)存。

但是對于某些不太重要的數(shù)據(jù)男窟,對數(shù)據(jù)的可靠性要求不是很高,能夠容忍數(shù)據(jù)的少量丟失贾富,所以沒必要等ISR中的follower全部接受成功

所以kafka為用戶提供了三種可靠性級別歉眷,用戶可以根據(jù)可靠性和延遲進(jìn)行權(quán)衡,這個設(shè)置在kafka的生成中設(shè)置:acks參數(shù)設(shè)置

A颤枪、acks為0

生產(chǎn)者不等ack汗捡,只管往topic丟數(shù)據(jù)就可以了,這個丟數(shù)據(jù)的概率非常高

B畏纲、ack為1

Leader落盤后就會返回ack扇住,會有數(shù)據(jù)丟失的現(xiàn)象,如果leader在同步完成后出現(xiàn)故障盗胀,則會出現(xiàn)數(shù)據(jù)丟失

C艘蹋、ack為-1(all)

Leader和follower(ISR)落盤才會返回ack,會有數(shù)據(jù)重復(fù)現(xiàn)象票灰,如果在leader已經(jīng)寫完成女阀,且follower同步完成宅荤,但是在返回ack的出現(xiàn)故障,則會出現(xiàn)數(shù)據(jù)重復(fù)現(xiàn)象浸策;極限情況下冯键,這個也會有數(shù)據(jù)丟失的情況,比如follower和leader通信都很慢庸汗,所以ISR中只有一個leader節(jié)點(diǎn)惫确,這個時候,leader完成落盤蚯舱,就會返回ack改化,如果此時leader故障后,就會導(dǎo)致丟失數(shù)據(jù)

3.3 Kafka如何保證消費(fèi)數(shù)據(jù)的一致性晓淀?通過HW來保證

image

LEO:指每個follower的最大的offset

HW(高水位):指消費(fèi)者能見到的最大的offset所袁,LSR隊(duì)列中最小的LEO,也就是說消費(fèi)者只能看到1~6的數(shù)據(jù)凶掰,后面的數(shù)據(jù)看不到燥爷,也消費(fèi)不了

避免leader掛掉后,比如當(dāng)前消費(fèi)者消費(fèi)8這條數(shù)據(jù)后懦窘,leader掛
了前翎,此時比如f2成為leader,f2根本就沒有9這條數(shù)據(jù)畅涂,那么消費(fèi)者就會報錯港华,所以設(shè)計(jì)了HW這個參數(shù),只暴露最少的數(shù)據(jù)給消費(fèi)者午衰,避免上面的問題

3.3.1立宜、HW保證數(shù)據(jù)存儲的一致性

A、Follower故障

Follower發(fā)生故障后會被臨時提出LSR臊岸,待該follower恢復(fù)后橙数,follower會讀取本地的磁盤記錄的上次的HW,并將該log文件高于HW的部分截取掉帅戒,從HW開始想leader進(jìn)行同步灯帮,等該follower的LEO大于等于該P(yáng)artition的hw,即follower追上leader后逻住,就可以重新加入LSR

B钟哥、Leader故障

Leader發(fā)生故障后,會從ISR中選出一個新的leader瞎访,之后腻贰,為了保證多個副本之間的數(shù)據(jù)一致性,其余的follower會先將各自的log文件高于hw的部分截掉(新leader自己不會截掉)装诡,然后從新的leader同步數(shù)據(jù)

注意:這個是為了保證多個副本間的數(shù)據(jù)存儲的一致性银受,并不能保證數(shù)據(jù)不丟失或者不重復(fù)

3.3.2精準(zhǔn)一次(冪等性)践盼,保證數(shù)據(jù)不重復(fù)

Ack設(shè)置為-1,則可以保證數(shù)據(jù)不丟失宾巍,但是會出現(xiàn)數(shù)據(jù)重復(fù)(at least once)

Ack設(shè)置為0咕幻,則可以保證數(shù)據(jù)不重復(fù),但是不能保證數(shù)據(jù)不丟失(at most once)

但是如果魚和熊掌兼得顶霞,該怎么辦肄程?這個時候就就引入了Exactl once(精準(zhǔn)一次)

在0.11版本后,引入冪等性解決kakfa集群內(nèi)部的數(shù)據(jù)重復(fù)选浑,在0.11版本之前蓝厌,在消費(fèi)者處自己做處理

如果啟用了冪等性,則ack默認(rèn)就是-1古徒,kafka就會為每個生產(chǎn)者分配一個pid拓提,并未每條消息分配seqnumber,如果pid隧膘、partition代态、seqnumber三者一樣,則kafka認(rèn)為是重復(fù)數(shù)據(jù)疹吃,就不會落盤保存蹦疑;但是如果生產(chǎn)者掛掉后,也會出現(xiàn)有數(shù)據(jù)重復(fù)的現(xiàn)象萨驶;所以冪等性解決在單次會話的單個分區(qū)的數(shù)據(jù)重復(fù)歉摧,但是在分區(qū)間或者跨會話的是數(shù)據(jù)重復(fù)的是無法解決的

3.4 kafka的消費(fèi)者

3.4.1 消費(fèi)方式

消息隊(duì)列有兩種消費(fèi)消息的方式,push(微信公眾號)腔呜、pull(kafka)叁温,push模式很難適應(yīng)消費(fèi)速率不同的消費(fèi)者,因?yàn)橄M(fèi)發(fā)送速率是由broker決定的核畴,他的目標(biāo)是盡可能以最快的的速度傳遞消息券盅,但是這樣很容易造成消費(fèi)者來不及處理消息,典型的表現(xiàn)就是拒絕服務(wù)以及網(wǎng)絡(luò)擁塞膛檀。而pull的方式可以消費(fèi)者的消費(fèi)能力以適當(dāng)?shù)乃俾氏M(fèi)消息

Pull的模式不足之處是如果kafka沒有數(shù)據(jù),消費(fèi)者可能會陷入死循環(huán)娘侍,一直返回空數(shù)據(jù)咖刃,針對這一點(diǎn),kafka的消費(fèi)者在消費(fèi)數(shù)據(jù)時候回傳遞一個timeout參數(shù)憾筏,如果當(dāng)時沒有數(shù)據(jù)可供消費(fèi)嚎杨,消費(fèi)者會等待一段時間在返回

3.4.2 分區(qū)分配策略

一個消費(fèi)者組有多個消費(fèi)者,一個topic有多個partition氧腰。所以必然會涉及到partition的分配問題枫浙,即確定哪個partition由哪個消費(fèi)者來消費(fèi)

Kafka提供兩種方式刨肃,一種是輪詢(RountRobin)對于topic組生效,一種是(Range)對于單個topic生效

輪訓(xùn):前置條件是需要一個消費(fèi)者里的消費(fèi)者訂閱的是相同的topic箩帚。不然就會出現(xiàn)問題真友;非默認(rèn)的的方式

同一個消費(fèi)者組里的消費(fèi)者不能同時消費(fèi)同一個分區(qū)

比如三個消費(fèi)者消費(fèi)一個topic的9個分區(qū)

image
image

如果一個消費(fèi)者組里有2個消費(fèi)者,這個消費(fèi)者組里同時消費(fèi)2個topic紧帕,每個topic又有三個partition

首先會把2個topic當(dāng)做一個主題盔然,然后根據(jù)topic和partition做hash,然后在按照hash排序是嗜。然后輪訓(xùn)分配給一個消費(fèi)者組中的2個消費(fèi)者

如果是下面這樣的方式訂閱的呢愈案?

比如有3個topic,每個topic有3個partition鹅搪,一個消費(fèi)者組中有2個消費(fèi)者站绪。消費(fèi)者1訂閱topic1和topic2,消費(fèi)者2訂閱topic2和topic3丽柿,那么這樣的場景恢准,使用輪訓(xùn)的方式訂閱topic就會有問題

如果是下面這種方式訂閱呢

比如有2個topic,每個topic有3個partition航厚,一個消費(fèi)者組
有2個消費(fèi)者顷歌,消費(fèi)者1訂閱topic1,消費(fèi)者2訂閱topic2幔睬,這樣使用輪訓(xùn)的方式訂閱topic也會有問題

所以我們一直強(qiáng)調(diào)眯漩,使用輪訓(xùn)的方式訂閱topic的前提是一個消費(fèi)者組中的所有消費(fèi)者訂閱的主題是一樣的;

所以輪訓(xùn)的方式不是kafka默認(rèn)的方式

Range:是按照單個topic來劃分的麻顶,默認(rèn)的分配方式

image
image

Range的問題會出現(xiàn)消費(fèi)者數(shù)據(jù)不均衡的問題

比如下面的例子赦抖,一個消費(fèi)者組訂閱了2個topic,就會出現(xiàn)消費(fèi)者1消費(fèi)4個partition辅肾,而另外一個消費(fèi)者只消費(fèi)2個partition

image

分區(qū)策略什么時候會觸發(fā)呢队萤?當(dāng)消費(fèi)者組里的消費(fèi)者個數(shù)變化的時候,會觸發(fā)分區(qū)策略調(diào)整矫钓,比如消費(fèi)者里增加消費(fèi)者要尔,或者減少消費(fèi)者

3.4.3 offset的維護(hù)

由于消費(fèi)者在消費(fèi)過程中可能會出現(xiàn)斷電宕機(jī)等故障,消費(fèi)者恢復(fù)后新娜,需要從故障前的位置繼續(xù)消費(fèi)赵辕,所以消費(fèi)者需要實(shí)施記錄自己消費(fèi)哪個offset,以便故障恢復(fù)后繼續(xù)消費(fèi)

Offset保存的位置有2個概龄,一個zk还惠,一個是kafka

首先看下offset保存到zk

由消費(fèi)者組、topic私杜、partition三個元素確定唯一的offset

所以消費(fèi)者組中的某個消費(fèi)者掛掉之后蚕键,或者的消費(fèi)者還是可以拿到這個offset的

image

Controller這個節(jié)點(diǎn)和zk通信救欧,同步數(shù)據(jù),這個節(jié)點(diǎn)就是誰先起來锣光,誰就先注冊controller笆怠,誰就是controller。其他節(jié)點(diǎn)和controller信息保持同步

3.4.5嫉晶、消費(fèi)者組的案例

修改消費(fèi)者組id

image

啟動一個消費(fèi)者發(fā)送3條數(shù)據(jù)

image

指定消費(fèi)者組啟動消費(fèi)者骑疆,啟動三個消費(fèi)者,可以看到每個消費(fèi)者消費(fèi)了一條數(shù)據(jù)

image
image
image

在演示下不同組可以消費(fèi)同一個topic的替废,我們看到2個消費(fèi)者的消費(fèi)者都消費(fèi)到同一條數(shù)據(jù)

再次啟動一個消費(fèi)者箍铭,這個消費(fèi)者屬于另外一個消費(fèi)者組

image
image

四、Kafka的高效讀寫機(jī)制

4.1椎镣、分布式部署

多節(jié)點(diǎn)并行操作

4.2诈火、順序?qū)懘疟P

Kafka的producer生產(chǎn)數(shù)據(jù),要寫入到log文件中状答,寫的過程中一直追加到文件末尾冷守,為順序?qū)懀倬W(wǎng)有數(shù)據(jù)表明惊科。同樣的磁盤拍摇,順序?qū)懩艿?00M/S,而隨機(jī)寫只有100K/S馆截。這與磁盤的機(jī)械結(jié)構(gòu)有關(guān)充活,順序?qū)懼钥欤且驗(yàn)槠涫∪チ舜罅看蓬^尋址的時間

4.3蜡娶、零復(fù)制技術(shù)

正常情況下混卵,先把數(shù)據(jù)讀到內(nèi)核空間,在從內(nèi)核空間把數(shù)據(jù)讀到用戶空間窖张,然后在調(diào)操作系統(tǒng)的io接口寫到內(nèi)核空間幕随,最終在寫到硬盤中

image

Kafka是這樣做的,直接在內(nèi)核空間流轉(zhuǎn)io流宿接,所以kafka的性能非常高

image

五赘淮、 zookeeper在kafka中的作用

Kafka集群中有一個broker會被選舉為controller,負(fù)責(zé)管理集群broker的上下線睦霎,所有的topic的分區(qū)副本分配和leader選舉等工作

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拥知,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碎赢,更是在濱河造成了極大的恐慌,老刑警劉巖速梗,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肮塞,死亡現(xiàn)場離奇詭異襟齿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)枕赵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門猜欺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拷窜,你說我怎么就攤上這事开皿。” “怎么了篮昧?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵赋荆,是天一觀的道長。 經(jīng)常有香客問我懊昨,道長窄潭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任酵颁,我火速辦了婚禮嫉你,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躏惋。我一直安慰自己幽污,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布簿姨。 她就那樣靜靜地躺著距误,像睡著了一般。 火紅的嫁衣襯著肌膚如雪款熬。 梳的紋絲不亂的頭發(fā)上深寥,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音贤牛,去河邊找鬼惋鹅。 笑死,一個胖子當(dāng)著我的面吹牛殉簸,可吹牛的內(nèi)容都是我干的闰集。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼般卑,長吁一口氣:“原來是場噩夢啊……” “哼武鲁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蝠检,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沐鼠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饲梭,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乘盖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了憔涉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片订框。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兜叨,靈堂內(nèi)的尸體忽然破棺而出穿扳,到底是詐尸還是另有隱情,我是刑警寧澤国旷,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布矛物,位于F島的核電站,受9級特大地震影響议街,放射性物質(zhì)發(fā)生泄漏泽谨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一特漩、第九天 我趴在偏房一處隱蔽的房頂上張望吧雹。 院中可真熱鬧,春花似錦涂身、人聲如沸雄卷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丁鹉。三九已至,卻和暖如春悴能,著一層夾襖步出監(jiān)牢的瞬間揣钦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工漠酿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冯凹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓炒嘲,卻偏偏與公主長得像宇姚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夫凸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348