Druid Real-time Node

Druid的Real-time 节点,主要负责实时数据索引的创建。源源不断的数据流已增量的方式填充到JVM的heap中,写到堆中的索引是可以直接被查询的。为防止堆溢出,Real-time节点会定期或在达到一定大小限制时,将JVM堆中的索引持久化到磁盘上,每个被持久化的索引是不可变的,并且Real-time节点会将持久化的索引加载到堆外的内存中来保证继续被查询到。

Real-time节点的流程图如下:

Real-time节点在内存(in-memory)中缓存事件(event)索引,然后定期持久化到磁盘,然后定期的将已持久化的索引合并为数据块(segment),然后这些segment会被加载到一个off-heap 内存(off-heap memory)中。在查询时,会同时向in-memory和off-memory发送请求。

 

对于定期持久化的方式,Real-time节点会启动一个后台任务,来定期扫描已持久化到本地的索引,然后按已定的时间段分组,合并(merge)为若干个数据块(block),称之为Segment。待合并结束,Real-time节点会将这些Segment上传到分布式文件系统中,做备份,通常是S3、HDFS,这一过程,称之为Deep Storage(深度存储)。

从数据的摄取(ingest)、持久化(persist)、合并(merge)、上传(upload)等这些步骤都是流式的,整个过程不会有数据丢失。

Real-time节点是一个数据消费者,需要一个或多个生产者提供源源不断的流数据。通常,会在生产者和Real-time节点之间创建一个消息总线(message bus),生产者向消息总线推送数据,Real-time节点从消息总线中消费数据。

消息总线通常选用的是Kafka,一方面用作消息缓冲,另一方面扮演一个终端(endpoint),多个Real-time节点可以从中读取数据,这样多个Real-time节点可以分别读取流(Stream)的部分数据(Kafka的partition 特性),也利于Real-time节点的扩展(每个节点读取部分数据)。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值