Spring Cloud数据流实例计数

时间:2018-09-21 20:25:17

标签: spring-cloud-stream spring-cloud-dataflow

何时可以使用此属性? spring.cloud.stream.instanceCount,spring.cloud.stream.instanceindex

考虑此管道, rabbitsrc->过滤器->转换-​​> httpclient->兔子水槽

需要发布360,000条消息,目前需要22分钟。

设置 1)在Rabbit src上的预取设置为50。 2)httpclient用于将消息发布到Spring Boot微服务的一个正在运行的实例公开的本地Rest端点。

问题: 我在兔子接收器队列上看到250 / s传入消息速率的吞吐量时,似乎在管道的httpclient->兔子接收器部分之间出现了瓶颈。管道的早期部分看起来非常快。从http客户端到Rabbit的消息传输耗时很长。因此,理想情况下,希望在Spring Boot微服务的多个实例之间分配来自转换步骤的负载。这样,我们可以在目标兔子队列上获得500 / s的消息。

但是不知道在管道中的什么地方进行配置更改,即我需要增加哪个应用程序的实例数,在哪里设置instanceindex等。

1 个答案:

答案 0 :(得分:0)

您可以从SCSt的reference guide中了解有关instanceCountinstanceIndex的更多信息。

这是如何使用这些属性的demonstration

如果您不关心分区流式传输方案,并且只对并行化“计算”感兴趣,则只需扩展实例数即可。

与特定于云运行时的实现不同,在SCDF的本地服务器中,没有“运行时”扩展支持,但是您可以使用特定于应用程序的实例数来部署流。

例如,在上面的示例中,我们使用foo部署了名为deployer.appender.count=3的流。 SCDF将部署appender App的3个实例,默认情况下,所有实例都将争夺消息。因此,它们将处于自动负载平衡状态以并行化计算操作。

所有这些,仅通过扩展使用者实例,您可能仍无法达到所需的吞吐量。您可能需要调整预取,并发和其他Rabbit使用者配置,以最大程度地利用您的环境。另外,您可以使用Rabbit的performance benchmark tooling来衡量其原始吞吐量,并将其与作为SCSt / SCDF工作负载嵌入的业务逻辑进行比较。

更新

此外,当将SCDF与Skipper结合使用时,您将可以看到SCDF优先提供的所有流属性替代背后的自动化功能。

这是appender应用的示例输出。

dataflow:>stream manifest --name foo

"apiVersion": "skipper.spring.io/v1"
"kind": "SpringCloudDeployerApplication"
"metadata":
  "name": "appender"
"spec":
  "resource": "https://github.com/sabbyanandan/partitions/raw/master/jars/appender"
  "resourceMetadata": "https://github.com/sabbyanandan/partitions/raw/master/jars/appender:jar:metadata:0.0.1-SNAPSHOT"
  "version": "0.0.1-SNAPSHOT"
  "applicationProperties":
    "spring.metrics.export.triggers.application.includes": "integration**"
    "spring.cloud.dataflow.stream.app.label": "appender"
    "spring.cloud.stream.instanceCount": "3"
    "spring.cloud.stream.metrics.key": "foo.appender.${spring.cloud.application.guid}"
    "spring.cloud.stream.bindings.input.group": "foo"
    "spring.cloud.stream.metrics.properties": "spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*"
    "spring.cloud.stream.bindings.output.producer.requiredGroups": "foo"
    "spring.cloud.dataflow.stream.name": "foo"
    "spring.cloud.stream.bindings.output.destination": "foo.appender"
    "spring.cloud.dataflow.stream.app.type": "processor"
    "spring.cloud.stream.bindings.input.consumer.partitioned": "true"
    "spring.cloud.stream.bindings.input.destination": "foo.fruits"
  "deploymentProperties":
    "spring.cloud.deployer.indexed": "true"
    "spring.cloud.deployer.count": "3"
    "spring.cloud.deployer.group": "foo"