有没有办法在通过 AWS Kinesis Firehose 插入时手动设置 ElasticSearch 文档 ID?

我设置了一个 AWS Kinesis Firehose Stream,用于将数据馈送到 AWS ElasticSearch 集群,并且通过将文档发送到 Firehose Stream(将文档加载到 ElasticSearch 中),可以成功插入文档。

但是我希望能够在将文档发送到Firehose Stream时手动指定/设置文档的值。我成功地使用AWS PHP开发工具包将数据发送到Firehose,我只是无法弄清楚是否有办法手动设置文档的。idid

$firehoseParams = [
    'DeliveryStreamName' => 'myStreamName', // REQUIRED
    'Record' => [ // REQUIRED
        'Data' => '{"json_encoded": "data", ...}', // REQUIRED
    ],
];
$firehoseResult = $this->_firehoseClient->putRecord($firehoseParams);

我尝试在JSON数据中设置,和值,但都无济于事。id_idesDocumentId

有人有什么想法吗?


答案 1

Firehose 传输流目标仅追加,对于开放搜索 (AWS Elasticsearch),不支持更新插入。Firehose 将为其流式传输的每条记录生成一个唯一的 ID,并将其用作文档 ID。此时无法由用户配置。如果您是 AWS 企业支持客户,则可以通过与您的解决方案架构师 (SA) 或技术客户经理 (TAM) 交谈来请求将此功能添加到 Firehose 中。

一种可能的短期解决方案是使用 Kinesis Stream 并触发 Lambda 函数,使用 Opensearch API 将文档向上插入到 Opensearch。Python 客户端会将 JSON 数据推送到 Kinesis Stream,而不是让 Lambda 函数只执行转换,而是触发流中的记录,执行转换,并处理向上插入到 Opensearch。


答案 2

您可以使用 Kinesis Data Streams 来实现此目的,您可以将文档发送到流中,并通过 lambda 函数,您可以使用官方 Elasticsearch API 提供 _id 属性。


推荐