Spring Cloud Stream Brooklyn.M1 已发布

发布 | Marius Bogoevici | 2016年8月26日 | ...

代表团队,我很高兴宣布 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 1.1.0.M1 (核心组件)
  • Spring Cloud Stream Kafka Binder 1.1.0.M1
  • Spring Cloud Stream Rabbit Binder 1.1.0.M1

让我们看看新版本带来了什么。

新特性?

Spring Cloud Stream Brooklyn.M1 对现有组件进行了一些重大升级,并引入了针对编程模型、应用互操作性以及整体开发者体验的新功能。

支持 Apache Kafka 0.9 新版消费者

Apache Kafka Binder 已升级,基于 Spring Kafka 1.0.x 和 Spring Integration Kafka 2.0.x,使用 Kafka 新版消费者库(0.9 版本引入),当前支持 Apache Kafka 0.9。使用新客户端库带来了一些好处

  • 使用 Apache Kafka Binder 的应用无需设置 spring.cloud.stream.instanceIndex。新的消费者库将负责为属于同一消费者组的所有实例分配分区,并在新实例加入或离开时进行再平衡——这对于在运行时扩展消费者应用尤其有用。对于仍希望使用静态分区分配方案的用户,我们将在最终版本中支持它(在这种情况下仍需要设置 spring.cloud.stream.instanceIndex)。
  • 支持使用 SSL 和 Kerberos 的安全客户端

Spring Kafka 和 Spring Integration Kafka 的抽象也将使添加对 Apache Kafka 0.10 的支持更加容易,预计最终版本也将支持 Kafka 0.10。

响应式编程支持 (使用 Java 8)

除了版本 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 的系列博客文章

Avro 序列化和 schema 演进支持

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 变更。以下是最终版本发布前计划增加的一些额外功能

  • 通过简单替换 Spring Kafka 库到 1.1 版本,增加对 Apache Kafka 0.10 的支持;
  • 增加对响应式 Binder 的支持(包括响应式生产者和消费者,例如 Reactor Kafka 项目引入的那些);
  • 增加对使用 Kafka Stream API 开发应用的支持;

和往常一样,我们欢迎反馈:可以通过 GitHubStack OverflowTwitter

获取 Spring 新闻通讯

保持与 Spring 新闻通讯的联系

订阅

领先一步

VMware 提供培训和认证,助您加速前进。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举办的活动

查看 Spring 社区即将举办的所有活动。

查看全部