首页 > 解决方案 > 在 Spring Cloud Data Flow 中更改流中的实例数无效

问题描述

我正在将 SCDF2.2.1.RELEASE与 Skipper Kubernetes 部署程序一起使用,2.1.2.RELEASE并且我正面临一种奇怪的行为,我想了解它是否真的是有意的、一个问题或只是一个无功能。

当我部署流时,我最初可以按照以下模式指定每个元素的副本数:

deployer.<appName>.count=2

这很有效,因为我指出的实例都部署到了 Kubernetes 中。然后,如果我回到流的定义,我会看到添加了一个新属性,可能源自deployer.<app>.count我提供的属性:

app.<appName>.spring.cloud.stream.instanceCount=2

但是,现在还不清楚如何更新这样的计数,因为如果我尝试将deployer.<appName>.count属性更改为不同的东西,例如1(不更改其他派生属性),那么 SCDF 会回复错误并且什么也不做:

Package to upgrade has no difference than existing deployed/deleted package. Not upgrading.

然后,如果我也更改了派生属性app.<appName>.spring.cloud.stream.instanceCount=1,则会发生意外行为:SCDF 为特定应用程序生成一个新版本,但仍然使用原始2实例启动它,完全忽略了新值。如果我检查流的新定义,它会显示未同步的值:

app.<appName>.spring.cloud.stream.instanceCount=1
deployer.<appName>.count=2

因此,我不确定这是预期行为还是只是尚未实现的问题或事件,因此 SCDF 只是app.<appName>.spring.cloud.stream.instanceCountdeployer.<appName>.count. 这很令人困惑。

可能来自 SCDF 团队的任何人都可以阐明这件事,以确定这是否真的是一个问题?

谢谢!

标签: spring-cloud-streamspring-cloud-dataflowspring-cloud-skipperspring-cloud-deployer-kubernetes

解决方案


deployer.<appName>.count=2是 SCDF 中的一种快捷方式,不仅可以通过初始横向扩展来实例化部署,而且还可以自动配置 Spring Cloud Stream 绑定属性,因此消费者实例可以有效地属于同一个消费者组(请参阅文档) .

这个属性也是生产者侧分区时的要求,所以我们将知道如何根据下游消费者实例对数据进行分区。

stream update尽管如此,作为工作流程的一部分,我们不会跟踪对部署者的“计数”属性的任何更改。我们想实现一个新的scale()操作(参见:spring-cloud/spring-cloud-deployer-kubernetes/issues/159),所以当“计数”改变时,它将在幕后使用。不过,它还没有实施。随时在问题中分享您的用例 - 我们可以对其进行审查。

但是,目前,您可以使用平台的自动缩放kubectl或 K8s API 中支持的缩放功能来缩放 SCDF 之外的消费者。


推荐阅读