Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 一对多KStream KTable联接_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 一对多KStream KTable联接

Apache kafka 一对多KStream KTable联接,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有很多大学- 什么时候上大学- University(universityId: String, name: String, studentIds: Seq[String]) val universityKStream = builder.stream[String, University](...) 还有一群学生, 当学生- Student(studentId: String, name: String) val studentsKtable = builder.table[Strin

我有很多大学- 什么时候上大学-

University(universityId: String, name: String, studentIds: Seq[String])

val universityKStream = builder.stream[String, University](...)
还有一群学生, 当学生-

Student(studentId: String, name: String)

val studentsKtable = builder.table[String, Student](...)
我想将两者结合起来,引出ResolvedUniversity对象的主题:

ResolvedUniversity(universityId: String, name: String, students: Seq[Student])

我无法使用universityId对学生进行分组和聚合,因为学生对象中不存在universityId字段

仅使用DSL,我认为最简单的方法是(Java):

班级学生{
弦乐学生;
字符串名;
}
一流大学{
弦大学;
字符串名;
列出学生名单;
}
阶级差异{
弦大学;
字符串名;
列出学生名单;
}
Serde stringSerde=null;
Serde studentSerde=null;
Serde universitySerde=null;
Serde resolvedUniversitySerde=null;
KStream=拓扑
.stream(“大学”,与(stringSerde,UniversitySerd)一起消费);
KTable students=拓扑
.表(“学生”,使用(stringSerde,studentSerde))消费;
KTable Resolved大学=大学
.flatMap((k,v)->{
return v.studentIds.stream()
.map(id->newkeyvalue(id,v))
.collect(Collectors.toList());
})
.join(学生,结对::结对,结对
.groupBy((k,v)->v.left().universityId)
.aggregate(ResolvedUniversity::new,
(k,v,a)->{
a、 universityId=v.left().universityId;
a、 name=v.left().name;
a、 添加(v.right());
返回a;
},
具体化。使用(stringSerde,ResolvedUniversitySeder));
对于这种类型的联接,为了进行历史处理,必须先用其数据“预处理”大学的
KTable
,然后才能对其联接
KStream