Storm 与 Kafka 和处理器

Storm vs Kafka and Processors

我发现阅读 storm 文档并不清楚 apache storm 究竟是什么让我拥有从 kafka 主题消费并产生到另一个主题的小进程?使用这种架构,我可以更改每个工作进程的数量,以适应​​哪些组件速度较慢等。大概风暴会给我自动容错和重新平衡的便利性?是否可能有任何性能改进?

Presumably storm will give me auomatic fault tolerance and ease of re-balancing?

是的,这都是关于容错和重新平衡的:

Storm 将密切关注大多数组件并跟踪批处理是否成功重放。如果不是,它会很方便地重播它。 UI 和日志查看器是非常小的添加。另一件好事是 Storm 已经与所有主要 databases/queues(HDFS、Kafka、Kestrel、Cassandra 等)集成,但由于您已经掌握了输入类型,因此它对您来说可能并不那么重要。

Are there likely to be any performance improvements?

恰恰相反。具有相当普遍范围的现成解决方案几乎总是比临时系统性能低。特别是,在窗口连接任务中,我们能够在 6 台机器的集群上每秒处理约 120k 条记录,而我们自己专门为此任务设计的 POC 显示 > 2.5 倍的吞吐量。如果您不打算将 Storm 用作各种不同管道的平台,那么值得考虑滚动您自己的实现。

storm不仅提供了容错和再平衡特性,它还有一些适合实时事件处理的特性

  1. 消息处理保证。核心风暴有“至少一次” 保证和消息仅在出现故障时重播。 三叉戟有“精确一次”保证
  2. 易于分布式部署。 您需要做的就是将拓扑 jar 提交到集群。
  3. 拓扑的不同部分允许不同级别的 并行度。
  4. 不同类型的分组支持。分组模式 例如 fieldsGrouping 使流连接更容易。

当然,如果您的事件处理用例非常简单,并且您的体系结构需要上述 none,手动启动多个 java 进程以读取 Kafka 主题的消息应该有更好的表现。但实际上,情况并非如此。