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 客户端处理。
是否可以使用相同的绑定通过 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 客户端处理。