簡體   English   中英

Mongo Kafka 連接器集合偵聽限制

[英]Mongo Kafka Connector Collection Listen Limitations

基於 n 個租戶,我們在 Mongo 中有幾個 collections,並希望 kafka 連接器只監視特定的 collections。

下面是我的 mongosource.properties 文件,我在其中添加了管道過濾器以僅偵聽特定的 collections。它可以工作

pipeline=[{$match:{“ns.coll”:{"$in":[“ecom-tesla-cms-instance”,“ca-tesla-cms-instance”,“ecom-tesla-cms-page”,“ca-tesla-cms-page”]}}}]

collections 將來可能會增長到 200 個 collections 必須注意,想知道以下三件事

  1. 一個連接器監聽大量 collections 是否會對性能產生影響?
  2. collections 一個連接器可以看有沒有限制?
  3. 什么是最佳實踐,運行一個連接器監聽 100 個 collections 或 10 個不同的連接器每個監聽 10 個 collections?

最佳實踐是運行許多連接器,其中“許多”取決於您維持所有連接器開銷的能力。

原因是 - 一個連接器會產生單點故障(每個任務,但一次只能將一個任務分配給任何集合,以防止重復)。 如果 Connect 任務因不可重試錯誤而失敗,那么這將完全停止連接器的任務,並停止從分配給該連接器的所有集合中讀取。

您還可以嘗試 Debezium,它的資源使用量可能比 Mongo Source Connector 少,因為它充當副本而不是每隔一段時間查詢集合。

您可以監聽來自多個 mongo collections 的多個更改流,您只需為pipeline中的集合名稱提供合適的正則表達式。 您甚至可以通過提供您不想收聽任何更改流的正則表達式來排除集合/集合。

"pipeline": "[{\"$match\":{\"$and\":[{\"ns.db\":{\"$regex\":/^database-name$/}},{\"ns.coll\":{\"$regex\":/^collection_.*/}}]}}]"  

您甚至可以使用$nin排除任何給定的數據庫,您不想監聽任何更改流。

"pipeline": "[{\"$match\":{\"$and\":[{\"ns.db\":{\"$regex\":/^database-name$/,\"$nin\":[/^any_database_name$/]}},{\"ns.coll\":{\"$regex\":/^collection_.*/}}]}}]"

來回答你的問題:

  1. 一個連接器監聽大量 collections 是否會對性能產生影響?

    • 據我所知,我不這么認為,因為文檔中的任何地方都沒有提到它。 您可以使用單個連接器收聽多個 mongo collections。
  2. collections 一個接頭能看有沒有限制?

    • 據我所知,文檔中沒有提到任何限制。
  3. 什么是最佳實踐,運行一個連接器監聽 100 個 collections 或 10 個不同的連接器每個監聽 10 個 collections?

    • 從我的角度來看,為每個集合創建N個 Kafka 連接器將是一種開銷,請確保使用推薦的配置提供容錯,只是不要依賴連接器的默認配置。

這是基本的 Kafka 連接器配置。

Mongo 到 Kafka 源連接器

{
  "name": "mongo-to-kafka-connect",
  "config": {
    "connector.class": "com.mongodb.kafka.connect.MongoSourceConnector",
    "publish.full.document.only": "true",
    "tasks.max": "3",
    "key.converter.schemas.enable": "false",
    "topic.creation.enable": "true",
    "poll.await.time.ms": 1000,
    "poll.max.batch.size": 100,
    "topic.prefix": "any prefix for topic name",
    "output.json.formatter": "com.mongodb.kafka.connect.source.json.formatter.SimplifiedJson",
    "connection.uri": "mongodb://<username>:<password>@ip:27017,ip:27017,ip:27017,ip:27017/?authSource=admin&replicaSet=xyz&tls=true",
    "value.converter.schemas.enable": "false",
    "copy.existing": "true",
    "topic.creation.default.replication.factor": 3,
    "topic.creation.default.partitions": 3,
    "topic.creation.compacted.cleanup.policy": "compact",
    "value.converter": "org.apache.kafka.connect.storage.StringConverter",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "mongo.errors.log.enable": "true",
    "heartbeat.interval.ms": 10000,
    "pipeline": "[{\"$match\":{\"$and\":[{\"ns.db\":{\"$regex\":/^database-name$/}},{\"ns.coll\":{\"$regex\":/^collection_.*/}}]}}]"
  }
}

您可以從官方文檔中獲得更多詳細信息。

暫無
暫無

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

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