我正在使用Spark Streaming处理流媒体应用程序,我想将我的数据索引为弹性搜索。
我的分析: 我可以直接将数据从Spark推送到弹性搜索,但我觉得在这种情况下两个组件都会紧密耦合。
如果这是一个火花核心作业,我们可以将该输出写入HDFS并使用logstash从HDFS获取数据并将其推送到弹性搜索。
根据我的解决方案: 我可以将数据从Spark Streaming推送到Kafka,从Kafka我们可以使用Logstash读取数据并推送到ES。
请建议。
答案 0 :(得分:1)
首先,你通过不同的方法思考是很棒的。
在进行一个好的设计之前,你应该问几个问题:
如果我有时间处理大规模,Spark流媒体 - >卡夫卡 - > ES看起来是最好的选择。这样,当您的ES群集不稳定时,您仍然可以选择Kafka重播。
我对卡夫卡有点朦胧 - > HDFS - > ES,因为在源和接收器之间添加批处理层可能会对性能产生影响。老实说,我不知道使用HDFS的logstash有多好,所以无法真正评论。
紧耦合是一个经常讨论的主题。有人反对它引用可重用性问题,但也有人争论它,因为有时它可以创建一个更简单的设计,使整个系统更容易推理。还谈谈过早的优化:)我们已经取得了成功的Spark - > ES直接在中等规模的数据流入。因此,不要像以下那样打折简单设计的力量:)