我需要为在集群中运行的Flink作业添加跟踪和跨度ID,请求流如下所示
用户-> REST API-> Kafka-topic-1-> FlinkJob-1-> Kafka-topic-2-> FlinkJob-2->消费者->数据库
我正在使用Spring boot创建我的rest API,并使用Spring Sleuth在生成的日志中添加跟踪和跨度ID,在调用rest API并将消息放在Kakfa-topic-上时,添加跟踪和跨度ID也是1,但由于在春季上下文之外,我无法弄清楚如何在FlinkJob-1和FLinkJob-2上使用消息时添加跟踪和跨度ID。
一种方法是将跟踪ID和跨度ID设置为kafka消息标头,并让Kafka Consumer / Producer拦截器提取并记录跟踪和跨度ID,我尝试了此操作,但由于Flink API使用的是Flink版本的Kafka-客户。
无法调用我的自定义KafkaDeserializationSchema
public class MyDeserializationSchema implements KafkaDeserializationSchema<String> {
private static final Logger LOGGER = LoggerFactory.getLogger(MyDeserializationSchema.class);
@Override
public TypeInformation<String> getProducedType() {
System.out.println("************** Invoked 1");
LOGGER.debug("************** Invoked 1");
return null;
}
@Override
public boolean isEndOfStream(String nextElement) {
System.out.println("************** Invoked 2");
LOGGER.debug("************** Invoked 2");
return true;
}
@Override
public String deserialize(ConsumerRecord<byte[], byte[]> record) throws Exception {
System.out.println("************** Invoked 3");
LOGGER.debug("************** Invoked 3");
return record.toString();
}
}
有人可以建议我如何实现这一目标。
答案 0 :(得分:1)
您也可以使用KafkaDeserializationSchema来获取标头
要访问Kafka消息的键,值和元数据,请 KafkaDeserializationSchema具有以下反序列化方法T 反序列化(ConsumerRecord记录)。
public class Bla implements KafkaDeserializationSchema {
@Override
public boolean isEndOfStream(Object dcEvents) {
return false;
}
@Override
public Object deserialize(ConsumerRecord consumerRecord) throws Exception {
return null;
}
@Override
public TypeInformation<DCEvents> getProducedType() {
return null;
}
答案 1 :(得分:0)
您在这里使用的是简单字符串,并且可以将字节序列化为字符串,如下所示。
public class MyDeserializationSchema implements KafkaDeserializationSchema<String> {
@Override
public boolean isEndOfStream(String nextElement) {
return false;
}
@Override
public String deserialize(ConsumerRecord<byte[], byte[]> record) throws Exception {
return new String(record.value(), "UTF-8");
}
@Override
public TypeInformation<String> getProducedType() {
return BasicTypeInfo.STRING_TYPE_INFO;
}
}