我想知道是否可以使用Flink Kafka接收器根据事件类型编写不同主题的事件? 让我们说我们有不同类型的事件:通知,消息和朋友请求。我们希望将这些事件流式传输到名为:notification-topic,messages-topic,friendsRequest-topic。
的不同主题我尝试了很多不同的方法来解决这个问题,但仍然无法找到正确的解决方案。我听说我可以使用ProcessFunction
,但它怎么能与我的问题有关?
答案 0 :(得分:4)
如果您使用的是Kafka:
FlinkKafkaProducer011<Event> producer = new FlinkKafkaProducer011<>(
"default.topic",
new KeyedSerializationSchema<Event>() {
@Override
public byte[] serializeKey( Event element ) {
return null; or element.getKey to bytes...
}
@Override
public byte[] serializeValue( Event element ) {
return event.toBytes() ...
}
@Override
public String getTargetTopic( Event element ) {
return element.getTopic();
}
},
parameterTool.getProperties());
input.addSink(producer);
它将为每个事件调用getTargetTopic
,以获取您想要路由事件的主题。它将覆盖“default.topic”