Spring 和 Kafka:对 Kafka Producer 和 Kafka Streams 使用相同的绑定

Spring and Kafka: Using the same binding for Kafka Producer and Kafka Streams

是否可以使用相同的绑定通过 Kafka Producer 生成消息并通过 Kafka Streams 发送流处理结果?

现在我把它们分开如下:

    @Output(TOPIC_X)
    MessageChannel xOutput();

    @Output(TOPIC_X_ONE)
    KStream<?,?> xOneOutput();

生产者使用第一个时:

channels
.xOutput()
.send(MessageBuilder
      .withPayload(x)
      .setHeader(KafkaHeaders.MESSAGE_KEY, x.getId()).build());

第二个来自 kafka 流:

@StreamListener
@SendTo(TOPIC_X_ONE)
public KStream<?,?> process(@Input(INPUT_TOPIC) KStream<String,String> inputStream){
    //ommited for clarity
}

在 application.yml 我有:

spring.cloud.stream.bindings:
  topic-x:
    destination: mytopic
    producer:
      useNativeEncoding: true
  topic-x-one:
    destination: mytopic
    producer:
      useNativeEncoding: true

如果它们都有相同的目的地并且都是输出,真的有必要将它们分开吗?

是的,有必要;绑定由两个不同的活页夹实现和一个不同的 kafka 客户端处理。