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

时间:2019-04-14 19:12:06

标签: spring-boot apache-kafka apache-kafka-streams spring-cloud-stream spring-kafka

是否可以使用相同的绑定通过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 streams:

@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

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

1 个答案:

答案 0 :(得分:1)

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