flume:
分布式的日志收集系统。
作用就是监控数据
三个组件:
agent=source+channel+sink
- source:数据源 各种数据源。
- channel:在sink组件确保数据准确无误的送到目的地之后,暂时存在channel中的数据就会被清除,目的是为了保证数据的安全性。
- sink:下沉 把数据发送到某一个地方去 可以送到任何地方去。
组件之间的数据传递方式:
整体来说是通过flow(数据流)的形式传递数据。
内部是通过很多个event传递数据。
event是flume数据传递的最小单元
每个event里都包含数据的元数据和真实数据
如果是文本文档的话,每个event都会携带一行数据。
配置文件:
可以有很多个配置文件,每个配置文件都有自己的source和sink。
内容三大模块:
a.对agent和agent里的每个组件进行命名
b.分别对source,channel,sink进行配置
c.各个组件之间通过名字进行连接组合
启动服务:
flume-ng agent --name a1 --conf conf --conf conf/xxx -Dflume.roor.logger=INFO,console &
几种数据的传递方式:
1.socket
2.ftp:文件共享服务器
3.共享数据库
4.消息系统
中间件的好处:
1.系统解耦
2.削峰填谷
3.数据交换
4.异步通知
5.定时任务
kafka:
就是一个分布式的,可分区的,可复制的消息队列
分布式的:数据是存储在集群中的不同节点上
可分区的:同一个主题下,可以对数据进行分区
可复制的:在同一个分区下,由leader和follower保证有设置的副本份数
组成:
- producer:生产者
- broker:一个broker就是一个kafka的服务,消息中间件
- consumer:消费者
- zookeeper:用来协调生产者和消费者之间的节点的资源调度
- topic:主题,用来对数据进行分类的依据
- partition:分区,对同一个主题下的数据进行多分区存储
storm:
纯实时的计算框架
storm和sparkStreaming的区别:
- 响应时间:
storm的响应时间为毫秒级别
sparkStreaming的响应时间为秒级 - 处理方式:
storm是纯实时,使用流处理方式。
sparkStreaming是伪实时,使用微批次处理方式。
应用场景:
如果说场景为对响应时间要求特别高的情况,必须要选择纯实时框架。
如果对响应时间没有特别高需求的话,sparkStreaming是性价比较高的选择
storm几个关键词:
- 主节点:集群中的负责全局任务的分配的节点,全局只有一个。
- 从节点/工作节点:集群中具体执行内容的节点,全局可以有多个。
- nimbus:主节点上启动的守护进程,负责整体的任务调度。
- supervisor:
从节点上启动的守护进程,负责分配给他那部分的任务调度
根据实际情况开启或关闭worker进程。 - worker:在每个从节点中,启动的执行任务的进程。每个节点可以有多个
- executer:进程里的线程。
- task:线程中的并行度。最小的计算单元
- zookeeper:对于nimbus,supervisor,worker保持心跳机制。
- topology:拓扑。storm中提交的任务。全局只有一个,不受数据限制。
- spout:topology中负责发送数据的组件。
- bolt:
topology中负责处理数据的组件,每个步骤都是一个bolt
可以接收spout和其他bold传来的数据。 - tuple:storm计算过程中的最小的数据单元。
- task里执行tuple。最小的计算单元处理最小的数据单元。
topology:
拓扑,是storm提交的任务。
内部有两类组件:
- spout:
只负责发送数据。可以有多个,但是一般是在最开始的位置。 - bolt:
接收spout或者其他bolt传递过来的数据。可以有多个。
执行:
进程:执行topology。
线程:在进程中可以有很多线程,每个线程处理一个spout或一个bolt组件。
并行度:最小的计算单元,处理的是最小的数据单元tuple。
分组:
对于task内的tuple的流动有不同的分组方式:
1.shuffle grouping:随机分组,尽量平均。
2.none grouping:不分组,相当于是随机分组
3.field grouping:按字段分组
4.direct grouping:直接分组
5.all grouping:广播发送
6.global grouping:全局分组