4.分割槽的目的是為了提高併發讀寫和增加集群的可擴充套件性
(後續可以加分割槽/加機器提高集群效能…)
5.分割槽會有副本,副本的作用是為了提高資料的安全性
6.如何確認訊息傳送成功?–使用acks訊息確認應答機制
7.訊息的有序性:kafka只保證從同乙個分割槽消費的訊息,是按照offset,有序的, 不保證多個分區間有序
2.當某個主題的某個分割槽的資料夾下的檔案太大了,就會生成新的segment分段檔案
,目的也是為了提高後續的讀效率
,注意: 訊息新增到segment分段檔案是追加進去的, 也就是順序寫
3.訊息日誌檔案不是一直儲存
的,可以根據配置的策略進行自動刪除
4.如果資料足夠多, 新來乙個消費者要從指定的offset去消費訊息,該如何尋找?
比如:要查詢絕對offset為7的message:
5.部分元資料在zk中的儲存
3.消費完如何提交?–由enable.auto.commit引數決定
4.了解–手動提交時可以根據業務自己決定如何提交
//準備乙個集合,存放消費到的資料,集合的size大於一定數量的時候,也就是積攢到一批的時候,才提交偏移量
arraylist
> list =
newarraylist()
;while
(true
)//todo 5.手動提交偏移量
//經過上面的迴圈,list中就有了一批資料,如果list.size>5,就提交偏移量
if(list.
size()
>5)
}try
long lastoffset = partitionrecords.
get(partitionrecords.
size()
-1).
offset()
; consumer.
commitsync
(collections.
singletonmap
(partition,
newoffsetandmetadata
(lastoffset +1)
));}
}}
5.了解-可以訂閱主題進行消費,也可以訂閱主題的指定分割槽進行消費
//todo 3.訂閱主題
"foo"));
//todo 3.訂閱主題的部分分割槽
//手動指定 消費指定分割槽的資料---start
string topic =
"foo"
;topicpartition partition0 =
newtopicpartition
(topic,0)
;topicpartition partition1 =
newtopicpartition
(topic,1)
;consumer.
assign
(arrays.
aslist
(partition0, partition1));
//手動指定 消費指定分割槽的資料---end
while
(true)}
//subscribe方法和assign方法只能選乙個
KAFKA原理簡介
每條訊息在檔案中的位置成為offset 偏移量 offset為long型數字。過後無論是否被消費,都會被清楚。consumer儲存消費資訊的offset。kafka通過partition將日誌內容分散到多個server上,每個partition都會被 當前server儲存,kafka可以配置part...
Kafka複製原理
每個主題都有多個分割槽 每個分割槽都會有自己的多個副本 每個分割槽與自己的副本之間都會有乙個leader 同一主題下的不同分割槽包含的訊息不同 同一條訊息不會出現在多個分割槽中 由於訊息是以可追加的log日誌儲存到分割槽中的,多個分割槽順序寫磁碟的總效率要比隨機寫記憶體還要高 訊息被追加到分割槽日誌...
kafka 原理分析
partition是以檔案的形式儲存在檔案系統中,比如建立乙個名為firsttopic的topic,其中有3個 partition,那麼在kafka的資料目錄 tmp kafka log 中就有3個目錄,firsttopic 0 3,命名規則是 sh kafka topics.sh create z...