Apache kafka Apache Flink动态接收器数

Apache kafka Apache Flink动态接收器数,apache-kafka,apache-flink,Apache Kafka,Apache Flink,我正在使用ApacheFlink和卡夫卡消费者阅读卡夫卡主题中的一些值。 我还有一个从读取文件中获得的流 根据收到的值,我想在不同的卡夫卡主题上写这个流 基本上,我有一个与许多孩子有联系的领导人的关系网。对于每个孩子,领导者需要在孩子特定的卡夫卡主题中编写读取的流,以便孩子能够阅读。 当启动子对象时,它将自己注册到从领导者处读取的卡夫卡主题中。 问题是我不知道我有多少孩子 例如,我从卡夫卡主题中读取1,我只想在一个名为Topic1的卡夫卡主题中编写流。 我读了1-2,我想写两个卡夫卡主题(Top

我正在使用ApacheFlink和卡夫卡消费者阅读卡夫卡主题中的一些值。 我还有一个从读取文件中获得的流

根据收到的值,我想在不同的卡夫卡主题上写这个流

基本上,我有一个与许多孩子有联系的领导人的关系网。对于每个孩子,领导者需要在孩子特定的卡夫卡主题中编写读取的流,以便孩子能够阅读。 当启动子对象时,它将自己注册到从领导者处读取的卡夫卡主题中。 问题是我不知道我有多少孩子

例如,我从卡夫卡主题中读取
1
,我只想在一个名为
Topic1
的卡夫卡主题中编写流。 我读了
1-2
,我想写两个卡夫卡主题(
Topic1
Topic2

我不知道这是否可能,因为为了写这个主题,我使用卡夫卡制作人和
addSink
方法,据我所知(以及我的尝试),Flink似乎需要事先知道sink的数量


但是,没有办法获得这样的行为吗?

如果我很好地理解了你的问题,我认为你可以用一个接收器来解决它,因为你可以根据正在处理的记录来选择卡夫卡主题。似乎源代码中的一个元素可能会被写入多个主题,在这种情况下,您需要一个复制N次每个源记录(每个输出主题一个)。我建议将(topic,record)作为一对输出(aka
Tuple2

DataStream=input.flatMap(新的flatMap函数(){
公共void平面图(MyValue值,收集器输出){
for(字符串主题:主题){
out.collect(Tuple2.of(topic,value));
}
}
});
然后,您可以使用前面通过创建计算的主题,并在其中实现
getTargetTopic
以返回该对的第一个元素

stream.addSink(新FlinkKafkaProducer10(
“默认主题”,
新的KeyedSerializationSchema(){
公共字符串getTargetTopic(Tuple2元素){
返回元素0.f0;
}
...
},
卡夫卡(不动产)
);