我正在使用Kafka构建数据处理管道。 管道是线性的,有4个阶段。 数据量中等(需要多台机器但不是数百或数千;数据量是几十千兆字节) 我的问题:我可以只使用Kafka,管道阶段消耗主题并产生另一个主题吗?我应该使用Spark还是Storm?为什么?当然,我更喜欢最简单的架构。如果我能用卡夫卡做到这一点,我宁愿这样做。将来我可能需要一些额外的机器学习阶段,这可能会影响答案。我没有强大的一次性语义,我可以接受一些消息丢失和一些没有问题的重复。
答案 0 :(得分:0)
我的问题:我是否可以只使用Kafka,管道阶段从主题消耗并产生另一个主题?我应该使用Spark还是Storm?为什么?
技术上是的,你可以。如果您准备好自己处理整个分布式架构。编写自己的多线程生产者,管理这些消费者等等。您还需要考虑可扩展性,性能,耐久性等。这里有使用Storm
,Spark
等计算引擎的美妙之处。所以您可以只关注核心逻辑并离开基础设施由他们维护。
例如,对于您的体系结构使用Kafka
和Storm
的组合,您可以使用kafka存储数TB的数据并将其提供给风暴进行处理。如果您熟悉storm,那么示例拓扑可以是这样的:
(kafka-spout
消费来自主题的消息) - > (Bolt-A
用于处理通过喷口接收的数据并将其送入螺栓B) - > (Bolt-B
用于将处理后的数据推回到另一个kafka主题中)
使用此类架构可提供可扩展性,吞吐量,性能等方面的优势。通过一些简单的配置更改,您将能够根据您的要求调整应用程序。