簡體   English   中英

Kafka Connect S3 Sink Connector 按 id 字段對大型主題進行分區

[英]Kafka Connect S3 Sink Connector Partitioning large topics by id field

過去幾周,我們一直致力於將 Kafka Connect 添加到我們的數據平台,並認為這將是一種將 Kafka 中的數據提取到 S3 數據湖中的有用方法。 我們已經使用 FieldPartitioner 和 TimeBasePartitioner 並看到了一些相當不錯的結果。

我們還需要按用戶 ID 進行分區 - 但是嘗試在用戶 ID 字段上使用 FieldPartitioner 后,連接器速度非常慢 - 尤其是與按日期分區等相比。我知道按 ID 分區會創建很多 output 分區因此不會那么快——這很好,但它需要能夠跟上生產者的步伐。

到目前為止,我們已經嘗試增加 memory 和堆 - 但我們通常不會看到任何 memory 問題,除非我們將 flush.size 增加到一個很大的數字。 我們還嘗試了小刷新大小、非常小和大的 rotate.schedule.interval.ms 配置。 我們還研究了網絡,但這似乎很好 - 使用其他分區器網絡保持正常。

在可能浪費大量時間之前,是否有人嘗試或成功通過 id 字段進行分區,尤其是在較大的主題上,使用 S3 Sink 連接器? 或者有沒有人在配置或設置方面有任何建議,可能是一個不錯的地方?

我不習慣 Kafka 的連接器,但我至少會嘗試提供幫助。

我不知道您是否可以將連接器配置為 kafka 主題的分區級別; 我假設這里有一些方法可以做到這一點。

一種可能的方法是專注於您的客戶向 Kafka 代理生產的步驟 我的建議是實現您自己的Partitioner ,以便“進一步”控制您希望在 kafka 方面發送數據的位置。

這是您的自定義分區器的示例/簡化。 例如,您的生產者發送的key具有以下格式: id_name_date 此自定義分區器嘗試提取第一個元素 ( id ),然后選擇所需的分區。

public class IdPartitioner implements Partitioner 
{       
   @Override
   public int partition(String topic, Object key, byte[] kb, 
                        Object v, byte[] vb, Cluster cl) 
   {
       try 
       {
         String pKey= (String) key;
         int id = Integer.parseInt(pKey.substring(0,pKey.indexOf("_")));
        
          /* getPartitionForId would decide which partition number corresponds
           for the received ID.You could also implement the logic directly here.*/

         return getPartitionForId(id);
       }
       catch (Exception e)
       {return 0;}
   }

   @Override
   public void close() 
   {
     //maybe some work here if needed
   }
}

即使您可能需要在KafkaConnect方面進行更多調整,我相信此選項可能會有所幫助。 假設您有一個包含 5 個分區的主題,並且getPartitionForId只是檢查 ID 的第一個數字以確定分區(為簡化起見,min Id 為 100,max Id 為 599 )。

因此,如果接收到的 key 是 fe: 123_tempdata_20201203 ,則分區方法將返回0 ,即第一個分區。

(圖像顯示 P1 而不是 P0 因為我相信這個例子看起來更自然,但請注意,第一個分區實際上定義為partition 0 。好吧,老實說,我在畫這個時忘記了 P0 並且沒有保存模板,所以我不得不尋找一個借口,比如:看起來更自然)。

簡化代理端分區

基本上,這將是 S3 上傳之前的預調整住宿

我知道這可能不是理想的答案,因為我不知道您系統的確切規格。 我的猜測是有可能將主題分區直接指向 s3 位置

如果沒有可能這樣做,至少我希望這可以給你一些進一步的想法。 干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM