簡體   English   中英

如何根據 kafka 主題名稱或消息鍵/值使用 mongodb 接收器連接器對不同 dbs 和 collections 中的 kafka 主題進行分組

[英]How to group kafka topics in different dbs and collections with mongodb sink connector depending on kafka topic name or message key/value

正如標題所述,我正在使用 debezium Postgres 源連接器,並且我希望 MongoDB 接收器連接器根據其名稱將不同集合和數據庫中的 kafka 主題(也用於隔離不相關數據的不同數據庫)分組。 在查詢時,我在mongo docs遇到了topic.regex連接器屬性。 不幸的是,這只會在 mongo 中為每個成功匹配指定 regex 的 kafka 主題創建一個集合,我計划使用相同的 mongodb 服務器來容納從多個 debezium 源連接器捕獲的許多 dbs 你能幫助我嗎?

注意:我閱讀了這個 mongo sink 設置FieldPathNamespaceMapper ,但我不確定它是否符合我的需要,也不確定如何正確配置它。

topics.regex是一個通用的 sink 連接器,不是 Mongo 獨有的。

如果我正確理解了這個問題,顯然只有 collections 會在配置的數據庫中為實際存在的 Kafka 主題創建(匹配模式)並被接收器消耗。

如果您想要不匹配模式的 collections,那么您仍然需要使用它們,但需要在將記錄寫入 Mongo 之前通過 RegexRouter 轉換顯式重命名主題

在 kafka 中,worker 是可以運行多個連接器的簡單容器。 對於每個連接器,工作人員根據內部規則和您的配置生成任務。 因此,如果您查看 mongodb 接收器連接器配置:

https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/all-properties/

您可以使用相同的 connection.uri、數據庫和集合或不同的值創建不同的連接器。 因此,您可以使用topics.regex 或topics 參數將單個連接器的主題與它自己的connection.uri、數據庫和集合進行分組,並同時運行多個連接器。 請記住,如果您的連接器中的 tasks.max > 1,則可能會亂序讀取消息。 如果這不是問題,請在 mongodb 分片數量旁邊設置一個 tasks.max 值。 工作人員會自動調整任務數量。

暫無
暫無

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

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