实时流媒体工作的架构

时间:2016-09-28 09:01:24

标签: elasticsearch logstash spark-streaming

我正在使用Spark Streaming处理流媒体应用程序,我想将我的数据索引为弹性搜索。

我的分析: 我可以直接将数据从Spark推送到弹性搜索,但我觉得在这种情况下两个组件都会紧密耦合。

如果这是一个火花核心作业,我们可以将该输出写入HDFS并使用logstash从HDFS获取数据并将其推送到弹性搜索。

根据我的解决方案: 我可以将数据从Spark Streaming推送到Kafka,从Kafka我们可以使用Logstash读取数据并推送到ES。

请建议。

1 个答案:

答案 0 :(得分:1)

首先,你通过不同的方法思考是很棒的。

在进行一个好的设计之前,你应该问几个问题:

  1. 时间轴? Spark - > ES是轻而易举的,如果您开始使用PoC,建议使用ES。
  2. 运营带宽?引入更多组件将增加运营问题。根据我的个人经验,确保你的流媒体工作稳定,这本身就是一项耗时的工作。你也想添加Kafka,所以你需要花更多的时间来试图获得监控,其他运营问题是正确的。
  3. 比例?如果它需要更多的规模,拥有一个持久的消息总线可能能够帮助吸收背压并且仍能很好地扩展。
  4. 如果我有时间处理大规模,Spark流媒体 - >卡夫卡 - > ES看起来是最好的选择。这样,当您的ES群集不稳定时,您仍然可以选择Kafka重播。

    我对卡夫卡有点朦胧 - > HDFS - > ES,因为在源和接收器之间添加批处理层可能会对性能产生影响。老实说,我不知道使用HDFS的logstash有多好,所以无法真正评论。

    紧耦合是一个经常讨论的主题。有人反对它引用可重用性问题,但也有人争论它,因为有时它可以创建一个更简单的设计,使整个系统更容易推理。还谈谈过早的优化:)我们已经取得了成功的Spark - > ES直接在中等规模的数据流入。因此,不要像以下那样打折简单设计的力量:)