该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 spring-cloud-stream 5.0.0!spring-doc.cadn.net.cn

出站分区支持

Kafka Streams 处理器通常将处理后的输出发送到出站的 Kafka 主题中。 如果出站主题被分区,处理器需要将出站数据发送到特定分区,应用程序需要提供 类型的 beanStreamPartitioner. 详情请参见StreamPartitioner。 让我们看看一些例子。spring-doc.cadn.net.cn

这就是我们已经多次见过的同一个处理器,spring-doc.cadn.net.cn

@Bean
public Function<KStream<Object, String>, KStream<?, WordCount>> process() {

    ...
}

以下是输出绑定的目的地:spring-doc.cadn.net.cn

spring.cloud.stream.bindings.process-out-0.destination: outputTopic

如果话题输出主题有4个分区,如果你不提供分区策略,Kafka Streams会使用默认的分区策略,这可能不是你想要的结果,具体取决于具体用例。 假设你想发送任何匹配的密钥到Spring划分到0,到第1区划,归入第2分区,其他所有内容归第3分区。 这就是你在申请中需要做的事情。spring-doc.cadn.net.cn

@Bean
public StreamPartitioner<String, WordCount> streamPartitioner() {
    return (t, k, v, n) -> {
        if (k.equals("spring")) {
            return 0;
        }
        else if (k.equals("cloud")) {
            return 1;
        }
        else if (k.equals("stream")) {
            return 2;
        }
        else {
            return 3;
        }
    };
}

这是一种初步的实现,但你可以访问记录的键/值、主题名和分区总数。 因此,如果需要,你可以实现复杂的分区策略。spring-doc.cadn.net.cn

你还需要提供这个豆子名和应用配置。spring-doc.cadn.net.cn

spring.cloud.stream.kafka.streams.bindings.process-out-0.producer.streamPartitionerBeanName: streamPartitioner

应用中的每个输出主题都需要像这样单独配置。spring-doc.cadn.net.cn