团队的业务需求,flink实时计算任务在sink polarDb时,每个任务都需要编写实体类sink代码,重复工作浪费时间。
观察之后发现代码可以实现通用sink,代码有重合。
通过泛型传入实体对象,通过反射获取字段名和字段值。
原来的sink代码,如果实体类字段非常多的话,可能要重复编写几十上百行,复杂枯燥且容易出错。
public class EventTopicSink extends RichSinkFunction<EventTopic> {
PreparedStatement ps;
private Connection connection;
@Override
public void invoke(EventTopic value, Context context) throws Exception {
String sql = SourceUtil.mysqlDml().get("polar_replace_pid_user_last_view_time");
connection = EnvUtil.getConnectionByEnv();
ps = connection.prepareStatement(sql);
ps.setObject(1, value.getDistinct_id());
ps.setObject(2, value

本文介绍了如何通过Flink的CommonSink实现通用化的数据存储,利用泛型和反射技术,避免为每个实时计算任务编写特定的实体类sink代码,简化了大量重复的工作,提高效率并减少了出错的可能性。
最低0.47元/天 解锁文章
1766

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



