我的应用程序从一个流中消费,然后将消息推到三个流上。
活页夹:
public interface MyBinder {
@Input("input1")
SubscribableChannel input1();
@Output("output1")
MessageChannel output1();
@Output("output2")
MessageChannel output2();
@Output("output3")
MessageChannel output3();
}Config:
spring:
cloud:
stream:
kinesis:
binder:
locks:
leaseDuration: 30
refreshPeriod: 3000
bindings:
input1:
consumer:
listenerMode: batch
recordsLimit: 1500
idleBetweenPolls: 10000
consumer-backoff: 1000
bindings:
input1:
group: my-group
destination: input1-stream
content-type: application/json
output1:
destination: output1-stream
content-type: application/json
output2:
destination: output2-stream
content-type: application/json
output3:
destination: output3-stream
content-type: application/json我们推送到每个记录中的数据大约为800 we。我们看到在AbstractAwsMessageHandler/AmazonKinesisAsyncClient中有更多的数据,这导致了非常频繁的GC刷新。
我们使用的是1.0版的粘合剂。
你能帮帮我吗。
发布于 2019-04-17 13:49:05
我只能从您的配置中说,您的1500 * 3 PutRecordRequest实例将在您的AbstractAwsMessageHandler上运行,而且由于默认情况下它处于async模式,您可能会导致队列开销,等待AWS服务处理它们。
您可以考虑降低recordsLimit或将所有生产者配置为sync模式:https://github.com/spring-cloud/spring-cloud-stream-binder-aws-kinesis/blob/master/spring-cloud-stream-binder-kinesis-docs/src/main/asciidoc/overview.adoc#kinesis-producer-properties
如果要消耗更少的记录,那么内存中的对象就会更少。在同步生成模式下,您将阻止使用者线程,因此它不会从输入流中提取更多的记录。
https://stackoverflow.com/questions/55725675
复制相似问题