kafkaspot在ack机制下如何保证内存不溢

- public class MySpout extends BaseRichSpout {
- private static final long serialVersionUID = 5028304756439810609L;
- // key:messageId,Data
- private HashMap<String, String> waitAck = new HashMap<String, String>();
- private SpoutOutputCollector collector;
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("sentence"));
- }
- public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
- this.collector = collector;
- }
- public void nextTuple() {
- String sentence = "the cow jumped over the moon";
- String messageId = UUID.randomUUID().toString().replaceAll("-", "");
- waitAck.put(messageId, sentence);
- //指定messageId,开启ackfail机制
- collector.emit(new Values(sentence), messageId);
- }
- @Override
- public void ack(Object msgId) {
- System.out.println("消息处理成功:" + msgId);
- System.out.println("删除缓存中的数据...");
- waitAck.remove(msgId);
- }
- @Override
- public void fail(Object msgId) {
- System.out.println("消息处理失败:" + msgId);
- System.out.println("重新发送失败的信息...");
- //重发如果不开启ackfail机制,那么spout的map对象中的该数据不会被删除的,而且下游
- collector.emit(new Values(waitAck.get(msgId)),msgId);
- }
- }
- collector.emit(tup, new KafkaMessageId(_partition, toEmit.offset));
- public void ack(Object msgId) {
- KafkaMessageId id = (KafkaMessageId) msgId;
- PartitionManager m = _coordinator.getManager(id.partition);
- if (m != null) {
- m.ack(id.offset);
- }
- }
- m.ack(id.offset);
- public void ack(Long offset) {
- _pending.remove(offset);//处理成功移除offset
- numberAcked++;
- }
- public void fail(Object msgId) {
- KafkaMessageId id = (KafkaMessageId) msgId;
- PartitionManager m = _coordinator.getManager(id.partition);
- if (m != null) {
- m.fail(id.offset);
- }
- }
- m.fail(id.offset);
- public void fail(Long offset) {
- failed.add(offset);//处理失败添加offset
- numberFailed++;
- }
- SortedSet<Long> _pending = new TreeSet<Long>();
- SortedSet<Long> failed = new TreeSet<Long>();
关于kafkaspot的源码解析大家可以看这边博客:http://www.cnblogs.com/cruze/p/4241181.html
源码解析中涉及了很多kafka的概念,所以仅仅理解kafka的概念想完全理解kafkaspot源码是很难的,如果不理解kafka概念,那么就只需要在理解storm的ack机制上明白kafkaspot做了上面的两件事就可以了。
kafkaspot在ack机制下如何保证内存不溢的更多相关文章
- Linux下TCP延迟确认(Delayed Ack)机制导致的时延问题分析
版权声明:本文由潘安群原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/105 来源:腾云阁 https://www.qclo ...
- Storm的ack机制在项目应用中的坑
正在学习storm的大兄弟们,我又来传道授业解惑了,是不是觉得自己会用ack了.好吧,那就让我开始啪啪打你们脸吧. 先说一下ACK机制: 为了保证数据能正确的被处理, 对于spout产生的每一个tup ...
- RabbitMQ的消息确认ACK机制
1.什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持消 ...
- rabbitmq++:RabbitMQ的消息确认ACK机制介绍
1):什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持 ...
- Storm可靠性实例解析——ack机制
对于Storm,它有一个很重要的特性:“Guarantee no data loss” ——可靠性 很显然,要做到这个特性,必须要track每个data的去向和结果.Storm是如何做到的呢——ack ...
- Linux 下增大tomcat内存
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- Redis系列--内存淘汰机制(含单机版内存优化建议)
https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每台redis的服务器的内存都是 ...
- ARC机制下组合关系
// // Person.h // 01-autorelease基本概念 // // Created by apple on 14-3-18. // Copyright (c) 2014年 a ...
- 32位Windows7上8G内存使用感受+xp 32位下使用8G内存 (转)
32位Windows7上8G内存使用感受+xp 32位下使用8G内存 博客分类: Windows XPWindowsIE企业应用软件测试 我推荐做开发的朋友:赶快加入8G的行列吧....呵呵..超爽 ...
随机推荐
- Xcode升级 Alcatraz 无法使用
Alcatraz 主要是可以管理xcode 插件 随着 Xcode 的更新 Alcatraz 有可能无法使用 以下是解决办法: 1,关闭Xcode 2,如果已经安装过 Alcatraz,先卸载掉,然后 ...
- Atitit.创业之uke团队规划策划 v9
Atitit.创业之uke团队规划策划 v9 Uke org prjAuthor撰写人:绰号:老哇的爪子( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努 ...
- 【初恋】vue单页应用开发总结
vue新人,没有高级技巧 本文主要总结了使用vue-cli脚手架安装开发环境,使用vue.js等进行单页应用开发所遇问题的总结. 技术栈: Vue v1.0.21, vue-resource v0.9 ...
- 搜狗输入法wp风格皮肤
换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...
- JDK安装源码src和doc
(1)src 打开JDK的安装目录如(C:\Program Files\Java\jdk1.8.0_91)有一个src.zip的压缩文件,这个压缩文件里就是源码. mkdir src copy src ...
- CSS系列:CSS的继承与层叠特性
1. CSS的继承特性 所有的CSS语句都是基于各个标记直接的继承关系,CSS继承是指子标记会继承父标记的所有样式风格,并可以再父标记样式风格的基础上再加以修改,产生新的样式,而子标记的样式完全不会影 ...
- 万能Adapter以及ViewHolder性能优化
//CommonAdapter import android.content.Context; import android.widget.BaseAdapter; import java.util. ...
- 快速搭建php环境
WAMP:在windows系统下搭建PHP开发环境 APPSERVER: 两种可用于开发环境的,一般用WAMP LAMP构架 Linux系统 Apache服务器管理软件 Mysql数据库 php语言 ...
- 【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 本博客其他.NET开源项目文章目录:http://www.cnbl ...
- BFC之浅析篇
BFC是什么呢? 掏粪男孩? 当然不是咯.BFC,英文名Block formatting context,直译为“块级格式化上下文”.它是W3C CSS 2.1规范中的一个概念,决定了元素如何对内容进 ...