DataCater 使用 Quarkus 使数据流更易于访问

本文简要概述了数据流平台 DataCater,讨论了我们如何从 Scala Play! 和 Kafka Streams 迁移到 Quarkus,并介绍了我们为什么认为 Quarkus 是开发云原生 Java 应用程序的卓越框架。

什么是 DataCater?

DataCater 是一个基于 Apache Kafka 和 Kubernetes 的实时、云原生数据管道平台。它允许用户构建流式数据管道,在不同的 Apache Kafka 主题之间流式传输记录,并可以在传输过程中对记录应用过滤器或转换。考虑到其目标用户是数据科学家和数据工程师,DataCater 使他们能够使用 Python 开发转换。它提供了一个 交互式的、基于 UI 的流式数据管道预览,并使用 Kubernetes 作为管道部署的运行时。

为什么 DataCater 选择 Quarkus?

DataCater 创建于 2020 年,最初在其控制平面之上构建了 Scala 框架 Play,并使用 Kafka Streams 实现了管道。随着时间的推移,我们遇到了所选技术的以下限制和问题

  1. 资源使用效率低下:Kafka Streams 应用程序消耗大量主内存,这使得大规模运营的成本非常高。

  2. 启动时间长:启动 Kafka Streams 应用程序可能需要几分钟,这对流式数据管道的可用性产生负面影响。

  3. 限制为集群内流式传输:默认情况下,Kafka Streams 只能在同一个 Apache Kafka 集群的主题之间流式传输数据。当面临在不同 Kafka 集群之间流式传输数据的用例时,例如,在生产和测试集群之间,我们必须使用额外的工具,例如 MirrorMaker 2。

  4. 不支持 Java 17:当前的 Play! 2.8 版本不支持在 Java 17 之上运行。

特别是前两个问题,资源使用效率低下和启动时间长,在云端大规模运营时造成了很大的影响。

在 2022 年,我们重写了 DataCater,以实现我们在与早期用户合作时获得的许多经验。利用这个独特的机会,我们还将 Play! 和 Kafka Streams 切换到 Quarkus,因此使用 Quarkus 来实现我们的控制平面和数据管道。

借助 Quarkus,我们能够将云原生和消息传递应用程序的最佳特性结合在一起。流式传输消息,尤其是在 Apache Kafka 的上下文中,仍然是一个 Java 占主导地位的环境,而传统的 Java 堆栈缺乏云原生应用程序的特性,例如小 footprint、快速启动和自我包含。-Hakan Lofcali, CTO, DataCater

在下面,我们列出了选择 Quarkus 而不是其他 Java 框架的主要原因

  1. 多功能性:我们不仅可以使用 Quarkus RESTeasy 扩展来实现控制平面的 API,还可以使用其 SmallRye Reactive Messaging 扩展来使用 Quarkus 作为实现流式数据管道的基础。

  2. 开发服务:Quarkus 的开发服务帮助我们非常快速地启动依赖项,如 PostgreSQL 或 Apache Kafka,并提供出色的开发人员体验。我们的开发人员可以专注于他们的工作,而无需摆弄工具的配置。

  3. 支持原生可执行文件:Quarkus 允许我们轻松构建原生可执行文件,这在云环境中运行时非常有利。它们需要的资源更少,启动时间更快。

  4. 最小 footprint:Quarkus 的构建时优化允许更小的基于 JVM 和 GraalVM 的容器 footprint。