繁体   English   中英

Kinesis Stream和Kinesis Firehose更新Elasticsearch索引

[英]Kinesis Stream and Kinesis Firehose Updating Elasticsearch Indexes

我们要使用运动学流和流水来更新aws管理的Elasticsearch集群。 我们有数百个需要更新的不同索引(对应于我们的数据库分片)。 创建Firehose时,要求我指定要更新的特定索引名称。 这是否意味着我需要为集群中的每个索引创建一个单独的firehose? 或者有没有一种配置firehose的方法,以便它根据数据的内容知道要使用哪个索引。

而且,我们将有20个左右的生产者,它们将数据发送到运动学流(这些生产者中的每个生产者将为10个不同的索引生成数据)。 对于每个生产者,我是否还需要单独的运动学流。

简介:20个生产者(EC2实例)->每个生产者将20个不同索引的数据发送到kinesis流->然后,kinesis流使用流水来更新其中具有200个索引的单个群集。

注意:所有索引都有相同的映射和名称,即index_1,index_2 ... index_200

编辑:当我们重新索引数据时,我们沿着index_1-v2的行创建新索引。 显然,我们不希望在创建每个索引版本时为其创建新的firehose。 新的索引名称可以包含在发送到kinesis流的JSON中。

如您所料,Firehose至少是针对此问题的错误解决方案。 它设计用于流(不是生产者!)和索引之间存在1:1对应的情况。 诸如点击流数据或日志聚合之类的东西。

对于任何解决方案,您都需要提供一种机制来识别记录属于哪个索引。 您可以通过为每种消息类型创建单独的Kinesis流来实现此目的(在这种情况下,您可以使用Firehose),但这意味着您的生产者必须决定将每条消息写入哪个流。 这可能会导致生产者不必要的复杂性,也可能使您的成本增加到无法接受的程度。

因此,假设您要为所有消息提供单个流,则需要使用方应用程序和某种将这些消息分组的方法。 您可以在记录本身中包含消息类型(/索引名称),或为此使用分区键。 分区键可以使实现起来更容易一些,因为它可以确保将相同索引的记录存储在同一分片上,但这意味着您的生产者可能受到限制。

对于使用者,您可以使用在EC2上运行的永远在线应用程序,或者让流调用Lambda函数

如果您使用分区键来标识消息类型,那么使用Lambda会很不错,因为每个调用仅查看一个分片(调用中可能仍具有多个分区键)。 不利的一面是,Lambda每秒轮询一次流,如果您有多个流使用者,则可能会导致节流(使用独立应用程序,您可以控制轮询流的频率)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM