Más contenido relacionado
La actualidad más candente (20)
王峰:阿里搜索实时流计算技术
- 2. 个⼈人背景简介
• 真名:⺩王峰
• 淘宝花名:莫问
• 微博:淘莫问
• 2006年毕业后加⼊入阿⾥里巴巴集团
• ⼀一淘及搜索事业部(⾼高级技术专家)
• 技术⽅方向:搜索离线系统,Hadoop
Ecosystem
2
- 4. iStream业务背景
• ⼀一淘全⺴⽹网商品搜索
&
淘宝站内商品搜索
• 商品搜索的时效性⾮非常⾼高
• 淘宝卖家更新商品后需要实时处理并推送到搜索引擎
• 全⺴⽹网商品抓取后需要实时处理并推送到搜索引擎
• 全⺴⽹网商品降价后需要实时通知给订阅⽤用户
• 全⺴⽹网商品出现优惠打折需要实时在⾸首⻚页推荐
4
- 10. 基本概念
• Stream
Service:完成⼀一套业务功能的流计算服务
• Stream
Role:具备相同计算逻辑的计算单元组合
• Stream
Worker:Stream
Role中的计算单元
• Stream
Source:Stream
Worker的数据输⼊入源
• Stream
Sink:Stream
Worker的数据输出终端
• Stream
Master:负责调度管理Stream
Workers
10
- 12. 消息管理
• iStream设计理念
– 计算和存储分层,计算之间解耦
• 计算层之间采⽤用持久化分布式消息队列进⾏行消息传递
– 消息不会丢失
– 消息队列可插件化⾃自由选择
– HQueue(基于HBase的分布式消息队列)
• 优势
– 消息管理机制简单,系统吞吐量⼤大
– 上下游计算解耦,不相互阻塞进度,⽅方便新业务接⼊入
– 持久化的消息流,⽅方便多业务共享数据以及问题追查
12
- 13. 进度管理
• 如何衡量流进度的快慢?
– 消息⽣生成时间
vs
消息处理时间
• Master管理Workers进度
– Master
WebUI展⽰示Workers进度
– Master发现Worker进度慢进⾏行报警
• Worker进度持久化和恢复
– Worker定期将进度CheckPoint到Zookeeper
– Worker重启从Zookeeper上的CheckPoint进⾏行恢复
13
- 14. 编程接⼝口
• InputFormat:对Stream
Source的
操作封装
– getSplits(Source):为Stream
Source进⾏行数据分⽚片拆分
– createReader(Split):为Data
Split创建Reader
– reader.next():流式读取消息
Stream
Source
Split
Split
Split
Split
reader reader reader reader
message message message message
14
- 15. 编程接⼝口
• Worker:定制消息业务处理逻辑
– setUp():消息处理前的初始化⼯工作
– cleanUp():消息处理结束后的清理⼯工作
– process(message):处理输⼊入消息
– context.write(message):输出新消息
15
- 17. 编程接⼝口
• OutputFormat:对Stream
Sink的操作封
装
– getPartitionNum(Sink):获取sink的
partition数量
Stream
Sink
Writer
– createWriter(Sink):为Stream
Sink创
建Writer
Message
– writer.write(partitionID,
message):
partitionID
根据groupID向Stream
Sink分发消息
• StreamPartitioner:消息的分发策略
– getPartitionID(message,partitionNum) partition partition partition partition
:获取消息的partitionID,
OutputFormat根据此partitionID决定
Stream
Sink
如何分发消息
17
- 19. 调度流程
4.
start,
register
to
master
Resource
Manager
Stream
Worker
! Stream
Worker
!
3.
allocate
resource,launch
worker
!
5.
heartbeat
request
(metrics)
!
! Stream
Worker
Stream
Master
!
6.
heartbeat
response(ok)
! Stream
Worker
8.
heartbeat
response(stop)
!
2.
launch
master
1.
start
service
7.
stop
service
10.
stop
……
Client
9.
unregister
to
master,stop
19
- 20. 调度策略
• Locality调度
– 让计算单元更加靠近数据,减少⺴⽹网络传输,类似MR的
Locality调度策略
• 弹性调度
– 根据流处理进度动态调整worker数量,保证进度的同时
不浪费资源
• 动态负载均衡
– 动态调整Worker的位置,使分布更加均匀,Locality更
加合理
20
- 21. Locality调度
Switch1
!
!
!
!
!
!
!
Switch2
Node1
Node2
Node3
Data Split1
Data Split2
Data Split3
Stream Worker1
Stream Worker2
Stream Worker3
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
Switch3
Node4
Node5
Node6
Data Split4
Data Split5
Data Split6
Stream Worker4
Stream Worker5
Stream Worker6
!
!
!
!
!
!
!
!
!
21
- 22. 弹性调度
-‐
动态扩容
Stream
Source
Data
Split
Stream
Role
Data
Split
Stream
Worker
1.
进度太慢 2.
分裂
Stream Worker
Data
Split
Stream Worker
…
…
3.
并发能⼒力增加,进度追上
22
- 23. 弹性调度
-‐
动态收缩
Stream
Source
Stream
Role
Data
Split
Data
Split
Stream
Worker
3.
资源被合理回收 2.合并
Data
Split
Stream Worker
Stream Worker
…
…
1.Worker清闲,浪费资源
23