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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Luomingkui1109/article/details/85223827

    我们都知道, 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 重新摄人数据

猜你喜欢

转载自blog.csdn.net/Luomingkui1109/article/details/85223827
今日推荐