我正试图解决以下数据管道的一些问题,并希望对此设计中的任何漏洞(利用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,这样如果我背靠背地执行这两个插入:
{"user_id": 1, "location": "San Francisco, CA"}
{"user_id": 1, "location": "New York City, NY"}然后查询"user_id“== 1将返回最新位置。
电流管道
Filebeat -> Kafka -> Consumer (business logic)-> Kafka -> Logstash -> Elasticsearch已知的限制:
问题:
。
{"user_id": 1, "document_version": 1, "location": "San Francisco, CA"}
{"user_id": 1, "document_version": 2, "location": "New York City, NY"}是否有可能出现这样的情况,即书写不正常?
发布于 2018-03-27 11:35:11
假设您控制了日志代码--您可以查看应用程序直接登录到Kafka,然后使用KSQL或Kafka流,您可以使用一个45秒的时间窗口找到您的数据,将数据写回另一个Kafka主题,最后使用Kafka Connect的Elasticsearch输出连接器(或Logstash)将数据写入Elasticsearch。我不知道File节拍Kafka输出有多灵活,但我认为您需要一个“原始”主题,然后订阅该主题,将其“重新划分”到另一个主题,然后在此之后进行输出处理。
通过标识您的密钥,您可以使卡夫卡分区的事件有序。例如,按用户ID键,那么任何给定用户的所有事件都会以Kafka中的顺序结束。
https://stackoverflow.com/questions/49502886
复制相似问题