您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

利用Apache Kafka、Flink和Druid构建实时数据架构

时间:2023-12-11 12:42:36  来源:51CTO  作者:

译者 | 陈峻

审校 | 重楼

如今,对于使用批处理工作流程的数据团队而言,要满足业务的实时要求并非易事。从数据的交付、处理到分析,整个批处理工作流往往需要大量的等待,其中包括:等待数据被发送到ETL工具处,等待数据被批量处理,等待数据被加载到数据仓库,甚至需要等待查询的完成。

不过,开源世界已对此有了解决方案:通过Apache Kafka、Flink和Druid的协同使用,我们可创建一个实时数据架构,以消除上述等待状态。如下图所示,该数据架构可以在从事件到分析、再到应用的整个数据工作流程中,无缝地提供数据的新鲜度、扩展性和可靠性。

利用Apache Kafka、Flink和Druid构建实时数据架构

目前,LyftPinterestRedditPaytm等知名公司,都在同时使用这三种由互补的数据流原生技术构建的应用,来共同处理各种实时用例。

利用Apache Kafka、Flink和Druid构建实时数据架构用于实时应用的开源数据架构

上图展现的架构能够使得构建可观察性、物联网与遥测分析、安全检测与诊断、面向客户的洞察力、以及个性化推荐等实时应用,变得简单且易于实现。下面,我们将和您探讨此类工具的各个组成部分,以及它们将如何被结合起来实现广泛的实时应用。

流管道:Apache Kafka

过去,RabbitMQ、ActiveMQ、以及其他被用来提供各种消息传递模式的消息队列系统,虽然可以将数据从生产者分发到消费者处,但是其可扩展性十分有限。而随着Apache Kafka的出现,以及被80%的财富100强企业所使用,它已成为了流式数据的实际标准。其根本原因在于,Kafka架构远不止简单的消息传递,其多功能性使之非常适合在大规模的互联网上进行数据流传输。而其容错性和数据一致性,则可以支持各类关键性任务应用。同时,由Kafka Connect提供的各种连接器,也可与任何数据源相集成。

利用Apache Kafka、Flink和Druid构建实时数据架构作为实时数据流平台的Apache Kafka

流处理:Apache Flink

Kafka虽然能够提供实时数据,但是用户在需要兼顾实时效率和扩展性时,往往会选择Apache Flink。作为一个高吞吐量且统一的数据流批处理引擎,Flink的独特优势在于能够大规模处理连续的数据流。而作为Kafka的流处理器,Flink可以无缝地集成并支持精确的一次性语义(exactly-once semantics)。也就是说,即使在系统出现故障时,它也能保证每个事件被精确地处理一次。

具体而言,它会连接到Kafka主题,定义查询逻辑,然后连续输出结果,正所谓“设置好就不用管它(set it and forget it)”。这使得Flink非常适用于对数据流的即时处理和可靠性要求较高的应用案例。以下是Flink的两个常见用例:

填充与转换

如果数据流在使用之前需要进行诸如:修改、增强或重组数据等操作,那么Flink是对此类数据流进行操作的理想引擎。它可以通过持续处理,来保持数据的新鲜度。例如,假设我们有一个安装在智能建筑中的、温度传感器的、物联网遥测用例。其每一个被捕获的Kafka事件,都具有以下JSON结构:

{ "sensor_id":"SensorA," "temperature":22.5, "timestamp":“2023-07-10T10:00:00”}
  • 1.

如果每个传感器的ID都需要映射到一个位置,而且温度需要以华氏度为单位的话,那么Flink可以将JSON结构更新为:

{ “sensor_id”: “SensorA,” “location”: “Room 101”, “temperature_Fahreinheit”: 73.4, “timestamp”: “2023-07-10T10:00:00” }
  • 1.

并且将其直接发送到应用程序,或直接发回Kafka。

 

利用Apache Kafka、Flink和Druid构建实时数据架构Flink数据处理的结构化表格示例

Flink在这方面的优势在于其处理大规模Kafka数据流的实时速度。此外,填充和转换通常是一个无状态的过程。每个数据记录都可以被修改,且无需维护其持久状态。因此整体工作量最小,且性能较高。

 

持续监控和警报

通过将Flink的实时持续处理和容错功能相结合,我们可以为各种关键性应用的实时检测和响应需求,设计出理想的解决方案。例如:当需要具备高检测灵敏度(如:亚秒级)和高采样率时,Flink的持续处理功能就非常适合作为数据服务层,被用于监控条件,触发警报,进而采取相应的行动。

Flink在警报方面的优势主要体现在:它既能够支持无状态警报,也可以支持有状态警报。例如:像“温度达到X时,通知消防队”这样的阈值或事件触发条件虽然简单,但不够智能。在一些真实的使用案例中,警报需要由能够保持状态的复杂模式驱动,甚至需要在持续的数据流中汇总各项指标(如:总量、平均值、最小值、最大值、以及计数等),而Flink则可以监控和更新状态,以及时发现偏差和异常。

值得注意的是,使用Flink进行监控和警报时,往往需要持续使用系统CPU来根据阈值和模式评估条件。这与只在执行查询时,才用到CPU的数据库有所不同。因此,您需要最好事先了解待开发的应用是否需要持续使用CPU。

实时分析:Apache Druid

总的说来,Apache Druid完善了数据架构,能够与Kafka和Flink一起成为支持实时分析的数据流消费者。虽然它是一个被用于分析的数据库,但是其设计中心和用途与其他数据库、以及数据仓库有较大的不同。

首先,由于Druid是数据流原生的,因此,Druid和Kafka之间不需要连接器,它可以直接连接到Kafka主题,并且支持精确的一次性语义。同时,Druid也被设计为用于大规模地快速捕获流数据,并在事件到达时,立即在内存中进行查询。

利用Apache Kafka、Flink和Druid构建实时数据架构Druid如何与Kafka原生集成,以实现数据流捕获

在查询方面,Druid是一种高性能的实时分析数据库,可以在大规模和负载条件下,提供亚秒级的查询。它非常适用于那些对性能极其敏感,并且需要处理从TB到PB的数据(例如:聚合、过滤、GroupBy、以及复杂连接等)和高查询体量的用例。Druid不但能够持续提供快如闪电的查询,而且可以轻松从一台笔记本电脑扩展为由1000个节点组成的集群。这就是Druid被称为实时分析数据库的原因。以下是Druid与Flink的互补用例:

高度交互式查询

工程团队可以使用Druid支持包括:各种内部(即运营)和外部(即面向客户)涉及到可观察性、安全性、产品分析、物联网与遥测、制造运营等数据密集型分析应用。其核心特点包括:

  1. 大规模性能:应用程序需要在不进行预计算的情况下,对大型数据集进行亚秒级读取、查询和分析。即使用户以TB甚至PB的规模,对大量随机查询进行任意分组、过滤、切片、以及切割,Druid都能提供不俗的性能。
  2. 高查询量:能够针对具有较高QPS(每秒查询率)要求的分析查询应用,例如:任何面向外部的数据产品应用,都需要为产生100到1000次不同的并发查询的工作负载,提供亚秒级SLA。
  3. 时间序列数据:由于采用了时间分区和数据格式的应用需求,Druid可以非常快速地、大规模处理时序数据,进而提出洞见。这使得基于时间的WHERE过滤器的速度极快。

这些应用要么具有交互性很强的数据可视化、以及合成结果集的用户界面,并得益于Druid的快速,能够非常灵活地即时更改查询;要么在很多情况下,它们利用Druid的应用程序接口(API)来提高查询速度,从而为决策工作流提供依据。

下图展示的是一个由Apache Druid支持的分析应用示例。

利用Apache Kafka、Flink和Druid构建实时数据架构图片来源:Confluent的Confluent Health+仪表板

众所周知,由Apache Kafka原创的Confluent,可以通过Confluent Health+为客户提供分析服务。上图中的应用具有高度交互性。通常,事件会以每秒500万次的速度流向Kafka和Druid,该应用通过提供350 QPS的服务,来深入洞察客户的Confluent环境。

实时历史数据

Druid与实时数据架构的关联之处在于,它可以提供实时数据与历史数据相结合的交互式数据体验,从而提供更丰富的语境。

如果说Flink擅长回答“现在发生着什么(即发出Flink任务的当前状态)”的话,那么Druid则在技术上能够回答“现在发生的与之前相比有何不同,哪些因素或条件对结果产生了影响”。回答这些问题将有助于消除误报,协助检测新的趋势,进而做出更有洞见的实时决策。

要回答“与以前相比情况如何?”的疑问,我们往往需要以过去的某一天、一周、一年或其他时间跨度,来进行相关性分析。而要回答“哪些因素或条件影响了结果”,我们则需要挖掘完整的数据集。由于Druid是一个能够实时分析的数据库,因此它可以捕获可供实时洞察的数据流,同时它也会持久性地保存数据,以便随时查询多维度的历史信息。

利用Apache Kafka、Flink和Druid构建实时数据架构Druid 的查询引擎如何处理实时和历史数据

假设我们正在构建一个用于监控登录可疑行为的应用程序,那么我们可能希望在五分钟的时间窗口内设置一个阈值--更新并发布登录尝试的状态。凭借Druid,当前的登录尝试可以与历史数据相关联,以识别过去未发生、但的确被利用过的登录安全漏洞。据此,历史背景将有助于确定当前的登录反复尝试是否属于正常行为。

此外,如果您的应用程序需要接收大型批处理文件,且对瞬息万变的事件进行大量分析(如:当前状态、各种聚合、分组、时间窗口、以及复杂连接等),同时还要提供历史背景,并通过高度灵活的应用程序接口来检索数据集,那么这些都是Druid的优势所在。

选择Flink和Druid的检查表

可见,Flink和Druid都是为流数据而构建的。虽然它们有着一些高层次的相似之处,例如:都属于内存内部(in-memory)、都能扩展、都能并行,但是正如前文所述,它们的架构实际上是为完全不同的用例而构建的。下面,我为您整理了一份简单的、基于工作量来判断该如何选择的检查表:

  1. 您是否需要对流式数据进行实时转换或连接?
  • Flink就是这样一款专为实时数据处理而设计的服务。
  1. 您需要同时支持许多不同的查询吗?
  • Druid可以支持高QPS分析,而无需管理各种查询和任务。
  1. 事件相关指标是否需要持续更新或汇总?
  • Flink支持有状态的复杂事件处理。
  1. 分析是否更加复杂,是否需要与历史数据进行比较?
  • Druid可以方便快捷地查询实时数据和历史数据。
  1. 您是否正在为面向用户的应用程序提供数据可视化?
  • 可先使用Flink予以填充,然后将数据发送到作为数据服务层的Druid。

总的说来,在大多数情况下,您的选择不会是“非Druid即Flink”,而是“既Druid又Flink”。它们各自的技术特性使得两者能够共同支持各种实时应用。

小结

随着企业对于数据实时性的要求越来越高,数据团队需要重新考虑端到端的数据工作流程。这就是为什么许多公司已将Kafka+Flink+Druid作为构建实时应用的开源数据架构的原因。

译者介绍

陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

原文标题:Building a Real-Time Data Architecture With Apache Kafka, Flink, and Druid ,作者:David Wang



Tags:Apache   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
如何使用Python、Apache Kafka和云平台构建健壮的实时数据管道
译者 | 李睿审校 | 重楼在当今竞争激烈的市场环境中,为了生存和发展,企业必须能够实时收集、处理和响应数据。无论是检测欺诈、个性化用户体验还是监控系统,现在都需要接近即时...【详细内容】
2024-01-26  Search: Apache  点击:(46)  评论:(0)  加入收藏
Apache RocketMQ 5.0腾讯云落地实践
Apache RocketMQ 发展历程回顾RocketMQ 最早诞生于淘宝的在线电商交易场景,经过了历年双十一大促流量洪峰的打磨,2016年捐献给 Apache 社区,成为 Apache 社区的顶级项目,并在国...【详细内容】
2023-12-13  Search: Apache  点击:(129)  评论:(0)  加入收藏
利用Apache Kafka、Flink和Druid构建实时数据架构
译者 | 陈峻审校 | 重楼如今,对于使用批处理工作流程的数据团队而言,要满足业务的实时要求并非易事。从数据的交付、处理到分析,整个批处理工作流往往需要大量的等待,其中包括:等...【详细内容】
2023-12-11  Search: Apache  点击:(227)  评论:(0)  加入收藏
Contentsquare 使用微服务和 Apache Kafka 来发送通知
作者 | Rafal Gancarz译者 | 平川策划 | TinaContentsquare 平台的许多场景都需要通知功能。作为其微服务架构的一部分,该公司创建了一个跨多个服务的通用解决方案。在实现过...【详细内容】
2023-10-29  Search: Apache  点击:(331)  评论:(0)  加入收藏
如何确定Apache Kafka的大小和规模
作者丨Andrew Mills编译丨云昭调整或扩展Kafka以获得最佳成本和性能的第一步是了解数据流平台如何使用资源。这里给一些实用的建议。实现Apache Kafka的团队,或者扩展他们对...【详细内容】
2023-10-23  Search: Apache  点击:(323)  评论:(0)  加入收藏
什么让 Apache Kafka 如此快速?
Kafka 支持高吞吐量、高度分布式、容错性强的平台,能够以低延迟传递消息。有几种技术使 Apache Kafka 如此快速: 低延迟消息传递 批量数据和压缩 水平扩展低延迟消息传递大多...【详细内容】
2023-09-12  Search: Apache  点击:(350)  评论:(0)  加入收藏
Go语言开发者的Apache Arrow使用指南:内存管理
如果你看了上一篇《Go语言开发者的Apache Arrow使用指南:数据类型》[1]中的诸多Go操作arrow的代码示例,你很可能会被代码中大量使用的Retain和Release方法搞晕。不光大家有这...【详细内容】
2023-09-11  Search: Apache  点击:(264)  评论:(0)  加入收藏
Apache Iceberg 在严选批流一体的实践
Iceberg是数据湖解决方案中比较热门的方案之一,通常用于批流一体中数据存储的组织实现,希望通过本文让大家了解到严选是如何从老的Lambda架构升级到基于Iceberg的批流一体架构...【详细内容】
2023-09-04  Search: Apache  点击:(281)  评论:(0)  加入收藏
Set集合工具类Apache之SetUtils
本文主要讲述:集合工具类Apache之 org.apache.commons.collections4.SetUtils上文介绍了关于ListUtils的实例,本文我们对SetUtils的部分用法进行演示。一、判断两Set集合是否...【详细内容】
2023-08-14  Search: Apache  点击:(222)  评论:(0)  加入收藏
Apache Spark 的新编程语言
English SDK for Spark : 将英语作为一种新的编程语言,将生成式 AI 当做编译器, 将 Python 视作字节码!本文主要介绍了 Apache Spark 的英语软件开发套件(SDK)的重要性和目标,以及...【详细内容】
2023-07-07  Search: Apache  点击:(238)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(4)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(5)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(8)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(114)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条