kafka分割槽策略
阿新 • • 發佈:2020-08-19
- 每一條下訊息ProducerRecord由主題名稱、可選的分割槽號、可選的鍵和值組成
- 分割槽策略
- 如果訊息ProducerRecord中指定了有效partition欄位,傳送記錄使用該partition
- 如果訊息ProducerRecord中沒有指定partition欄位
- 但指定key,則將使用key進行hash採用MurmurHash2演算法,具備高運算效能及低碰撞率)選擇一個分割槽
- 且沒有key,則將已輪詢的方式分配一個分割槽
- 注意:如果key不為null,那麼hash計算得到的分割槽號會是所有分割槽中的任意一個;如果key為null並且有可用分割槽,那麼計算得到的分割槽號僅為可用分割槽中的任意一個
- 自己定義分割槽策略
- 隨機分割槽
- 建立一個類,並繼承partitioner,改寫partition
- 再修改配置檔案partitioner.class=XXX._RandomPartitioner,啟動即可
- 或者prop.put("partition.class",XXX._RandomPartitioner.class)
public class _RandomPartitioner implements Partitioner{ public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster){ //獲取總的分割槽數 Integer partitionNum = cluster.partitionsForTopic(topic); // 隨機策略 int i = random.nextInt(partitionNum) return i } }
- hash分割槽(個人寫的話可以模擬下:hash算完取絕對值,在取模)
- 輪詢分割槽
- 分組分割槽
- 隨機分割槽