我們都知道 Kafka 的 topic 資源比較“貴”,所以一般會給專案 topic 許可權限制,按需申請。Milvus 會在建新表時自動申請 kafka topic 資源,這時候自動申請不到怎麼辦?手動配置 topic 要符合什麼規範才能被 Milvus 使用?
透過本文的小實踐,大家可以瞭解 Milvus 如何為 Kafka Topic 命名、使用 Topic 的機制,以及使用者在 Kafka Topic 資源許可權緊張情況下,對 Kafka Topic 的預設及使用。希望能給大家啟發的同時增加對 Milvus 訊息系統的瞭解。
Topic 在 Milvus 中的作用
Kafka 是一個分散式流處理系統,流處理系統使它可以像訊息佇列一樣 publish 或者 subscribe 訊息。Topic 用於建立 Producer 和 Consumer 之間的訂閱關係。生產者傳送訊息到指定的 Topic,訊息者從這個 Topic 下面消費訊息(Kafka 把訊息存在 topic 中,每一條訊息包含 key、value、timestamp)。
在Milvus 2.x 中,流式訊息經過 Proxy 生產到 Kafka topic 中,再由 Data Node 節點消費到物件儲存中。
參考連結:https://milvus.io/docs/data_processing.md
Milvus Kafka Topic 命名規則
命名規則
- 配置檔案中的 chanNamePrefix:
# Channel name generation rule: ${namePrefix}-${ChannelIdx}
common:
chanNamePrefix:
cluster: "by-dev"
rootCoordDml: "rootcoord-dml"
rootCoordDelta: "rootcoord-delta"
dataCoordTimeTick: "datacoord-timetick-channel"
- Milvus 會建立三種型別的 Topic:
Datacoord-timetick-channel——chanNamePrefix.cluster-chanNamePrefix.dataCoordTimeTick
by-dev-datacoord-timetick-channel
Dml channel--chanNamePrefix.cluster-chanNamePrefix.rootCoordDml
1 by-dev-rootcoord-dml_0
2 ...
3 by-dev-rootcoord-dml_255
Delta channel--chanNamePrefix.cluster-chanNamePrefix.rootCoordDelta
1 by-dev-rootcoord-delta_0
2 ...
3 by-dev-rootcoord-delta_255
機制
- 在啟動 Milvus 叢集時,會建立唯一的 dataCoordTimeTick:
by-dev-datacoord-timetick-channel
。
- 當建立一個新的 Collection 時,系統會建立對應的 rootCoordDml 和 rootCoordDelta 。由於一個表預設有 2 個 shard number ,共建立 22 共 4 個 topic(若shard number 為 4 ,則建立 42 個 topic,以此類推),名稱如下:
1 by-dev-rootcoord-dml_0
2 by-dev-rootcoord-dml_1
3 by-dev-rootcoord-delta_0
4 by-dev-rootcoord-delta_1
預設 rootCoord.dmlChannelNum
是 256(需要注意的是在新版本中我們調低了預設值),意思是最多建立 dml-channel topic 256 個,如果 collection 數量所需 topic 超過該值,則會對 topic 進行復用。所以我們可以透過控制 rootCoord.dmlChannelNum
來控制 topic 的複用。
Milvus Kafka Topic 預設方案
在瞭解了 Milvus 對 Topic 的命名和複用規則之後,我們可以按規則預設 Kafka Topic。
- 根據命名規則預設對應的 rootCoordDml 和 rootCoordDelta 相關 Topic。
1 by-dev-rootcoord-dml_2
2 by-dev-rootcoord-dml_3
3 by-dev-rootcoord-delta_2
4 by-dev-rootcoord-delta_3
- 修改
rootCoord.dmlChannelNum
引數為4,控制 dml-channel topic 的使用數量。
- 在系統讀取到預設 topic 時直接使用,不再重新申請。
(本文作者張翔系 Zilliz 客戶工程師;曾傑系 Zilliz 主任工程師)
本文由mdnice多平臺釋出