github已经有开源地址RocketMQ-Flink
直接把代码复制到自己代码中
这里面我新建一个类
org.apache.rocketmq.flink.common.serialization.SimpleStringDeserializationSchema
package org.apache.rocketmq.flink.common.serialization;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import java.nio.charset.StandardCharsets;
public class SimpleStringDeserializationSchema implements KeyValueDeserializationSchema<String> {
private static final long serialVersionUID = 1L;
@Override
public String deserializeKeyAndValue(byte[] key, byte[] value) {
String v = value != null ? new String(value, StandardCharsets.UTF_8) : "";
return v;
}
@Override
public TypeInformation<String> getProducedType() {
return TypeInformation.of(String.class);
}
}
消费代码如下
package com.tc.flink.demo.mq;
import com.tc.flink.util.ConfigUtils;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.rocketmq.flink.RocketMQConfig;
import org.apache.rocketmq.flink.RocketMQSource;
import org.apache.rocketmq.flink.common.serialization.KeyValueDeserializationSchema;
import org.apache.rocketmq.flink.common.serialization.SimpleStringDeserializationSchema;
import java.util.Properties;
public class MqStreamConsumer {
public static void main(String[] args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
DataStream<String> text = env.addSource(builderTurboMQSource()).name("turboMQSource");
text.print();
env.execute("MqStreamConsumer");
}
private static RocketMQSource<String> builderTurboMQSource() {
Properties props = new Properties();
props.setProperty(RocketMQConfig.NAME_SERVER_ADDR, ConfigUtils.getPros("turbomqsource.nameserver.address"));
props.setProperty(RocketMQConfig.CONSUMER_TOPIC, ConfigUtils.getPros("turbomqsource.topic"));
props.setProperty(RocketMQConfig.CONSUMER_GROUP, ConfigUtils.getPros("turbomqsource.group"));
props.setProperty(RocketMQConfig.CONSUMER_TAG, ConfigUtils.getPros("turbomqsource.tag"));
props.setProperty(RocketMQConfig.CONSUMER_OFFSET_RESET_TO, ConfigUtils.getPros("turbomqsource.offset"));
KeyValueDeserializationSchema<String> schema = new SimpleStringDeserializationSchema();
RocketMQSource<String> turboMQConsumer = new RocketMQSource<String>(schema, props);
return turboMQConsumer;
}
}
这样就建立类似于kafka的SimpleStringSchema消费方式