1. 程式人生 > >kafka學習筆記2

kafka學習筆記2

1、kafka分散式的情況下如何保證訊息的順序性

kafka並不適用對資料時序性要求嚴格的場景

Kafka的做法是提供訊息佇列,讓生產者單往佇列的末尾新增資料,讓多個消費者從佇列裡面依次讀取資料然後自行處理

【生產】kafka的分散式單位是partition。同一個partition內的資料可以保證時序。不同partition之間無法保證訊息的順序性。可以設定producer生產message的key值,同一個key會追加到同一個partition上,故可保證同一個producer的訊息的時序性

2、一個consumer group可以消費多個topic。一個topic可以被多個consumer group消費。

一個message只能被同一個consumer group中的consumer消費一次。

消費最優是consumer group中的partition數量和consumer group中的數量相同。

3、high level api和offset是由zookeeper維護。low level api和offset是由consumer自己維護

4、kafka的消費理念是at last once。新啟動的consumer group預設從partition的頭位置開始讀取資料。kafka consumer預設是處理完message再commit。

5、consumer blance的觸發條件是:(1)consumer的增加和刪除 (2)broker的增加或減少

6、kafka produce無需儲存offset狀態,offset保證自增就ok了。produce message時無需制定partition,kafka會把收到的message進行load balance,按照hash(message key)%partition數量的方式,將message均勻的分佈在topic所有的partition

7、 Partition Replica中存在一個leader和若干follower。produce會把資料傳送到leader,leader再將資料傳送到各個follower

8、producer在將message傳送到某個partition時,首先通過zookeeper找到該partition的leader,向leader傳送訊息。每個follower都從leader pull訊息,follower在收到訊息之後馬上傳送ack給leader。leader一旦收到isr中所有replica的ack後,該訊息就被認為commited了,leader將會向producer傳送ack確認

9、如果某個broker宕機或者落後太多,則會被移除isr。isr這種機制並非完全的同步機制(移除isr的broker則不會繼續同步),也並非單純的非同步複製(如果leader和follower資料差距巨大,切換leader時會造成資料丟失)

10、producer可設定是否等待leader的確認ack