1. 程式人生 > >Kafka 學習筆記(4)—— Kafka總結

Kafka 學習筆記(4)—— Kafka總結

1 Kafka 是什麼

  • 類似JMS訊息佇列,結合JMS中的兩種模式,可以有多個消費者主動拉取資料,在JMS中只有點對點模式才有消費者拉取資料。
  • kafka 是一個生產-消費模型。
  • Producer:生產者,只負責資料生產,生產者的程式碼可以整合到任務系統中,資料的分發策略由producer 決定,預設是 defaultPatition ,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 可以設定多個副本(replication-factor 1),會從所有的副本中選取一個leader來進行。這和 mysql 中的主從有區別,mysql 做主從是為了讀寫分離,在kafka中讀寫操作都是 leader
  • consumer ,可以有多個,每個 consumer 消費的資料都是一樣的。
  • ConsumerGroup,可以有多個,每個ConsumerGroup消費的資料都是一樣的。 可以把多個consumer 執行緒劃分為一個組,組裡面所有成員共同消費一個 topic 的資料,組員之間不能重複消費。

2 Kafka 生產資料時的分組策略

  • 預設是 defaultPatition ,Utils.abs(key.hashCode) % numPartitions
  • key 是 producer 傳送資料時傳入的,produer.send(KeyedMessage(topic,myPartitionKey,messageContent))

3 Kafka 如何保證資料的完全生產

  • ack 機制,broker 表示發來的資料已確認接收無誤,表示資料已經存到磁碟。
  • 0 : 不等待 broker 返回確認訊息
  • 1: 等待 topic 中某個 partition leader 儲存成功的狀態反饋
  • -1 : 等待 topic 中某個partition 所有副本都儲存成功的狀態反饋

4 broker 如何 儲存資料

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

5 broker 和 partition 的關係

int i = 0
	list{kafka01,kafka02,kafka03}
	
	for(int i=0;i<5;i++){
		brIndex = i%broker;
		hostName = list.get(brIndex)
	}

6 consumerGroup 的組員 和 partition之間如何負載均衡

最好是一一對應。如果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)]

7 如何保證 kafka 消費者消費資料的全域性有序

如果要保證消費有序,必須保證生產有序,儲存有序,消費有序。 由於生產可以叢集,儲存就可以分片,消費可以設定為一個 consumerGroup ,要保證全域性有序,就需要保證每個環節都有序。只有一個可能,就是一個生產者,一個 partition,一個消費者,這種場景和大資料應用場景相悖。