Kafka系列二 kafka相關問題理解

2022-09-15 10:09:11 字數 1905 閱讀 6766

類jms訊息佇列,結合jms中的兩種模式,可以有多個消費者主動拉取資料,在jms中只有點對點模式才有消費者主動拉取資料。 kafka是乙個生產-消費模型。

producer:生產者,只負責資料生產,生產者的**可以整合到任何系統中。資料的分發策略由producer決定,預設是defaultpartition utils.abs(key.hashcode)%numpartitions.

broker;當前伺服器上的kafka程序,俗稱拉皮條。只管資料儲存,不管是誰消費。在集群中每個broker都有乙個唯一的brokerid,不得重複。

topic:目標傳送的目的地,這是乙個邏輯上的概念,落到磁碟上是乙個partition的目錄。partition的目錄中有多個segment組合(index,log)

乙個topic對應多個partition[0,1,2,3],乙個partition對應多個segment組合。乙個segment有預設的大小是1g。

每個partition可以設定多個副本,會從所有的副本中選取乙個leader出來。所有讀寫操作都是通過leader來進行的。特別強調,和mysql中主從有區別,mysql做主從是為了讀寫分離,在kafka中讀寫操作都是leader。

consumer:資料消費者,consumer可以有多個,每個consumer消費的資料都是一樣的。

consumergroup;可以把多個consumer執行緒劃分為乙個組,組裡面所有成員共同消費乙個topic的資料,組員之間不能重複訊息。

預設是defaultpartition utils.abs(key.hashcode)%numpartitions.

上文中的key是producer在傳送資料時傳入的,producer.send(keymessage(topic,mypartitionkey,messagecontent))

ack機制:broker表示發來的資料已確認接收無誤,表示資料已經儲存到磁碟。

0 :不等待broker返回確認資訊。

1 :等待topic中某個partition leader儲存成功的狀態反饋。

-1:等待topic中某個partiton 所有副本都儲存成功的狀態反饋

在理論環境下,broker按照順序讀寫的機制,可以每秒儲存600m的資料。主要通過pagecache機制,盡可能的利用當前物理機器上的空閒記憶體來做快取。當前topic所屬的broker,必定有乙個該topic的partition,partition是乙個磁碟目錄。partition的目錄中有多個segment組合(index,log)

list(kafka01,kafka02,kafka03)//

broker列表

int partitions=4;//

partitions個數

for(int i=0;i)

最好是一一對應,乙個partition對應乙個consumer。如果consumer的數量過多,必然有空閒的consumer

演算法:假如topic1,具有如下partitions: p0,p1,p2,p3

加入group中,有如下consumer: c1,c2

首先根據partition索引號對partitions排序: p0,p1,p2,p3

根據consumer.id排序: c0,c1

計算倍數: m = [p0,p1,p2,p3].size / [c0,c1].size,本例值m=2(向上取整)

然後依次分配partitions: c0 = [p0,p1],c1=[p2,p3],即ci = [p(i * m),p((i + 1) * m -1)]

偽命題如果要保證消費有序,必須保證生產有序,儲存有序,消費有序。

由於生產可以做集群,儲存可以分片,消費可以設定為乙個consumergroup,就需要全域性全域性有序,就需要保證每個環節都有序。

只有乙個可能,就是乙個生產者,乙個partition,乙個消費者。這種場景和大資料應用相悖。

kafka入門系列二

在入門 系列一,我進行了單節點的安裝,本文我將安裝多節點的集群。在kafka中,乙個broker就是集群中的乙個節點,而我們在乙個kafka中可以啟動多個broker,所以一台機器,裝乙個kafka,通過啟動多個broker的形式,就可以建乙個集群。下面我一步步演示 1.配置多個broker,這個主...

Kafka總結系列(二)

kafka高度依賴於檔案系統來儲存和快取訊息。對於磁碟的正確認識 對磁碟的線性讀寫比隨機讀寫快很多倍,且有研究表明 對磁碟的線性讀寫在有些情況下可以比記憶體的隨機訪問要更快!在訊息佇列系統中,如果磁碟的因素被排除之後 線性讀寫磁碟的速度並不那麼慢 還有兩個原因會導致inefficiency 太多io...

Kafka系列1 Kafka安裝與相關命令

單節點kafka安裝 解壓kafka 執行zookeeper 必須 執行zookeeper 修改kafka配置檔案 broker.id 0 port 9092 log.dir tmp kafka logs 0 zookeeper.connect 192.168.60.81 2181,192.168....