在 Spring Cloud 数据流中更改流中的实例计数不起作用



我正在使用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.instanceCount的更改解释为新版本,但它总是被deployer.<appName>.count覆盖。这非常令人困惑。

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

谢谢!

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

此属性也是在生产者端进行分区时的要求,因此我们将知道如何根据下游使用者实例对数据进行分区。

综上所述,我们不会在stream update工作流中跟踪对部署程序"计数"属性的任何更改。我们想实现一个新的scale()操作(参见:spring-cloud/spring-cloud-deployer-kubernetes/issues/159(,所以当"计数"被改变时,它将在幕后使用。但是,它尚未实现。请随时分享您在问题中的用例 - 我们可以对其进行审查。

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

最新更新