我正在使用Spring Cloud Dataflow本地服务器,并使用Kafka主题和自定义接收器部署60多个流。内存/ CPU使用成本目前不可扩展。我已经为大多数流设置了Xmx到64米。
目前正在探索我的选择。
对其他想法持开放态度。可能还可以调整max.poll.records等Kafka配置并减少内存使用量。
谢谢!
答案 0 :(得分:1)
首先,我想澄清数据管道中SCDF和Stream / Task应用程序之间的差异。
SCDF是一个轻量级的Spring Boot应用程序,包括DSL,REST-API和仪表板。简而言之,它作为协调器分别定义和部署由流和任务应用程序组成的流和任务/批处理数据管道。
实际业务逻辑,其性能和底层资源消耗位于各个Stream / Task应用程序级别。 SCDF不会干扰应用程序的操作,也不会对资源负载造成影响。最后,一切都是独立的Boot应用程序 - 独立的Java进程。
现在,你的探索步骤。
禁用嵌入式Tomcat服务器。我试过一次,SCDF无法告诉流的部署状态。
SCDF是一个REST服务器,需要应用程序容器(在本例中为Tomcat),您无法禁用它。
将多个Kafka“源”主题分组到一个接收器应用。这是Kafka允许的,但不清楚SCDF是否允许订阅多个主题。
同样,SCDF与应用之间没有任何关系。 SCDF将完整的流/任务(又称:引导应用程序)编排成连贯的数据管道。如果您必须在多个Kafka主题中生成或使用消费者,则在应用程序级别完成。查看multi-io sample了解更多详情。
也可以直接通过named-destination从多个主题中消费。 SCDF提供DSL / UI功能来构建扇入和扇出流水线。有关详细信息,请参阅docs。这个video也很有用。
切换到使用Kubernetes部署者。
通常建议将SCDF的本地服务器用于开发。主要是因为本地服务器实现没有任何弹性。例如,如果流媒体应用因任何原因而崩溃,则无法自动重启它们。这正是我们在生产中推荐SCDF的Kubernetes或Cloud Foundry服务器实现的原因。该平台通过在故障情况下自动重新启动应用程序来提供弹性和容错能力。
从资源配置的角度来看,它再次取决于每个应用程序。它们是在运行时执行特定操作的独立微服务应用程序,它取决于业务逻辑需要多少资源。