Druid 流式与批量数据摄取的结合

    我们都知道, Druid在摄取时需要设置一个时间窗口, 在时间窗口之外的数据,将会丢弃。我们如何将这部分丢弃的数据重新摄取进Druid系统中,以提高数据的准确性?通常的做法是把数据保存起来, 等待重新摄取。 目前比较流行的处理方法是Lambda架构。

 

1.Lambda架构

    Lambda是实时处理框架Storm 的作者Nathan Marz 提出的用于同时处理离线和实时数据的架构理念 Lambda架构(LA)旨在满足一个稳定的大规模数据处理系统所需的修错性、低延迟 ,可扩展的特性。 LA的可行性和必要性基于如下假设利原则。

    • 任何效据系统可定义为: query= functional(all data)。

    • 人为容错性 (Human Falult-Tolerance):数据是易丢失的。

    • 数据不可变(Data Immutability):数据是只读的,不在变化。

    • 重新计算(Recomputation):因为上面两个原则,运行函数重新计算结果时可能的。

    LA基本架构图:

    该架构具有如下特点:

    • 所有新数据分别分发到批处理层和实时处理层。

    • 批处理层有两个功能:管理主要的数据(该类数据特点只能的加, 不能更新}为下一步计算出批处理视图做预计算。

    • 服务层计算出批处理视图中的数据做索引.以提供低延时,即使查询。

    • 实时处理层仅处理实时数据,并为服务层提供查询服务。

    • 任何查询都可以通过实时处理层和批处理层的查询结果合并得到。

    从以上论述我们所以知道,Druid本身就心一个典型的 Lambda 架构系统,Druid有实时节点和所史节点,任何查询都是聚合实时节点和历史节点的数据得到查询结果。那么, 我们如何在Druid 系统之外采用 Lambda 架构的思维去解决时间窗口面临的问题呢?

 

2.解决时间窗口问题

    Druid 在摄取数掘时,对于超山时间窗口的数据会直接丢弃,这对于某些要求数据准确性的系统来说:是不可以接受的,那么就需要重新摄入这部分数据,参考Lambda的思想,实现方式如下:

流程如下:

(1) 源数揭都进人Kafka.

(2) 数据通过实时节点或者索引服务进人Druid中

(3) Kafka 的数据通过 Flume 备份到 Hadoop.

(4) 定时或者发现有教据丢失时,通过 Druid Hadoop Index Job 重新摄人数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值