簡體   English   中英

在Kafka中生產之前獲取記錄的分區號

[英]Get the partition number of a record before producing in Kafka

我需要知道 Kafka 記錄所在的 Kafka 主題的分區號。

執行前

producer.send(record); 

有沒有辦法知道該記錄去哪個分區?

AFAIK 不可能使用默認的循環分區器。 如果您指定一個鍵,您可以從 Producer 源代碼中獲取默認算法並嘗試預測(它是一種hash(key) % num.partitions )如果您使用自定義分區器,則您處理它並且已經知道。 我想知道 ProducerInterceptor 但它在分配分區之前提供信息,正如您從文檔中看到的那樣。

https://kafka.apache.org/26/javadoc/org/apache/kafka/clients/producer/ProducerInterceptor.html

我在這里看到三個選項:

  • 您可以在 ProducerRecord 中指定分區,如ProducerRecord 類的構造函數中所示
  • 定義一個自定義分區器,如另一篇文章中所示
  • 利用名為DescribeTopicsResultAdminClient API 獲取有關特定主題的分區數量的信息,然后重新應用 Kafka 使用的默認分區器邏輯:
kafka.common.utils.Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;

暫無
暫無

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

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