Esper 和 Apache Storm 之间的区别?

Difference between Esper and Apache Storm?

我的目标是创建一个包含发布者和消费者的分布式应用程序,我在其中使用 CEP 处理数据流以生成事件通知给事件消费者。

Esper 和 Apache Storm 有什么区别?

我可以只用 Esper 实现 Storm 的功能吗?我什么时候应该考虑将 Esper 与 Storm 集成?

我很困惑,我以为 Esper 提供了相同的功能。

Storm 是一个分布式实时计算系统,通常可以用于任何目的,而 Esper 是一个 Event Stream Processing 和事件关联引擎(复杂事件处理),因此 Esper 更具体。 以下是它们的一些用例:

  • Storm 可用于实时使用来自 Twitter 的数据并计算以找到每个主题最常用的主题标签。
  • Esper 可用于检测以下事件:普通火车的速度为每小时 100 英里,其速度是其次报告的。如果火车的速度在 10 分钟内增加到每小时 130 英里,将生成一个事件并通知火车操作员。

当 select 介于它们之间时,您可以考虑更多条件:

  • Storm 是为分布式处理而设计的,而 Esper 似乎不是(我的团队评估了 2016)
  • 开源许可证 (Storm) 与商业许可证 (Esper)

在我看来,storm可以提供很好的资源管理,比如负载均衡,机器宕机时自动重启,更简单的添加机器或任务的方法等等,如果只使用esper,你必须自己处理.

Storm 为 运行 段代码提供了抽象,并提供了管理分布方面的价值,例如工作人员、管理、重启。无论您插入哪一段代码都是您的工作,您的代码必须考虑如何以及在何处保持状态,例如计数或其他派生信息。 Storm 通常用于提取-转换-加载或将流摄取到某些存储中。

Esper 通过提供符合 SQL92 的 "Event Processing Language (EPL)" 为检测事件序列中的情况提供了抽象。它是一种富有表现力、简洁和可扩展的方法,无需编写任何或很少的代码即可检测内容。 EPL 可以动态注入和管理,因此您可以在 运行 时间内实现添加和删除规则,而无需重新启动。如果您要使用代码执行此操作,您将始终必须重新启动 JVM/workers/topology.

Esper 通过直接与 Kafka Streams 集成,具有横向可扩展性。但是目前,这方面的代码不是开源的。