1. 程式人生 > 實用技巧 >kafka分割槽策略

kafka分割槽策略

  1. 每一條下訊息ProducerRecord由主題名稱、可選的分割槽號、可選的鍵和值組成
  2. 分割槽策略
    • 如果訊息ProducerRecord中指定了有效partition欄位,傳送記錄使用該partition
    • 如果訊息ProducerRecord中沒有指定partition欄位
      • 但指定key,則將使用key進行hash採用MurmurHash2演算法,具備高運算效能及低碰撞率)選擇一個分割槽
      • 且沒有key,則將已輪詢的方式分配一個分割槽
    • 注意:如果key不為null,那麼hash計算得到的分割槽號會是所有分割槽中的任意一個;如果key為null並且有可用分割槽,那麼計算得到的分割槽號僅為可用分割槽中的任意一個
  3. 自己定義分割槽策略
    • 隨機分割槽
      • 建立一個類,並繼承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算完取絕對值,在取模)
    • 輪詢分割槽
    • 分組分割槽