簡體   English   中英

數據管道設計注意事項(Filebeat,Kafka,Logstash,Elasticsearch)

[英]Data pipeline design considerations (Filebeat, Kafka, Logstash, Elasticsearch)

我正在嘗試清除以下數據管道中的一些問題,並希望對此設計中的任何漏洞(利用Filebeat,Kafka,Logstash和Elasticsearch)獲得一些意見。

目標

查找給定用戶的最新位置,最長延遲時間為45秒。

理念

我們有一個Python應用程序,可以連續注銷用戶的最新位置。

# log.json
{"user_id": 1, "location": "San Francisco, CA"}
{"user_id": 1, "location": "New York City, NY"}
{"user_id": 2, "location": "Chicago, IL"}
{"user_id": 1, "location": "Portland, OR"}

這個想法是將這些數據寫入Elasticsearch(我們公司內部對它有很好的支持的數據存儲),並使用“ user_id”作為文檔ID,這樣,如果我執行這2次插入,便會背靠背:

{"user_id": 1, "location": "San Francisco, CA"}
{"user_id": 1, "location": "New York City, NY"}

然后在Elasticsearch中查詢“ user_id” == 1將返回最新位置。

當前管道

Filebeat -> Kafka -> Consumer (business logic)-> Kafka -> Logstash -> Elasticsearch

已知限制:

  • 消息順序必須在整個管道中保留(這意味着filebeat必須使用單個收集器運行)
  • 在管道的多個部分敏感滯后

問題:

  • 我沒有考慮過上述設計的其他限制嗎?
  • 由於我們顯式地使用document_id(設置為每個記錄的“ user_id”),因此應將寫入發送到相同的Elasticsearch分片。 但是,即使這些記錄按以下順序發送到相同的ES分片,並且具有明確的文檔版本和特定的external_gte (注意:logstash使用批量API):

{"user_id": 1, "document_version": 1, "location": "San Francisco, CA"}
{"user_id": 1, "document_version": 2, "location": "New York City, NY"}

寫入發生亂序是否會發生任何情況?

假設您控制着日志代碼-您可以看看讓應用程序直接登錄到Kafka,然后使用KSQL或Kafka Streams,可以在45秒的時間內找到數據,將數據寫回到另一個Kafka主題,最后使用Kafka Connect的Elasticsearch輸出連接器(或Logstash)以寫入Elasticsearch。 我不知道Filebeat Kafka輸出的靈活性如何,但是我認為您需要一個“原始”主題,然后訂閱該主題,將其“重新分區”為另一個主題,然后進行后續的輸出處理。

您可以通過識別密鑰使Kafka分區的事件井然有序。 例如,按用戶ID鍵,然后任何給定用戶的所有事件最終在Kafka中排序

暫無
暫無

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

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