实时流处理:Storm与Trident的深入解析
1. Storm Acking框架
在理解了Storm的可靠性之后,我们来探讨确保所有关于确认(ack)或失败(fail)的更新都能成功到达Spout的重要组件——Acker进程。Acker进程是与Spout和Bolt共存的轻量级任务,负责将所有成功执行的消息确认信息发送给Spout。其数量由Storm配置中的 TOPOLOGY_ACKER_EXECUTORS 属性控制,默认情况下,它等于拓扑中定义的工作进程数量。
- 对于低TPS(每秒事务数)的拓扑,应减少Acker的数量。
- 对于高TPS的拓扑,则应增加Acker的数量,以确保元组能以到达和处理的速率被确认。
Acker使用以下算法来跟踪通过拓扑播放的每个元组的元组树的完成情况:
1. 维护一个校验和哈希。
2. 对于每个执行的元组,将其与校验和哈希的值进行异或运算。
3. 如果元组树中的所有元组都被确认,校验和将为0;否则,它将是一个非零值,后者表示拓扑中存在失败。
其工作很大程度上由Tick元组驱动和控制。
2. Storm简单模式
在使用Storm时,有多种常见模式,下面介绍两种不使用Trident的常见模式。
2.1 连接(Joins)
连接是最常见的模式,它将两个或多个不同流的输出在某个公共字段上进行连接,并作为单个元组发出。在Storm中,通过字段分组(fields grouping)可以有效地实现这一点,确保具有相同字段值的所有元组都被发送到同一个任务。示例代码如下:
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



