实时流作业的架构
Architecture of a real time streaming job
我正在使用 Spark Streaming 开发流应用程序,我想将我的数据索引到弹性搜索中。
我的分析:
我可以直接将数据从 Spark 推送到弹性搜索,但我觉得在这种情况下,这两个组件将紧密耦合。
如果这是一个 spark 核心作业,我们可以将该输出写入 HDFS 并使用 logstash 从 HDFS 获取数据并将其推送到弹性搜索。
根据我的解决方案:
我可以将数据从 Spark Streaming 推送到 Kafka,然后我们可以使用 Logstash 从 Kafka 读取数据并推送到 ES。
求推荐。
首先,很高兴您考虑了不同的方法。
在做出好的设计之前,您应该问几个问题:
- 时间表? Spark -> ES 轻而易举,如果您开始使用 PoC,建议使用它。
- 操作带宽?引入更多组件将增加操作问题。根据我的个人经验,确保您的 Spark Streaming 工作稳定本身就是一项耗时的工作。您还想添加 Kafka,因此您需要花费更多时间来尝试正确进行监控和其他操作问题。
- 规模?如果它需要更大的规模,拥有一个持久的消息总线可能能够帮助吸收背压并仍然很好地扩展。
如果我有时间处理大规模问题,Spark streaming -> Kafka -> ES 看起来是最好的选择。这样当你的 ES 集群不稳定时,你仍然可以选择 Kafka 重放。
我对 Kafka -> HDFS -> ES 有点模糊,因为在 Source 和 Sink 之间添加批处理层可能会对性能产生影响。老实说,我不知道 HDFS 的 logstash 有多好,所以不能真正发表评论。
紧耦合是一个经常被讨论的话题。有人以可重用性问题为由反对它,但也有人赞成它,因为有时它可以创建更简单的设计并使整个系统更容易推理。还要谈谈过早的优化 :) 我们已经成功地使用 Spark -> ES 直接在中等规模的数据流入。所以不要低估像这样更简单的设计的力量:)
我正在使用 Spark Streaming 开发流应用程序,我想将我的数据索引到弹性搜索中。
我的分析: 我可以直接将数据从 Spark 推送到弹性搜索,但我觉得在这种情况下,这两个组件将紧密耦合。
如果这是一个 spark 核心作业,我们可以将该输出写入 HDFS 并使用 logstash 从 HDFS 获取数据并将其推送到弹性搜索。
根据我的解决方案: 我可以将数据从 Spark Streaming 推送到 Kafka,然后我们可以使用 Logstash 从 Kafka 读取数据并推送到 ES。
求推荐。
首先,很高兴您考虑了不同的方法。
在做出好的设计之前,您应该问几个问题:
- 时间表? Spark -> ES 轻而易举,如果您开始使用 PoC,建议使用它。
- 操作带宽?引入更多组件将增加操作问题。根据我的个人经验,确保您的 Spark Streaming 工作稳定本身就是一项耗时的工作。您还想添加 Kafka,因此您需要花费更多时间来尝试正确进行监控和其他操作问题。
- 规模?如果它需要更大的规模,拥有一个持久的消息总线可能能够帮助吸收背压并仍然很好地扩展。
如果我有时间处理大规模问题,Spark streaming -> Kafka -> ES 看起来是最好的选择。这样当你的 ES 集群不稳定时,你仍然可以选择 Kafka 重放。
我对 Kafka -> HDFS -> ES 有点模糊,因为在 Source 和 Sink 之间添加批处理层可能会对性能产生影响。老实说,我不知道 HDFS 的 logstash 有多好,所以不能真正发表评论。
紧耦合是一个经常被讨论的话题。有人以可重用性问题为由反对它,但也有人赞成它,因为有时它可以创建更简单的设计并使整个系统更容易推理。还要谈谈过早的优化 :) 我们已经成功地使用 Spark -> ES 直接在中等规模的数据流入。所以不要低估像这样更简单的设计的力量:)