跳到主要内容
版本:5.0.1

出站分区支持

DeepSeek V3 中英对照 Partition support on the outbound

Kafka Streams 处理器通常将处理后的输出发送到出站 Kafka 主题。如果出站主题已分区,且处理器需要将输出数据发送到特定分区,应用程序需要提供一个 StreamPartitioner 类型的 Bean。更多详情请参阅 StreamPartitioner。让我们来看一些示例。

这正是我们之前多次看到的同一款处理器,

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

...
}

以下是输出绑定目标:

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

如果主题 outputTopic 有 4 个分区,如果你不提供分区策略,Kafka Streams 将使用默认的分区策略,这可能不是你想要的结果,具体取决于特定的用例。假设你想将任何匹配 spring 的键发送到分区 0,cloud 发送到分区 1,stream 发送到分区 2,其他所有内容发送到分区 3。这就是你在应用程序中需要做的。

@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;
}
};
}

这是一个基础实现,不过你可以访问记录键值、主题名称和分区总数。因此,如有需要,你可以实现复杂的分区策略。

您还需要将此 bean 名称与应用程序配置一起提供。

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

应用程序中的每个输出主题都需要像这样单独配置。