API Kafka Streams: я присоединяюсь к двум KStreams из empmodel
final KStream<String, EmpModel> empModelStream = getMapOperator(empoutStream);
final KStream<String, EmpModel> empModelinput = getMapOperator(inputStream);
// empModelinput.print();
// empModelStream.print();
empModelStream.join(empModelinput, new ValueJoiner<EmpModel, EmpModel, Object>() {
@Override
public Object apply(EmpModel paramV1, EmpModel paramV2) {
System.out.println("Model1 "+paramV1.getKey());
System.out.println("Model2 "+paramV2.getKey());
return paramV1;
}
},JoinWindows.of("2000L"));
Я получаю ошибку:
Неверное здание топологии: KSTREAM-MAP-0000000003 и KSTREAM-MAP-0000000004 не объединяются
1 ответ
Если вы хотите присоединиться к двум KStreams
Вы должны убедиться, что оба имеют одинаковое количество разделов. (см. блок "Примечание" в http://docs.confluent.io/current/streams/developer-guide.html)
Если вы используете Кафку v0.10.1+
перераспределение произойдет автоматически (см. http://docs.confluent.io/current/streams/upgrade-guide.html).
Для Кафки v0.10.0.x
у вас есть два варианта:
- убедитесь, что исходные темы ввода имеют одинаковое количество разделов
- или добавить вызов
.through("my-repartitioning-topic")
к одному изKStream
с до объединения. Вам нужно создать тему"my-repartioning-topic"
с правильным количеством разделов (т. е. с тем же количеством разделов, что и второйKStream
исходная тема ввода) перед запуском приложения Streams