125 Storm 消息容错机制

简介: 125 Storm 消息容错机制
1.总体介绍
  • 在storm中,可靠的信息处理机制是从spout开始的。
  • 一个提供了可靠的处理机制的spout需要记录他发射出去的tuple,当下游bolt处理tuple或者子tuple失败时spout能够重新发射。
  • Storm通过调用Spout的nextTuple()发送一个tuple。为实现可靠的消息处理,首先要给每个发出的tuple带上唯一的ID,并且将ID作为参数传递给SoputOutputCollector的emit()方法:collector.emit(new Values(“value1”,“value2”), msgId); messageid就是用来标示唯一的tupke的,而rootid是随机生成的
    给每个tuple指定ID告诉Storm系统,无论处理成功还是失败,spout都要接收tuple树上所有节点返回的通知。如果处理成功,spout的ack()方法将会对编号是msgId的消息应答确认;如果处理失败或者超时,会调用fail()方法。
2.基本实现

Storm 系统中有一组叫做"acker"的特殊的任务,它们负责跟踪DAG(有向无环图)中的每个消息。

acker任务保存了spout id到一对值的映射。第一个值就是spout的任务id,通过这个id,acker就知道消息处理完成时该通知哪个spout任务。第二个值是一个64bit的数字,我们称之为"ack val", 它是树中所有消息的随机id的异或计算结果。

ack val表示了整棵树的的状态,无论这棵树多大,只需要这个固定大小的数字就可以跟踪整棵树。当消息被创建和被应答的时候都会有相同的消息id发送过来做异或。 每当acker发现一棵树的ack val值为0的时候,它就知道这棵树已经被完全处理了。

3、可靠性配置

有三种方法可以去掉消息的可靠性:

将参数Config.TOPOLOGY_ACKERS设置为0,通过此方法,当Spout发送一个消息的时候,它的ack方法将立刻被调用;

Spout发送一个消息时,不指定此消息的messageID。当需要关闭特定消息可靠性的时候,可以使用此方法;

最后,如果你不在意某个消息派生出来的子孙消息的可靠性,则此消息派生出来的子消息在发送时不要做锚定,即在emit方法中不指定输入消息。因为这些子孙消息没有被锚定在任何tuple tree中,因此他们的失败不会引起任何spout重新发送消息。

目录
相关文章
|
前端开发 Java Apache
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
323 0
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
|
数据可视化 数据挖掘 定位技术
基于geopandas的空间数据分析—geoplot篇(上)
基于geopandas的空间数据分析—geoplot篇(上)
438 9
|
NoSQL MongoDB 开发者
还有3天!8月10日前报名参加MongoDB用户大会上海站享早鸟福利!
立即注册 https://www.mongodb.com/zh-cn/events/mongodb-local/shanghai?utm_campaign=local-sh&utm_source=ali&utm_medium=event&utm_term=ali
2806 1
还有3天!8月10日前报名参加MongoDB用户大会上海站享早鸟福利!
|
缓存 前端开发 JavaScript
【前端基础篇】CSS基础速通万字介绍(上篇)1
【前端基础篇】CSS基础速通万字介绍(上篇)
134 2
|
JavaScript Java 测试技术
基于微信小程序的走失人员的报备平台+springboot+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的走失人员的报备平台+springboot+vue.js附带文章和源代码设计说明文档ppt
164 1
|
XML 前端开发 Android开发
Android架构设计——MVC(1),Android多进程从头讲到尾
Android架构设计——MVC(1),Android多进程从头讲到尾
|
JSON Prometheus Cloud Native
AlertManager实现webhook告警(使用Postman测试)
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线 🍋相关学习资料及其参考文章:prometheus手册,邮件和微信告警,Alertmanager篇 🍊 可以去个人博客网站查看本博客排版更清晰:AlertManager ———————————————— 版权声明:本文为CSDN博主「程序员小王java」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn
2327 0
AlertManager实现webhook告警(使用Postman测试)
|
前端开发 JavaScript API
JavaScript学习 -- axios的使用
JavaScript学习 -- axios的使用
220 0
|
JSON Java 数据格式
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
363 0
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
|
自然语言处理 编译器 Linux
C++入门 - 1(几分钟让你快速入门C++)(上)
C++入门 - 1(几分钟让你快速入门C++)
171 0