Storm学习笔记 - 消息容错机制
程序员文章站
2022-07-02 22:50:16
Storm学习笔记 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spout需要记录自己emit(发射)的tuple(消息元祖),当下游bolt处理tuple或者子tuple失 ......
storm学习笔记 - 消息容错机制
文章来自「随笔」
1. storm消息容错机制概念
- 一个提供了可靠的处理机制的spout需要记录自己emit(发射)的tuple(消息元祖),当下游bolt处理tuple或者子tuple失败时spout能够重新发射。
- storm通过调用spout的nexttuple()发送一个tuple。为实现可靠的消息处理,首先要给每个发出的tuple带上唯一的id,并且将id作为参数传递给soputoutputcollector的emit()方法:collector.emit(new values("value1","value2"), msgid);
-
无论处理成功还是失败,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. 案例
看一个简单的示例:spout或bolt处理完tuple后都会生成一个值(示例只使用8位),同一个rootid的值都会做异或,如果最终结果是0则处理过程没有出错。
推荐阅读
-
安卓开发笔记(十九):异步消息处理机制实现更新软件UI
-
js自定义消息机制研究学习(一) ——看百度搜索输入提示
-
学习笔记丨初学Java的反射机制!
-
Storm内部的消息传递机制
-
storm消息可靠机制(ack)的原理和使用
-
Android 消息机制之深入学习MessageQueue
-
Android学习心得(24) --- Android Handler消息机制源码分析
-
SpringCloud学习笔记-自动刷新配置-SpringCloud-Bus(消息总线)
-
SpringCloud2020学习笔记12——SpringCloud Bus 消息总线
-
十七、SpringCloud学习笔记之Bus 消息总线