Apache flink ApacheFlink-如何实现自定义反序列化程序实现反序列化模式

Apache flink ApacheFlink-如何实现自定义反序列化程序实现反序列化模式,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我和弗林克一起工作,我用的是卡夫卡连接器。我从flink收到的消息是一个逗号分隔的项目列表。“'a','b','c',1,0.1….'12:01:00.000'” 其中一个包含事件时间,我想将此事件时间用于每个分区的水印(在kafka源代码中),然后将此事件时间用于会话窗口。 我的案例与平常有点不同,因为据我所知,人们通常使用“卡夫卡时间戳”和SimpleStringSchema()。在我的例子中,我必须编写自己的反序列化程序来实现反序列化模式并返回元组或Pojo。因此,基本上用我自己的函数替换

我和弗林克一起工作,我用的是卡夫卡连接器。我从flink收到的消息是一个逗号分隔的项目列表。“'a','b','c',1,0.1….'12:01:00.000'” 其中一个包含事件时间,我想将此事件时间用于每个分区的水印(在kafka源代码中),然后将此事件时间用于会话窗口。 我的案例与平常有点不同,因为据我所知,人们通常使用“卡夫卡时间戳”和SimpleStringSchema()。在我的例子中,我必须编写自己的反序列化程序来实现反序列化模式并返回元组或Pojo。因此,基本上用我自己的函数替换SimpleStringSchema()。Flink提供了一些现成的反序列化程序,但我真的不知道如何创建自定义反序列化逻辑

查看flink网站,我发现:

有人给了我一个例子(谢谢David!),但我仍然不知道如何实现我的


我真的需要一个例子,我可以做一个列表。上面提到的是JSON,所以给了我理论和概念,但我被困在那里了。

你应该介绍类似POJO的

公共类事件实现可序列化{
...
私有长时间戳;
}
并实现与链接中类似的简单反序列化程序-您可以通过逗号手动拆分消息字符串来解析该行,也可以使用现成的csv读取器,例如,将该行解析为POJO:

公共类EventDeserializationSchema实现反序列化Schema{
私有静态最终长serialVersionUID=1L;
@凌驾
public ClickEvent反序列化(字节[]消息)引发IOException{
字符串行=新字符串(消息,StandardCharsets.UTF_8);
String[]parts=line.split(“,”);
事件=新事件();
//待办事项:这里的活动部分
返回事件;
}
@凌驾
公共布尔值isEndOfStream(事件下一个事件){
返回false;
}
@凌驾
公共类型信息getProducedType(){
返回TypeInformation.of(Event.class);
}
}

您尝试了什么?你在哪里卡住了?您应该已经创建了一个自定义POJO,并使用标准CSV解析器代替ObjectMapper。您也可以尝试使用表API/SQL,它支持开箱即用的CSV。嗨,Arvid,我是Java和Flink的新手,所以我很难实践您的建议。我来自python.net。下面Mikalai的例子正是我想要的。谢谢这太棒了!!!给我几天时间,这样我可以消化/处理它,它看起来正是我想要的,在结构上与JSON非常相似,显然它很有意义。你也给了我实现序列化的事件,太好了!非常感谢你!!我把所有东西都准备好了,现在我在实现简单反序列化器的事件类上遇到了一些问题。我正在与:--我将再次尝试,看看我是否可以使它工作,但迄今为止没有运气。如果我在接下来的几天里找不到解决方案,我会为此发布另一个问题。谢谢