现在大多数数据仓库和数据湖都是面向批处理的,其中数据是在文件系统或数据库中采集的,并分批处理。 但是,当前的技术进步是完全依赖批处理模式的竞争劣势。 因此,大数据系统正在不断发展,以更加面向流的方式在数据到达时进行处理,从而获得与同行相比的竞争优势。
如今,市场上有许多开源流框架可用,并且几乎所有这些框架都是在最近几年中开发的。 随着一切的快速发展,在选择适合您需求的框架时,很容易感到困惑和迷茫。 这些系统需要连续处理无限的数据流,因此随着数据量的增长,它们需要具有弹性,高可用性和可伸缩性。
让我们简要介绍一下各种可用的流媒体解决方案:
根据处理传入数据的方式,流处理可以分为两大类:
1、微批处理:
微批处理是一种收集小批数据以进行处理以实现传统批处理的某些性能而不实际增加延迟的做法。
例如 Spark Streaming

2.实时流:
在实时流处理中,我们在记录到达后立即对其进行处理,而无需实际等待其他记录。
例如 Akka Streams, Flink, Apache Storm, etc.

流技术家族可以大致分为两大类:
1、流框架:
流框架作为分布式服务运行,我们必须向其提交作业。 它们可以轻松地跨集群扩展。 与微服务集成通常需要您与微服务分开运行框架,并通过Kafka或其他方式交换数据。
例如 Apache Spark Structured Streaming, Apache Flink, Kafka connect等等
2.流媒体库:
流库可以嵌入到您的微服务中,从而在将分析与其他处理集成的方式上提供了更大的灵活性,与流框架相比,它具有非常低的延迟和较低的开销。
例如 Akka streams, Kafka Streams, AlpAkka
让我们研究一下选择Streaming Engine时要考虑的功能:
什么是可接受的延迟?
a。 您是否需要在几毫秒内处理记录? (例如,付款处理,欺诈检测等)
b。 在几分钟范围内的等待时间可以接受吗? (日志分析)
2)每单位时间要处理的数据量是多少?
如今,数据管道每天需要处理数十亿条记录,如果它可以长时间长时间一次记录一次,那么任何解决方案都可以奏效,但是如果我们正在处理Twitter Firehouse,那么我们肯定需要逐步扩展 分布式处理。
3)需要什么样的数据处理:
如果您只是简单地转移和移动数据或运行简单的ETL逻辑(过滤和记录转换),那么可以使用许多选项。 如果您需要执行复杂的联接或按查询分组,那么它将限制您的选择。
4)首选应用程序架构:
库可以轻松集成到您的微服务中,从而提供更大的灵活性和控制力。 框架在分布式服务上运行作业时,可提供非常丰富的分析和轻松的可伸缩性。
5)项目团队的力量和活力是:
向技术堆栈中添加新技术始终是一项挑战。 参与项目的人员如何轻松地适应工具/技术以及CI / CD流程的可用性在决策过程中起着很大的作用。
让我们根据上述标准,探索市场上一些最佳的流媒体解决方案:
1、流框架:
当您的数据集足够大以要求进行分布式处理时,请选择流传输框架。 这些框架处理大量数据,并且可以以相对较低的延迟进行复杂的转换。 但是,将这些框架与微服务集成需要通过诸如Kafka / MQ之类的消息传递服务交换数据,因为它们是独立的服务。
1、Apache Spark Streaming (Structured streaming):
i。 如果已将其用于批处理,请使用它。 从spark批处理过渡到spark流很容易。
ii。 如果您的转换逻辑主要是SQL或您希望将其与机器学习系统集成,请使用它。
Apache Flink:如果您不在Spark上并且需要Spark提供的所有高级API的低延迟,请使用它。 Apache Flink在游戏中是相当新的,尽管采用率有所上升,但其开源社区并不像Spark那样大。
Apache Storm:将其用于流分析,尤其是当您使用Spark不支持的R之类的语言时。 与Spark Streaming相比,Storm具有高度的可扩展性,并提供了较低的延迟。
Kafka Connect:将其用于Kafka与其他系统之间的数据流。 它具有开箱即用的偏移管理和自动恢复功能以及与各种系统的连接器。
流媒体库可以直接集成到您的微服务中,因此延迟很短。 如果您的转换是在同一过程而不是在单独的服务中进行的,则处理总是更快。 它消除了前往Kafka或其他消息传递服务的额外开销。 库在部署和管理应用程序方面提供了更好的控制和灵活性。
在不需要数据分区(卷可在独立应用程序中管理)或想要继续使用基于微服务的开发模式而不是支持异构环境的情况下选择它们。
a。 Akka流:
当您希望对数据进行细粒度控制时,请使用它。 Akka Streams遵循Reactive Manifesto,该宣言定义了Reactive编程的核心原则。 它提供了一种直观,安全的方式来进行异步,无阻塞的背压流处理。
b。 kafka流:
当源系统和目标系统是Kafka或要对Kafka中可用的数据运行SQL时,请使用它。
注意:当然,您还应该考虑这些工具如何适合您的工作负载,基础架构和需求,您可能会发现理想的解决方案是上述建议的混合。 如果您需要在Akka流上动手操作的示例,可以在查看代码实例。
文章参考
文章评论