第一步:序列化
package com.mz.iot.functions;
import com.mz.iot.bean.AlarmHistoryOrigin;
import com.mz.iot.utils.JsonUtil;
import org.apache.flink.streaming.util.serialization.KeyedSerializationSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* liuyage
*/
public class UserDefinedSerializationSchema implements KeyedSerializationSchema<String> {
private final static Logger logger = LoggerFactory.getLogger(UserDefinedSerializationSchema.class);
String topicName; //取模确定的Topic名称
public UserDefinedSerializationSchema(String topicName){
this.topicName = topicName;
}
@Override
public byte[] serializeKey(String element) {
//element就是flink流中的真实数据,这里可以根据主键下标得到主键的值key,然后下面分区器就根据这个key去决定发送到kafka哪个分区中
AlarmHistoryOrigin aho = JsonUtil.getObjFromJson(element, AlarmHistoryOrigin.class);
StringBuffer sb=new StringBuffer();
sb.append(aho.getProjectId()).append(":");
sb.append(aho.getMeterCode()).append(":");
sb.append(aho.getAlarmType()).append(":");
sb.append(aho.getId()).append(":");
sb.append(aho.getAlarmRuleId());
String key = sb.toString();
//取出key后要转成字节数组返回
return key.getBytes();
}
@Override
public byte[] serializeValue(String element) {
//要序列化的value,这里一般就原封不动的转成字节数组就行了
return element.toString().getBytes();
}
@Override
public String getTargetTopic(String el

最低0.47元/天 解锁文章
820

被折叠的 条评论
为什么被折叠?



