随着数据量不断增长以及提升企业竞争力的需求增长,实时数仓已经成为了许多业务和组织的重要数据架构之一。在实时数仓中,数据实时输入和数据实时分析是关键步骤,但同样重要的是如何将处理后的数据输出到各种目标上。本文将探讨实时数仓中数据实时输出的实现思路。
在数据实时分析一文中,落地实现后,实时指标结果集存储在了ADS层表中。下一步可以输出到BI大屏,可以作为服务公开给第三方;如果想更加实时,可以将数据实时分析这一步直接做成服务,供BI大屏和第三方调用,省掉了ADS层落盘步骤,实时性更强,只是这样做对数仓架构资源配置要求较高,需架构师做出平衡。
我们从实时数仓中的指标计算结果输出到BI大屏和作为服务公开给第三方两个方面来聊一聊。
1.输出到BI大屏
实时数仓的目标之一是提供实时能力以支持即席查询和大屏展示等实时数据可视化需求。在这种情况下,我们可以使用BI大屏软件来展示实时数据分析结果,并根据需要对这些数据进行调整和重新布置。要将数据输出到BI大屏,可以使用以下方法:
-
数据集成平台输出:使用数据集成平台连接到实时数仓,将数据提取到BI大屏所在的服务器或云服务上。这个过程可以实时进行,使得BI大屏上的数据可以实时更新。
-
REST API输出:实时数仓通过定义REST API来暴露数据,并通过BI大屏软件的Web连接器来访问这个API,可以让BI大屏直接读取实时数据。
-
直接连接数据源:BI大屏软件可以直接连接实时数仓,通过ODBC/JDBC/ADO.NET等标准数据库链接协议来实现数据查询和展示。
2. 作为服务公开给第三方
除了BI大屏之外,实时数仓还可以将处理后的数据以服务的方式公开给其他应用程序使用。例如,我们可以将数据公开为API或Web服务的方式,以允许第三方系统或应用程序访问实时数仓的数据,从而实现数据共享和增值。要将数据输出到第三方,可以使用以下方法:
-
REST API:REST API是一种基于HTTP的Web服务,可以通过定义API来暴露实时数仓的数据。第三方应用程序可以使用HTTP请求来调用API,并获取或提交数据。
-
Web服务:Web服务是一种标准化的计算机通信协议,可以实现不同操作系统和编程语言之间的数据交换。在实时数仓中,我们可以定义一个Web服务来将数据公开给第三方应用程序。
-
数据流输出:使用Apache NiFi这样的数据流工具可以输出实时数据流,将处理后的数据实时流向目标系统或应用程序。
有了思路之后,下一步就是落地实现了,根据数仓架构的技术选型不同,实现方式也会不同。这里基于笔者的实时数仓技术选型,提供一种基于NIFI工具的实现方式。
Apache NiFi是一款开源的数据流处理工具,它提供了丰富的数据整合功能,包括数据摄取、转换、路由、输出等。在实时数仓中,我们可以使用NiFi来实现数据输出的需求。
1.输出到BI大屏
-
使用NiFi将数据集成平台输出:NiFi可以连接到数据集成平台(如Kafka、Hadoop等),并将实时数仓的数据提取到BI大屏所在的服务器或云服务。具体而言,我们可以使用NiFi的ConsumeKafka组件来消费Kafka主题中的数据,并使用PutSQL或PutFile等组件将数据写入到外部数据库或文件中。这些数据可以通过数据集成平台的连接器输出到BI大屏进行展示。
-
使用NiFi将REST API输出:NiFi还可以通过定义REST API来暴露数据。具体而言,我们可以使用NiFi的HandleHttpRequest和HandleHttpResponse等组件定义接口,并使用Jolt等转换器组件将实时数仓的数据转换为可访问的JSON格式。第三方应用程序可以使用HTTP请求来调用API,并获取或提交数据。
2.作为服务公开给第三方
使用NiFi将实时数仓数据作为服务公开给第三方可以采用以下方法:
-
使用NiFi将实时数据流输出:我们可以使用NiFi的Provenance数据监控和处理实时数据流,并使用PutKafka或PutFile等组件将数据实时输出到其他系统或应用程序。这样的输出方式可以更好地支持实时数据流的共享和传递。
-
使用NiFi将REST API输出:使用NiFi可以定义REST API,并使用HandleHttpRequest和HandleHttpResponse等组件转换数据。通过这种方式,我们可以将实时数仓的数据以API或Web服务的方式公开给第三方应用程序。
下图是《数据实时数仓REST API接口》的NIFI实现ETL任务,对其他实现方式感兴趣的朋友,可以加微信一起讨论。