Apache Flink:如何根据事件类型将事件接收到不同的Kafka主题?

时间:2018-03-27 08:59:02

标签: streaming apache-flink flink-streaming flink-cep

我想知道是否可以使用Flink Kafka接收器根据事件类型编写不同主题的事件? 让我们说我们有不同类型的事件:通知,消息和朋友请求。我们希望将这些事件流式传输到名为:notification-topic,messages-topic,friendsRequest-topic。

的不同主题

我尝试了很多不同的方法来解决这个问题,但仍然无法找到正确的解决方案。我听说我可以使用ProcessFunction,但它怎么能与我的问题有关?

1 个答案:

答案 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”