Jstorm 基本概念

简介: Jstorm 基本概念

本质

1.基于消息的流水线处理模型
2.是一套类似MapReduce一样的编程模型
3.内核是一套调度系统

适合的业务

1.高并发的计算任务
2.数据流之间相互无依赖

编程模型

1.Topology:即一个数据流的拓扑结构,包含多个Spout和Bolt
2.Spout:从外部获取数据,包含DB,Hbase,Kafka等
3.Bolt :计算单元,系统内计算流转数据
1.png

角色

1.Nimbus: 资源调度角色,可主备
2.Supervisor: 接受nimubs 任务安排,启动任务,管理Worker
3.Worker: 进程
4.Executor: 执行线程,继承自Runnable
5.Task: 执行逻辑单元,继承自Runnable

ack机制

ack闭环,保证数据不丢失(以后会结合源码分析ack实现)
1.png

1.设置acker 的并行个数,如果设置为0,acker失效,不能保证数据不丢失,或者设置配置topology.acker.executors(默认为null,即与该任务的work数一致)

stormConf.setNumAckers(JStormUtils.parseInt(conf.getProperty("jstorm.acker.num")));

2.Spout 发送消息必须带msgId,否则不能实现acker闭环

collector.emit(new Values(strMsg), new KafkaMessageId(partition, toEmitMsg.offset()));

3.Bolt发送消息必须传入接收到的tuple作为anchors参数的值,这样才能锚定tuple,将此Bolt纳入Ack闭环中

public List<Integer> emit(String streamId, Collection<Tuple> anchors,List<Object> tuple)

4.topology.max.spout.pending设置,默认为null,无限。对spout task接收速度进行流控。当topology.max.spout.pending=5000,对于spout而言,还有5000个没有进行ack,就会停止spout的nextTuple。

topology.max.spout.pending设置后,会降低整个系统的吞吐量,可根据自己系统要求自行设置,以先某个数值开始,不断增加,最终达到系统稳定且吞吐量合适

topology.max.spout.pending要起作用,必须锚定tuple,因为这个是在ack闭环的基础上实现的。所以必须满足条件1,2,3

5.spout发送的事件在超时时间(topology.message.timeout.secs 默认为30s)内没有最终ack闭环,系统就会自动调用spout.fail,由spout编写者自行处理,一般在里面实现重传,如果实现不好,或者不处理,数据也会丢失

6.acker闭环并不保证数据不丢失,只是提供了一个机制可以实现数据不丢失,取决于Spout的编写者。acker闭环完成会调用spout.ack,闭环失败或者超时会调用 spout.fail

作者:glowd

原文:https://blog.csdn.net/zengqiang1/article/details/78436585
版权声明:本文为博主原创文章,转载请附上博文链接!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
算法 小程序 大数据
健康码是怎样识别你"绿"了?-健康码的前世今生
健康码是怎样识别你"绿"了?-健康码的前世今生
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
313 3
|
SQL Java 数据库连接
Hibernate 批量操作来袭!掌握最佳实践,轻松应对数据洪流,开启高效开发新时代
【9月更文挑战第3天】在软件开发中,高效数据操作至关重要。作为流行的Java持久化框架,Hibernate提供了强大的数据库操作功能。本文探讨了Hibernate批量操作,包括批量插入、更新和删除的最佳实践,通过使用原生SQL和`Session`的`createNativeQuery()`方法,结合`addBatch()`及`executeBatch()`方法实现高效批量操作。合理设置批量大小、事务管理和性能测试是优化的关键。在实际开发中,应根据业务需求和性能要求选择合适的方法,以提升程序性能和可维护性。
797 3
|
消息中间件 存储 缓存
如何打造高可用消息队列?一文读懂关键技术
本文由程序员小米分享如何设计高性能、高可用的消息队列。内容涵盖一致性(生产者确认、消费者幂等性、Broker同步)、可用性(数据不丢不重、持久化策略)、分区容错(选举机制、多副本同步)、海量数据处理(消息积压、Topic性能优化)及性能优化(时间轮、零拷贝、IO多路复用、顺序读写、压缩批处理)等方面,旨在确保分布式系统中消息的可靠性、一致性和高性能。
316 0
|
数据可视化 数据挖掘 Python
Matplotlib图表类型详解:折线图、柱状图与散点图
【4月更文挑战第17天】本文介绍了Python数据可视化库Matplotlib的三种主要图表类型:折线图、柱状图和散点图。折线图用于显示数据随时间或连续变量的变化趋势,适合多条曲线对比;柱状图适用于展示分类数据的数值大小和比较;散点图则用于揭示两个变量之间的关系和模式。通过示例代码展示了如何使用Matplotlib创建这些图表。
|
机器学习/深度学习 算法 决策智能
Python高级算法——遗传算法(Genetic Algorithm)
Python高级算法——遗传算法(Genetic Algorithm)
1303 0
|
Python
whl文件安装库和pip换源
whl文件安装库和pip换源
1222 0
whl文件安装库和pip换源
|
存储 Cloud Native Java
全栈开发之MinIO分布式文件存储集群
全栈开发之MinIO分布式文件存储集群
1373 0
全栈开发之MinIO分布式文件存储集群
|
弹性计算 固态存储 网络协议
阿里云服务器通用型g6和计算型c6有什么区别?CPU内存比差异
阿里云服务器通用型g6和计算型c6有什么区别?一个是ECS通用型g6实例,一个是ECS计算型c6实例,CPU内存比不同,CPU均采用2.5 GHz主频的Intel Xeon Platinum 8269CY(Cascade Lake),睿频3.2 GHz
712 0
阿里云服务器通用型g6和计算型c6有什么区别?CPU内存比差异
|
机器学习/深度学习 消息中间件 SQL
原创 | 以Spark性能调优为例,说说如何书写简历项目的技术难点
原创 | 以Spark性能调优为例,说说如何书写简历项目的技术难点
原创 | 以Spark性能调优为例,说说如何书写简历项目的技术难点