优秀程序员大数据教程:风暴架构,风暴架构:主/从
主节点:光轮
负责拓扑分布以及集群上资源的调度和监控
工作节点:主管
收到任务请求后,启动一个或多个工作进程来处理任务;默认情况下,主管最多可启动4名员工
工作过程:工人
在Supervisor的子流程中,有几个Spout和Bolt线程,负责Spout和Bolt组件的处理任务(实际上是打开的执行器线程)
作业:拓扑(无限循环,永无止境)
喷口:获取数据的组件
螺栓:处理数据的组件
流:喷口和螺栓之间的数据流通道
元组:
1)流的最小单位,Spout向Bolt发送一次数据,称为Tuple
2)同一流中元组的类型相同,但不同的流可能相同/不同
3)键值形式的映射
数据流分发策略(流分组):
解决了Spout和Bolt之间的数据传输(发送元组)问题
1)洗牌分组:
将流中的元组随机调度到螺栓
2)字段分组:
根据字段的哈希值和螺栓的数量,将它们分组发送。一个节点是工人,一个螺栓是任务。所有节点的线轴或螺栓数量称为并发。
风暴并发设置:
1.1。工作线程并发:
首先,它是根据群集大小和群集的物理位置设置的
工作人员通常被分配到每个节点,默认情况下,主管设置一个工作人员
2.喷口数量设置:
默认情况下,线轴总数等于卡夫卡(消息中间件)对应的主题分区数,提高了吞吐速度
一般来说,工人设置一个喷口
3.螺栓1数量设置:
首先,根据数据量和处理数据的时间进行设置
一般情况下,Bolt1的数量是Spout的两倍(根据项目修改)
4.螺栓2数量设置:
首先根据数据量和处理时间来设置,因为Bolt1传输的中间结果数据已经减少了很多,Bolt2的数量可以适当减少。
容错机制:异或模式:
TupleId-生成新数据时,会生成一个TupleId;
整个流程中的元组标识在顺序上或末尾是不同的
如果结果为0,则数据正确,否则为错误
MessageId——代表整个信息,在API中指定,提供给程序员。长的
代表一条信息,并被提供给风暴框架
有两种数据操作失败的情况:
execute(){
1.异常(数据异常)
2.任务超时-处理被认为失败
}
如何解决数据传输造成的重复数据传输问题?
Ⅰ.
1.例如,处理订单信息,并在成功处理后将订单信息存储到Redis(set)
2.发送信息时,判断信息是否经过处理
execute(){
if()
else()
}
Ⅱ.
无处理:点击流日志分析:pv,uv
指标分析:订单号和订单金额
消息可靠性保证和分组机制:打开/下一个元组/确认/失败/关闭
ⅰ.喷口等级:
在发送元组时,Spout会提供一个msgId,以便以后识别元组;Storm将根据msgId跟踪创建的元组树,直到元组被完全处理。根据msgId,它会调用最初发送元组的Spout中的ack()方法,如果检测到超时就调用fail()方法——这两个方法必须由最初创建元组的Spout调用;当Spout从消息队列中取出一条数据(卡夫卡/rockemq)时,实际上并没有取出,而是保持暂停状态,等待消息完成信号,暂停状态的信息不会发送给其他消费者;当消息被“取出”时,队列将向客户端提供消息体数据和唯一的msgId。当调用Spout的ack()/fail()方法时,Spout请求队列根据发送的id将消息移除/放回队列。
ⅱ.acker任务:
高效的实现可靠性——在Spout中定义的ack()和fail()方法必须在Bolt中显式调用。风暴拓扑有一些特殊的任务叫做“acker”,它负责跟踪由Spout发送的元组的DAG。当一个acker发现DAG完成时,它会发送一个消息给创建了Spout元组的Spout任务,并让这个任务来应答这个消息。Acker不直接跟踪元组树。在acker树中存储了一个表,它用一对值来映射喷口元组的id。id是创建元组的任务id,第二个值是64位数字(ack val),它是树中所有已创建或已应答元组的元组id的异或运算的结果。
ⅲ.移除可靠性:
1.设置配置。拓扑_ACKERS至0
2.忽略SpoutOutputCollector.emit方法中的消息id,以关闭spooltuple的跟踪功能
3.发送元组时,选择发送“未锚定”元组
亲爱的大数据爱好者们,虽然现在的学习之路很艰难,但是前面还有很多艰难的战斗。希望大家不管多累都沉下心继续往前跑!
1.《spout 好程序员大数据教程分享:Storm架构》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《spout 好程序员大数据教程分享:Storm架构》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1197642.html