簡體   English   中英

kafka-connect-elasticsearch:當使用“write.method”作為 upsert 時,是否可以在 kafka 主題上使用相同的 AVRO object 來發送部分文檔?

[英]kafka-connect-elasticsearch: When using “write.method” as upsert, is it possible to use same AVRO object on kafka topic to send partial document?

我正在嘗試對 Elasticsearch (ES) kafka 連接器使用“write.method”upsert。 從我的 kafka 流應用程序中,我正在編寫我想要 upsert 的文檔,關於 ES 連接器配置為從中讀取的 kafka 主題。 我在這個主題上使用 avro 對象作為 kafka 值。 我的文檔的 AVRO 定義如下所示:

{
  "type": "record",
  "name": "Document",
  "fields": [
    {
      "name": "id",
      "type": ["null", "string"],
    },
    {
      "name": "name",
      "type": ["null", "string"]
    },
    {
      "name": "address",
      "type": ["null", "string"]
    }
  ]
}

該文檔有時僅包含 ID 和名稱,有時僅包含地址。 當我只發送地址時,id 和 name 會被覆蓋,反之亦然。 我已將behavior.on.null.values設置為ignore ,希望 ES 連接器會忽略 null id 和 name 值,但這不能按預期工作。

雖然當我在我的 kafka 主題上使用兩個不同的 AVRO 對象時,第一個只包含 id 和 name,另一個只包含地址,但 upsert 模式的行為符合預期。 但是對於同一個kafka主題允許多個AVRO object定義,我需要將主題的兼容模式設置為NONE,這並不理想。

解決手頭問題的正確方法是什么?

設置behavior.on.null.values = ignore只是告訴連接器,如果它收到一條消息,其中整個消息是 null,則忽略該消息(其他選項是失敗,或者刪除 Z45E23A1694652AAFDZ5CE80DA 中匹配的目標文檔具有 null 值的消息的密鑰,即墓碑消息)。

連接器不支持您描述的部分更新行為。 它可以插入/更新/刪除,但只能插入整個文檔

如果您想要部分 upsert 行為,那么您需要自己實現這一點,無論是在自定義連接器中,還是通過將 state 存儲在您的 Kafka Streams 應用程序中,以便能夠在每次增量通過時發出完整的記錄。

write.method=upsert可以進行部分更新

暫無
暫無

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

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