Samza

一、基本概念

1.作业
一个作业(Job)是对一组输入流进行处理转化成输出流的程序。

2、分区

  Samza的流数据单位一条条消息。Storm中的元组,Spark Streaming中的DStream。
  Samza中的每个流都被分割成一个或多个分区,对于流里的每一个分区而言,都是一个有序的消息序列,后续到达的消息会根据一定规则被追加到其中一个分区里。

 

3.任务
一个作业会被进一步分割成多个任务(Task)来执行,其中,每个任务负责处理作业中的一个分区
分区之间没有定义顺序,从而允许每一个任务独立执行
YARN调度器负责把任务分发给各个机器,最终,一个作业中的多个任务会被分发到多个机器进行分布式并行处理

 4、数据流图

一个数据流图是由多个作业构成的,其中,图中的每个节点表示数据流,每条边表示数据流传输方向
多个作业串联起来就完成了流式的数据处理流程
由于采用了异步的消息订阅分发机制,不同任务之间可以独立运行

 

二、系统框架

Samza系统架构主要包括
流数据层(Kafka)--流数据来源
执行层(YARN)--资源管理
处理层(Samza API)--实际处理流数据
流处理层和执行层都被设计成可插拔的,开发人员可以使用其他框架来替代YARN和Kafka

 

1、Samza流数据处理分析过程如下:
(1)Samza客户端需要执行一个Samza作业时,它会向YARN的ResouceManager提交作业请求
(2)ResouceManager通过与NodeManager沟通为该作业分配容器(包含了CPU、内存等资源)来运行Samza ApplicationMaster
(3)Samza ApplicationMaster进一步向ResourceManager申请运行任务的容器
(4)获得容器后,Samza ApplicationMaster与容器所在的NodeManager沟通,启动该容器,并在其中运行Samza Task Runner
(5)Samza Task Runner负责执行具体的Samza任务,完成流数据处理分析

 

posted on 2017-08-12 16:39  ostin  阅读(154)  评论(0)    收藏  举报