我是scala / flink / spark的新手,会有一些问题。 现在正在使用带有flink的scala。
数据流的总体思路如下:
csv文件 - > flink - > elastic-> flink(过程数据) - > MongoDB - >画面
存在大量以分号分隔的日志文件。
我想将这些文件写入elasticsearch作为我的数据库。 (这已经有效)
现在需要进行各种分析(例如,一致性报告/生产率报告)。
对于那些报告,需要不同类型的列。
我们的想法是使用flink从elasticsearch导入基础数据,编辑数据并将其保存到mongodb中,以便可以使用tableau进行数据可视化。
编辑将包括添加其他列,如工作日和不同状态的开始/结束时间
// +-------+-----+-----+
// | status|date |time |
// +-------+-----+-----+
// | start | 1.1 |7:00 |
// | run_a | 1.1 |7:20 |
// | run_b | 1.1 |7:50 |
// +-------+-----+-----+
// +-------+-------+-------+----+
// | status|s_time |e_time |day |
// +-------+-------+-------+----|
// | start | 7:00 |7:20 | MON|
// | run_a | 7:20 |7:50 | MON|
// | run_b | 7:50 |nextVal| MON|
// +-------+-------+-------+----+
经过一番研究后,我发现flink没有使用弹性作为数据源的可能性。 有一个github项目https://github.com/mnubo/flink-elasticsearch-source-connector,但它已经超过一年没有更新。这似乎没有正常工作,因为它给了我较少的点击,然后我会用相同的查询得到kibana。 还有其他选择吗?为什么默认情况下不支持此功能?
这些表转换是否适用于flink?用flink做它们有意义吗? (因为我很难实现它们)
我是否为此项目使用了正确的框架?我应该切换到spark,因为它提供了更多功能/社区项目吗?
答案 0 :(得分:1)
首先,如果你的目标只是用日志处理(强大的搜索,可视化,存储),你就不能重新发明轮子并使用ELK stack 你将获得下一个能力 -
Logstash
Kibana
Elasticsearch
喜欢搜索引擎但是这个软件是shareware
- 你将无法获得免费版的全部功能,我可以根据我的个人经验说 - 试用版适合在制作中使用 - 它确实让生活更轻松。
如果您想为存储创建自己的自定义管道,转换和处理日志或其他文件Apache Spark
是出于此目的的绝佳解决方案 - 您可以使用Spark
之类的ETL
解决方案操纵您想要的一切 - 构建数据管道非常容易(read from elasticsearch
- > process it
- > save to mongo
; take from mongo
- > {{1或者等等) - 你可以利用Spark 2.0 achieve speedup(与早期版本的Spark比较)。
此外,已经准备好solution与send to visualisation
的集成,或者您可以通过使用ES和Mongo的连接器来创建自己的Streamsets。关于Spark - Mongo - ES
- 您可以使用它代替Flink
,但Spark
是更成熟的技术,拥有更广泛的社区。与替代方案一样,您可以使用ETL解决方案在系统之间快速开发/原型化数据流(使用鼠标拖动必要的组件),如NiFi或Mysql - How can I select rows by year if I have only the timestamp?。