Flink map函数操作数据库

本文讲述了在使用Flink进行流处理任务时遇到的数据库操作问题及解决办法。最初尝试使用连接池druid,但由于无法序列化导致失败。接着尝试在map函数内直接建立和关闭连接,但造成数据库连接数爆炸。最终采用RichMapFunction,通过open和close方法管理连接,但发现长时间未使用可能导致连接被服务器关闭。最后,再次引入druid连接池,并确保正确管理,成功解决了问题。
摘要由CSDN通过智能技术生成

刚接触flink没多久,做的一个flink流处理任务,状况百出,下面聊一聊关于数据库操作出的状况。

需求:需要从数据库取一些判断条件,流数据根据判断条件做一些变换(map),所以决定直接在map里操作数据库

1.最初版(调试前):第一反应,操作数据库,上连接池,所以在main里面直接建了一个连接池(druid),然后再map函数里用。结果直接无法运行,原因,无法序列化。看druid源码,druid的Connection实例是没有实现序列化接口的。。。

2.本着先实现再优化的原则:直接在map函数里建立jdbc连接,操作数据库(但是总感觉一定会有问题,频繁连接,断开,本来也影响性能)。调试OK,测试环境跑了一段时间,被告知数据库的连接数爆掉了。。。(可能跟代码不严谨有关系,漏了一个地方的连接关闭操作)无论如何,准备优化。

3.各种查资料,得出结论,用RichMapFunction来实现,在open()方法中建立连接,在close()方法中关闭连接,map方法中应用。调试OK...高高兴兴回家,突然晚上觉得会有问题,连接长时间不用,会不会被mysql服务器主动断掉?第二天早上到公司(一个晚上没有数据处理,但是任务一直启动着),果然,数据库连接丢失,所有数据处理都出问题了。

4.既然猜到是数据库连接被服务器端主动关闭的问题,那么还是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值