簡體   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