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