topic
在kafka中訊息是按照topic進行分類的;每條發布到kafka集群的訊息都有乙個類別,這個類別被稱為topic
parition
乙個topic可以配置幾個parition,每乙個分割槽都是乙個順序的、不可變的訊息佇列, 並且可以持續的新增。分割槽中的訊息都被分了乙個序列號,稱之為偏移量(offset),在每個分割槽中此偏移量都是唯一的,如下圖:
producer能指定將此訊息傳送到哪個parition(也可以採取隨機、雜湊、輪訓等策略):
producer傳送訊息到broker時,會根據paritition機制選擇將其儲存到哪乙個partition。如果partition機制設定合理,所有訊息可以均勻分布到不同的partition裡,這樣就實現了負載均衡。如果乙個topic對應乙個檔案,那這個檔案所在的機器i/o將會成為這個topic的效能瓶頸,而有了partition後,不同的訊息可以並行寫入不同broker的不同partition裡,極大的提高了吞吐率。
consumer group
producer傳送的訊息分發到不同的parition中,consumer接受資料的時候是按照group來接受,kafka確保每個parition只能同乙個group中的同乙個consumer消費,如果想要重複消費,那麼需要其他的組來消費
consumer group是kafka提供的可擴充套件且具有容錯性的消費者機制。既然是乙個組,那麼組內必然可以有多個消費者或消費者例項(consumer instance),它們共享乙個公共的id,即group id。組內的所有消費者協調在一起來消費訂閱主題(subscribed topics)的所有分割槽(partition)。當然,每個分割槽只能由同乙個消費組內的乙個consumer來消費。
consumer group特性:
消費者位置(consumer position)
很多訊息引擎都把這部分資訊儲存在伺服器端(broker端)。這樣做的好處當然是實現簡單,但會有三個主要的問題:
而kafka選擇了不同的方式:每個consumer group儲存自己的位移資訊,那麼只需要簡單的乙個整數表示位置就夠了;同時可以引入checkpoint機制定期持久化,簡化了應答機制的實現。
老版本的位移是提交到zookeeper中的,目錄結構是:/consumers//offsets//,但是zookeeper其實並不適合進行大批量的讀寫操作,尤其是寫操作。因此kafka提供了另一種解決方案:增加__consumeroffsets topic,將offset資訊寫入這個topic,擺脫對zookeeper的依賴(指儲存offset這件事情)。__consumer_offsets中的訊息儲存了每個consumer group某一時刻提交的offset資訊。
Hive入門(二)分割槽
hive查詢中一般會掃瞄整個表內容,會消耗很多時間。有時候只需要查詢表中的一部分資料,因此建表時引入了partition 分割槽 概念。表中的乙個 partition 對應於表下的乙個目錄,所有的 partition 的資料都儲存在對應的目錄中,因此,使用分割槽,很容易對資料進行部分查詢。注意 建立...
hive計畫(二)分割槽
使用hive e 可以執行多條語句 hive e sentence1 sentence2 進入hive 後檢視當前路徑 pwd hive 介面使用命令檢視hdfs路徑 dfs ls 使用desc可以檢視表的資訊 desc 檢視分割槽表的分割槽資訊 show partitions一般分割槽資訊不存在於...
二分查詢 二分區間 快速冪(二分冪)
include include using namespace std 二分查詢 初始區間 0,n 1 intbinarysearch int a,int left,int right,int x else return 1 二分 找出元素的區間左閉右開 初始區間 0,n intlower boun...