1.定义:
storm是一个分布式实时计算系统,用户只需要提供自己的插件(例如一个jar包,其中编写用户自己的逻辑代码),然后将它部署到storm服务器上,storm的master服务器就会为我们自动将jar包分配到slave服务器的进程中,然后在slave服务器中运行。(注意:master服务器只会接受用户提供的插件(也称之为拓扑,如果是java语言编写的插件可以说一个jar包就是一个拓扑),然后分配代码到slave服务器,在slave服务器上真正运行我们的代码)。
2.特点:低延迟、分布式、高性能、高容错(Ack机制)、可扩展、消息保证有序性。
3.系统角色:
(1)Nimbus:存在于master服务器,主要帮助分配拓扑到slave服务器中。
(2)Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
(3)Worker:运行拓扑的进程。
4.系统组件:
(1)spout:发送数据源的一个组件(在我们提供的拓扑中,实现此接口后在对应方法中获取要处理的数据,比如一个log文件内容,然后发送到所关联bolt进行具体数据内容的处理)。
(2)bolt:接受由spout发送过来的数据进行处理。(bolt主要做数据处理,我们的具体的业务逻辑都写在在此接口的实现类中)。
补充:Task:worker中每一个 Spout /bolt的线程称为一个task. 在 Storm 0.8之后,task不再与物理线程对应,同一个 Spout /bolt的task可能会共享一个物理线程,该线程称为executor。
5.系统原理图:
总结:storm其实就是一个数据实时处理中心,比如我们想要监控系统的日志情况,出现异常后可以记录到数据库,就可以根据storm的规范提供一个组件(也就是拓扑),然后发布到storm集群中就可以了,storm保证了消息的安全性(出现异常不会丢失),有序性,身为程序猿的我们只需要根据系统需求配置好storm服务器的参数(参数后续会将),然后发布我们提供的拓扑就已达到我们的目的。