Можно ли использовать одну и ту же привязку для создания сообщений через 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());
И второй потоками кафки:
@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.
Базовые целевые типы для этих привязок также различаются. Один использует MessageChannel для общения, а другой использует KStream. Таким образом, необходимо иметь эти две отдельные привязки.
Я не знаком с Весной. Но я уверен, что эта информация есть в документации...