gpt4 book ai didi

elasticsearch - kafka-connect-elasticsearch : When using "write.method" as upsert, 是否可以在 kafka 主题上使用相同的 AVRO 对象发送部分文档?

转载 作者:行者123 更新时间:2023-12-02 22:54:00 26 4
gpt4 key购买 nike

我正在尝试对 Elasticsearch (ES) kafka 连接器使用“write.method”upsert。从我的 kafka 流应用程序中,我正在编写我想要更新插入的文档,该文档位于 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 和名称,另一个仅包含地址,upsert 模式行为符合预期。但是对于同一个kafka主题允许多个AVRO对象定义,我需要将主题的兼容模式设置为NONE,这并不理想。

解决当前问题的正确方法是什么?

最佳答案

设置behavior.on.null.values =ignore只是告诉连接器,如果它收到一条消息,其中整个消息为空,则忽略该消息(其他选项是失败,或者删除 Elasticsearch 中与消息键与空值匹配的目标文档,即逻辑删除消息)。

连接器不支持您描述的部分更新行为。它可以插入/更新/删除,但只能整个文档

如果您想要部分更新插入行为,那么您需要自己实现这一点,无论是在自定义连接器中还是通过在 Kafka Streams 应用程序中存储状态,以便每次都能发出完整的记录当三角洲通过时。

可以通过 write.method=upsert 进行部分更新

关于elasticsearch - kafka-connect-elasticsearch : When using "write.method" as upsert, 是否可以在 kafka 主题上使用相同的 AVRO 对象发送部分文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61554122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com