领先一步
VMware 提供培训和认证,助您加速前进。
了解更多代表团队,我很高兴宣布 Spring Cloud Stream Brooklyn 发布系列的第一个里程碑版本已发布。Spring Cloud Stream Brooklyn.M1 可在 Spring 里程碑仓库中使用,其详细功能说明可在参考文档中找到。发布说明在此,其中包含重要的迁移路径信息。
Spring Cloud Stream Brooklyn.M1 继承了 Spring Cloud Stream 1.0。命名方案的变化反映了项目的结构性调整,特别是从核心组件和 Binder 实现捆绑在一起的单体结构转变为更加去中心化的结构。在新结构中,核心和 Binder 实现是独立的,拥有各自的发布节奏。发布系列的 BOM 汇集了发布组件并管理它们的版本。
这种方法的好处是双重的。一方面,它允许以更快的速度为各个实现添加新功能和修复。另一方面,它降低了创建和开发新 Binder 的门槛,这些 Binder 成熟后,只需添加到发布系列 BOM 中,就可以成为未来发布系列的一部分。最后,一个旨在开发微服务的项目本身不应该是单体应用,这是理所当然的!
以下组件是 Brooklyn.M1 发布系列的一部分
让我们看看新版本带来了什么。
Spring Cloud Stream Brooklyn.M1 对现有组件进行了一些重大升级,并引入了针对编程模型、应用互操作性以及整体开发者体验的新功能。
Apache Kafka Binder 已升级,基于 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,使用 Kafka 新版消费者库(0.9 版本引入),当前支持 Apache Kafka 0.9。使用新客户端库带来了一些好处
spring.cloud.stream.instanceIndex
。新的消费者库将负责为属于同一消费者组的所有实例分配分区,并在新实例加入或离开时进行再平衡——这对于在运行时扩展消费者应用尤其有用。对于仍希望使用静态分区分配方案的用户,我们将在最终版本中支持它(在这种情况下仍需要设置 spring.cloud.stream.instanceIndex
)。Spring Kafka 和 Spring Integration Kafka 的抽象也将使添加对 Apache Kafka 0.10 的支持更加容易,预计最终版本也将支持 Kafka 0.10。
除了版本 1.0 中已有的 Spring Integration 应用模型和 @StreamListener
,此版本引入了对基于 Project Reactor 的响应式 API 的支持。此功能需要使用 Java 8。
应用可以添加 spring-cloud-stream-reactive
模块作为依赖,从而直接使用响应式类型作为编程抽象。在数据处理上下文中,函数式和响应式编程模型非常吸引人,因为响应式组合 API 具有声明性和表达性,让开发者能够专注于*做什么*,而不是*如何做*。另一方面,虽然逐条处理消息是企业集成的经典范式,但在流处理中,开发者还需要考虑处理连续的入站消息流,并描述仅在该上下文中有意义的操作,如窗口(按时间或数量)。
下面是一个响应式处理器示例,用于统计词语(以确定过去 5 秒内每秒最热门的标签)。
@StreamListener
@Output(Processor.OUTPUT)
public Flux<WordCount> count (@Input(Processor.Input) Flux<String> flux) {
return flux.window(ofSeconds(5), ofSeconds(1))
.flatMap(window ->
window.groupBy(word -> word)
.flatMap(group -> group.reduce(0, (count,word) -> count + 1)
.map(count -> new WordCount(group.key(), count))));
}
此外,使用响应式 API 可以与其他的响应式组件集成,例如响应式 Web 控制器。要更全面地了解 Spring 中即将到来的响应式支持,请观看 Stephane Maldini 和 Rossen Stoyanchev 在 Spring One Platform 2016 上的主旨演讲,或其他关于响应式的演讲,或阅读 Dave Syer 的系列博客文章。
Spring Cloud Stream Brooklyn.M1 还增加了对 Avro 和 schema 演进的支持。从这个版本开始,应用可以包含 spring-cloud-stream-schema
模块,其中包含带有 Apache Avro 的 MessageConverters
。
Apache Avro 序列化器支持固定 schema,也支持与 schema registry 动态交互。您可以通过简单地在应用中添加 @EnableSchemaRegistryClient
并将出站通道的内容类型设置为 application/*+avro
,使您的应用与 schema registry 交互,以便数据以 Apache Avro 格式发送。这样,发布者应用将注册它们发送的消息的 schema,并将关于主题和版本的信息传递给消费者。基于此,消费者可以从 registry 中检索写入者的 schema 并反序列化接收到的消息,即使他们之前不知道该 schema。
这对于微服务的演进是一个重要的功能,因为它允许系统中的不同组件升级或更改它们的 schema 和数据格式,而不会破坏现有的。
该版本包含一个schema registry server和一个通用schema registry client。还提供了针对Confluent schema registry的 schema registry client 实现。
特别感谢 Vinicius Carvalho 对 schema 演进支持的贡献!
在接下来的几周,我们将继续开发 Brooklyn 发布系列,目标是发布一个候选版本 (release candidate)。按照里程碑版本的惯例,在 RC 版本之前可能会有一些 API 变更。以下是最终版本发布前计划增加的一些额外功能
和往常一样,我们欢迎反馈:可以通过 GitHub、Stack Overflow 或 Twitter。