【发布时间】:2020-05-28 16:14:00
【问题描述】:
我目前正在尝试一种用例,我们必须在将多个输入消息写入文件系统之前将其聚合为一个。为此,我正在尝试使用此处提供的聚合器模块 https://repo.spring.io/release/org/springframework/cloud/stream/app/aggregator-processor-kafka/2.1.1.RELEASE/
我的环境是在 docker Dataflow 2.4.1.Release 和 Skipper 2.3.1.Release 上运行的本地 SCDF/Kafka
流定义简单如下
:inputTopic > 聚合器 > :outputTopic
在聚合器属性中提供这些属性值。
release: size() == 5
group-timeout: 5000
correlation: headers.headerName
aggregation: T(org.springframework.util.StringUtils).collectionToDelimitedString(#this.![new String(payload)],'')
message-store-type: simple
我有两个问题
- 虽然我给出了 5 的发布大小,如果有 10 消息,我没有看到我的输出主题收到两条消息
- 输出主题仅包含聚合标头的最后一条消息,不包含此列表的串联值。
请建议是否有任何其他配置可以帮助实现聚合输出。
另外一个观察是,如果我有一个流
http | aggregator > :topic
相同的聚合器配置可以正常工作并且可以根据需要进行。但是我们拥有它的方式是,数据通过使用 KStreams 的处理器放入主题中,并且不确定是否有一种方法可以使用这些默认启动应用程序生成标头并将其读取到自定义处理器。
在调试聚合器期间的另一个观察结果是,correlationKey 是通过 hashCode 而不是作为字符串获取或比较的,不确定它是错误还是功能。但这正是导致预期行为中断的原因。
【问题讨论】:
标签: spring-cloud-stream spring-cloud-dataflow