spring-cloud-stream - 在 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.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 之外的消费者。
推荐阅读
- python - 在张量流中输入一个带占位符的整数?
- php - apache netbeans 11.1 php endif 之前的新行
- spring-mvc - SimpleMessageListenerContainer Bean 在特定队列中的第一条消息后未调用
- java - Spring RestController:java.time.LocalDate 的自定义日期格式不起作用
- c - 如何在C中定义指向指针数组的指针数组?
- python - 为什么我的标题图像从我的模板中消失了?
- python - 在包含特定位置的特定项目的列表列表中删除列表
- amazon-dynamodb - 全局或二级索引是否有助于加快查询中的 FilterExpression
- aws-cdk - 如何将 swagger 文件与 aws_apigateway 集成
- mongodb - 基于 ObjectId 聚合和减少嵌套数组