转自钉钉群21789141:请教大牛,我自己写了一个SinkFunction,继承了RichSinkFunction,初始化这个SinkFunction时,我传进去了一个数据库连接池对象,在SinkFunction的invoke里,调用数据库连接池对象来写数据库。我的问题是,当SinkFunction被partition到多个机器的vm执行时,这个数据库连接池对象是在程序入口的JobClient(程序提交所在的机器VM),还是这个对象也被复制了好多份,有多少个SinkFunction在运行就有多少个数据库连接池对象?
鲁尼:取决于你的连接池对象是在哪里初始化的,如果是构造函数里就初始化好了,那在客户端就做了,连接池对象会被尝试序列化并分发到多个分布式worker。如果是在类似open的时候才初始化,那就一个task一个(除非这个连接池对象做了一些进程级别的共享,刚好你有多个task调度到了同一个进程)
问:那你说的这2种情况,A:初始化了在序列化分发,B:分别在worker/tasker里自己初始化。对于连接数最大限制来说,其实连接数最大限制都是只在worker/tasker里有限制,而不是在整个范围内限制了对吗?也就是我定最大连接数限制1000,不是所有的worker/tasker加起来不超过1000,而是每个worker/tasker不超过1000?
鲁尼:看你的连接数限制是连接池这的限制还是数据库server那边的限制了,连接池这边的话,确实就是单task内限制了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。