大数据_Storm_allGrouping方式需要注意的几个点
来源:互联网 发布:舔红叶知弦的脚哪一集 编辑:程序博客网 时间:2024/05/19 18:17
最近碰到一个storm的坑, 两个bolt都需要从kafkaSpout中获取数据进行各自的业务处理, bolt1的处理是幂等的, bolt2的处理是非幂等的, 上线后发现非幂等的bolt处理总是会处理两次, 代码如下:
//创建拓扑作业 TopologyBuilder builder = new TopologyBuilder(); //1. 创建Spout,负责时间调度 builder.setSpout("timeSpout", new TimeScheduleSpout(60 * 60), 1); //2. 创建Spout,从Kafka中读取信息,流ID:RcKafkaSpout builder.setSpout("RcKafkaSpout", new KafkaSpout(spoutConfig), RiskControllConfig.getInt(StormConfig.STORM_SPOUT_PARALLELISM_HINT, 1)); //3. 创建Bolt,处理Kafka中读取的信息, redis计数,流ID:RcAnalyzeBolt builder.setBolt("RcAnalyzeBolt", new RcAnalyzeBolt(), RiskControllConfig.getInt(StormConfig.STORM_BOLT1_PARALLELISM_HINT, 1)).allGrouping("RcKafkaSpout").allGrouping("timeSpout");//非幂等的叠加操作 //4. 创建Bolt,将处理的结果存储至Redis builder.setBolt("RcAggregateBolt", new RcAggregateBolt(), RiskControllConfig.getInt(StormConfig.STORM_BOLT2_PARALLELISM_HINT, 1)).shuffleGrouping("RcAnalyzeBolt"); //5. 更新用户已完成订单金额的bolt builder.setBolt("LastOrderBolt", new LastOrderBolt(), RiskControllConfig.getInt(StormConfig.STORM_BOLT1_PARALLELISM_HINT, 1)).allGrouping("RcKafkaSpout");//幂等的hbase put操作
红色位置即为bug, 错误原因是对 storm 消息分发策略的理解有问题
徐明明的博客在这一点上讲的有点误导: http://xumingming.sinaapp.com/117/twitter-storm%E7%9A%84%E4%B8%80%E4%BA%9B%E5%85%B3%E9%94%AE%E6%A6%82%E5%BF%B5/
All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到。
实际上, 官网的解释如下:
http://storm.apache.org/documentation/Concepts.html
All grouping: The stream is replicated across all the bolt's tasks. Use this grouping with care
应该是对于每个tuple, 所有Bolt的所有task(也就是线程)都会收到, 也就意味着, 如果你的并行度设置>1, 则每个tuple会被bolt处理N次
allgrouping, 一般用于全局的数据同步和共享才需要, 比如全局的配置更新等, 比如上面的用于定时更新缓存数据的timeSpout, 我们就使用的是allgrouping方式。
0 0
- 大数据_Storm_allGrouping方式需要注意的几个点
- 关于addSubView需要注意的几个点
- 文件上传需要注意的几个点
- 关于addSubView需要注意的几个点
- addSubView需要注意的几个点
- addSubView需要注意的几个点
- 关于addSubView需要注意的几个点
- c++中几个需要注意的点
- 分布式项目的几个需要注意的点
- 数字电路设计之需要注意的几个点
- AsynckTask几点需要注意的几个地方
- 开发者提交产品前需要注意的几个点
- 学习一门编程技术需要注意的几个点
- 开发者提交产品前需要注意的几个点
- 测试用例设计需要注意的几个点
- 测试用例设计需要注意的几个点
- 强调一下数据恢复需要注意的几个事项
- 关于数据序列化(3),使用JSON的方式,以及几个注意的点,以及fastJson的坑
- bzoj1141(矩阵hash)
- Ajax----原生,jquery, 跨域:jsonp, cors
- 【翻译】Java对象克隆指南
- MFC中CALLBACK函数 和WINAPI函数的区别
- List排序
- 大数据_Storm_allGrouping方式需要注意的几个点
- HDU 1058 Humble Numbers 【DP】
- 移动前端开发之viewport的深入理解
- CodeForces 701B Cells Not Under Attack
- Open Settings on cciPhone and navigate to General -> Device Management, then select your Developer A
- Xcode代码无高亮,提示Symbol Not Found
- js单选框选中后如何取消选中
- python读取文件夹下面的文件
- Alluxio层次化存储简介