[英]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 個類( InternalTopicConfig
和InternalTopicManager
)中有證據證明這一點:
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."); ...
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.