问题可能是由于用户在使用Flink Kinesis Consumer时未正确设置序列化类造成的。解决方法是使用Flink提供的Kinesis Schema注册表,详细步骤见以下代码示例:
// 创建Kinesis数据流
DataStream kinesisStream = env.addSource(new FlinkKinesisConsumer<>(stream-name", new SimpleStringSchema(), properties));
// 设置Kinesis Schema注册表
KinesisDeserializationSchema schema = new SimpleStringSchema();
KinesisDeserializationSchemaWrapper deserializationSchema = new KinesisDeserializationSchemaWrapper<>(schema);
KinesisPartitioner partitioner = new KinesisRoundRobinPartitioner<>();
properties.setProperty(FlinkKinesisConsumer.CONFIG_STREAM_DESCRIBE, KinesisStreamDescriptorUtil.buildStreamsWithConsumerArn("us-east-1", "stream-name", "consumer-name", "arn"));
// 使用设置好的序列化类
kinesisStream
.rebalance()
.map(new MapFunction() {
@Override
public YourModelClass map(String value) throws Exception {
// 将接收到的String类型数据反序列化为YourModelClass对象
return new ObjectMapper().readValue(value, YourModelClass.class);
}
});"