簡體   English   中英

Kafka 流中的更改日志主題 - 設置或更改分區

[英]changelog topic in Kafka streams - setting or altering partitions

我們有一個 stream 處理器應用程序,它使用來自具有 n 個分區 (n > 1) 的主題的數據。

從新開始(沒有更新日志主題),開發環境總是創建一個包含 n 個分區的更新日志主題。

在相同的場景中,在生產環境中,分區數始終等於 1,然后我們手動更改為 n 以匹配主題的分區數。

我檢查了所有文檔,嘗試為更改日志設置分區數,但找不到任何方法。 我的最后一個選擇是檢查更改日志主題是否不存在,然后我使用 n 個分區創建它。

由於框架會自動創建該主題,是否有任何方法可以設置更改日志的分區數,而無需手動或在代碼中創建該主題?

PS:我們使用的是 Kafka 客戶端版本 2.3.1。

謝謝,

奧斯汀

我剛剛查看了源代碼以了解此功能的詳細信息,在撰寫本文時,事實證明設置change-logs主題的分區是不允許的。

解釋

change-logs主題被歸類為內部主題,並且在以下 2 個類( InternalTopicConfigInternalTopicManager )中有證據證明這一點:

  1. class InternalTopicConfig的源代碼包含以下方法,該方法還表示強制執行此類內部主題的分區數:

     public void setNumberOfPartitions(final int numberOfPartitions) { if (hasEnforcedNumberOfPartitions()) { throw new UnsupportedOperationException("number of partitions are enforced on topic " + "" + name() + " and can't be altered."); ...
  2. class InternalTopicManager源代碼中的嵌入式文檔清楚地說明了makeReady()方法。

     /** * Prepares a set of given internal topics. * * If a topic does not exist creates a new topic. * If a topic with the correct number of partitions exists ignores it. * If a topic exists already but has different number of partitions we fail and throw exception requesting user to reset the app before restarting again. * @return the set of topics which had to be newly created */ public Set<String> makeReady(final Map<String, InternalTopicConfig> topics)...

正如您在評論中看到的那樣,如果存在這樣一個分區計數正確的主題,它將被忽略,如果分區計數不正確,那么您將看到錯誤,建議使用應用程序重置工具

希望這可以幫助!

目前我們正在連接到 SSL 啟用的 MSK 主題,因此我們沒有通過應用程序創建內部主題的寫入權限。 因此,作為一種解決方法,我們要求 MSK 管理員手動創建具有所需名稱的變更日志主題,以便應用程序可以讀取它。

此外,目前我們所有的用戶主題都是 3 個分區,創建的變更日志主題也有 3 個分區,並具有以下更新的設置。 這些設置會派上用場,以防您嘗試手動創建更改日志主題(啟用壓縮以節省空間):

變更日志的配置

此外,變更日志主題名稱如下所示: (your-application-id)-(materializedAs 下的 userDefined 屬性)-changelog

暫無
暫無

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

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