storm bolt数据库连接

gg0vcinb  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(275)

我正在使用storm(java)和cassandra。
我的一个螺栓把数据插入Cassandra。有没有办法在这个螺栓的示例化之间保持与cassandra的连接处于打开状态?
我的应用程序写速度很快。螺栓每秒需要运行几次,而每次都与Cassandra相连,这一事实阻碍了螺栓的性能。
如果我可以有一个静态连接保持打开,它会运行得更快,但我不确定在storm中能否实现这一点。
澄清问题:
storm拓扑中静态连接的范围是什么?
与其他消息传递系统不同的是,其他消息传递系统中的worker在循环中进行“工作”,或者回调可以使用循环外的变量(可能是静态连接),每次调用它们时似乎都会示例化,并且不能将参数传递给它们,因此如何使用与cassandra相同的连接?

m4pnthwp

m4pnthwp1#

与其他消息传递系统不同的是,其他消息传递系统的worker的“工作”是在循环中进行的,或者回调可以使用循环外的变量(可能是静态连接),每次调用它们时,似乎都会示例化,并且不能将参数传递给它们
说暴风雪会带来 instantiated each time 他们打电话来了。例如 prepare 方法只在初始化阶段调用一次。医生说的
当此组件的任务在集群上的工作进程内初始化时,将调用它。它为螺栓提供执行螺栓的环境。
因此,最好的办法是将初始化代码放在prepare或open(如果是spouts)方法中,因为它们将在任务启动时被调用。但是您需要使它成为线程安全的,因为它将由每个任务在自己的线程中并发调用。
这个 execute(Tuple tuple) 另一方面,方法实际上负责处理逻辑,并在每次从相应的喷口或螺栓接收元组时调用
这个 cleanup 文档中说,当一个ibolt要关闭时,方法被调用
无法保证将调用cleanup,因为主管在集群上终止-9的工作进程。保证调用cleanup的上下文之一是在本地模式下运行storm时终止拓扑
所以不能将变量传递给它并不是真的,可以用prepare方法示例化任何示例变量,然后在处理过程中使用它。
关于db连接,我不太清楚您的用例,因为您没有编写任何代码,但是维护一个资源池对我来说是个不错的选择。

相关问题