分布式计算—在节点可以处理元组之前,apache storm在哪里存储元组?

ifsvaxew  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(234)

我正在阅读apachestorm,以评估它是否适合我们的实时处理需求。
有一件事直到现在我还没弄清楚——在下一个节点无法处理元组的时候,元组存储在哪里。例如,假设喷口a以每秒1000元组的速度生产,但是下一级的螺栓(处理喷口a输出)只能以每秒500元组的速度集体消耗。其他元组呢?它是否有一个基于磁盘的缓冲区(或其他东西)来解释这个问题?

jum4pzuy

jum4pzuy1#

storm使用内存中的内部消息队列。因此,如果一个bolt不能继续处理,消息就被缓冲在那里。
在Storm1.0.0之前,这些队列可能会超出限制(即,出现内存不足异常,并且您的工作线程会死亡)。为了防止数据丢失,您需要确保喷口可以重新读取数据(请参阅https://storm.apache.org/releases/1.0.0/guaranteeing-message-processing.html)
不过,您可以使用“max.spout.pending”参数来限制飞行中的元组来解决这个问题。
自storm 1.0.0起,支持背压(参见https://storm.apache.org/2016/04/12/storm100-released.html). 这允许bolt在队列增长过大时通知其上游生产商“减速”(在队列变空时再次加速)。在您的喷口螺栓示例中,在这种情况下,喷口将减速以发出消息。

wwodge7n

wwodge7n2#

通常,风暴喷口读取一些持久存储并跟踪元组的完成情况,以确定何时可以安全地删除或确认该存储中的消息。香草风暴本身并不存在元组。元组将在发生故障时从源中重放。
我不得不同意其他人的看法,你应该看看鹭。自storm问世以来,流处理框架有了显著的进步。

相关问题