首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据管道设计注意事项(Filebeat,Kafka,Logstash,Elasticsearch)

数据管道设计注意事项(Filebeat,Kafka,Logstash,Elasticsearch)
EN

Stack Overflow用户
提问于 2018-03-27 01:02:09
回答 1查看 652关注 0票数 0

我正试图解决以下数据管道的一些问题,并希望对此设计中的任何漏洞(利用Filebeat、Kafka、Logstash和Elasticsearch)获得一些意见。

目标

为给定用户查找最近的位置,最长为45秒的滞后时间。

想法

我们有一个Python应用程序,它不断地为用户注销最新的位置。

代码语言:javascript
运行
复制
# 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,这样如果我背靠背地执行这两个插入:

代码语言:javascript
运行
复制
{"user_id": 1, "location": "San Francisco, CA"}
{"user_id": 1, "location": "New York City, NY"}

然后查询"user_id“== 1将返回最新位置。

电流管道

代码语言:javascript
运行
复制
Filebeat -> Kafka -> Consumer (business logic)-> Kafka -> Logstash -> Elasticsearch

已知的限制:

  • 消息顺序必须通过整个管道来保存(这意味着文件必须与一台收割机一起运行)
  • 敏感于管道多个部分的滞后

问题:

  • 我还没有考虑到对上述设计的其他限制吗?
  • 由于我们显式地使用document_id (设置为每个记录的"user_id“),所以应该将写入发送到相同的Elasticsearch。但是,即使这些记录按以下顺序发送到相同的ES,并指定了显式文档版本(注意: logstash使用大容量API):

代码语言:javascript
运行
复制
{"user_id": 1, "document_version": 1, "location": "San Francisco, CA"}
{"user_id": 1, "document_version": 2, "location": "New York City, NY"}

是否有可能出现这样的情况,即书写不正常?

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 11:35:11

假设您控制了日志代码--您可以查看应用程序直接登录到Kafka,然后使用KSQL或Kafka流,您可以使用一个45秒的时间窗口找到您的数据,将数据写回另一个Kafka主题,最后使用Kafka Connect的Elasticsearch输出连接器(或Logstash)将数据写入Elasticsearch。我不知道File节拍Kafka输出有多灵活,但我认为您需要一个“原始”主题,然后订阅该主题,将其“重新划分”到另一个主题,然后在此之后进行输出处理。

通过标识您的密钥,您可以使卡夫卡分区的事件有序。例如,按用户ID键,那么任何给定用户的所有事件都会以Kafka中的顺序结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49502886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档