整体的大致思路
- 配置mqtt服务(MqttConfig.java);
- 用一实现类MqttConstumer实现FLink的RichParallelSourceFunction<String>通过flink的StreamExecutionEnvironment类的实例调用实例addSource()将Mqtt发布的消息转化为flink需要的流数据;
- 使用一个MsgCallback实现MqttCallback的实现类,在收到消息的时候实现方法会掉;
- flink可以对流数据进行一系列的筛选、统计、求最大值等操作,转化为我们需要的数据形式;
Mqtt的配置类MqttConfig.java
import java.io.Serializable;
//该类需要实现序列化所以必须实现Serializable接口
public class MqttConfig implements Serializable {
public MqttConfig(String username, String password, String hostUrl, String clientId, String msgTopic) {
this.username = username;
this.password = password;
this.hostUrl = hostUrl;
this.clientId = clientId;
this.msgTopic = msgTopic;
}
//连接名称
private String username;
//连接密码
private String password;
//ip地址以及端口号
private String hostUrl;
//服务器ID注意不能与其他连接重复,否则会连接失败
private String clientId;
//订阅的主题
private String msgTopic;
//获得用户名
public String getUsername() {
return username;
}
//获得密码
public String getPassword() {
return password;
}
//获得客户端id
public String getClientId() {
return clientId;
}
//获得服务端url
public String getHostUrl() {
return hostUrl;
}
//获得订阅
public String[] getMsgTopic() {
String[] topic = msgTopic.split(",");
return topic;
}
}
Mqtt的实现类MqttConsumer.java
import org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.concurrent.ArrayBlockingQueue;
import