第五章 数据管道和流式处理笔记

本文介绍了数据管道的基本概念,重点讨论了Kafka在数据管道中的作用,包括其在解耦生产者和消费者、确保及时性、可靠性、高吞吐量和动态伸缩性方面的优势。此外,文章还探讨了Kafka Connect的功能,以及流式处理的基本概念,如事件流的有序性、不可变性和可重播性。内容涵盖了Kafka作为流处理平台的演变,以及在不同业务场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据管道基本概念

在使用Kafka构建数据管道时,通常有两种使用场景:第一种:把Kafka作为数据管道的两个端点之一,例如,把Kafka里的数据移动到云上,或者把MongoDB里的数据移动到Kafka里;第二种:把Kafka作为数据管道两个端点的中间媒介,例如,为了把DB的数据移动到ElasticSearch上,需要先把它们移动到Kafka里,再将它们从Kafka移动到Elastic Search上。

Kafka为数据管道带来的主要价值在于,它可以作为数据管道各个数据段之间的大型缓冲区,有效地解耦管道数据的生产者和消费者。数据管道的重要作用之一是解耦数据源和数据池,Kafka在这方面的能力以及在安全和效率方面的可靠性,使它成为构建数据管道的最佳选择。

1、数据管道需要考虑的问题

1.1、及时性

有些系统希望每天一次性地接收大量数据,而有些则希望在数据生成几毫秒之内就能拿到它们,大部分数据管道介于这两者之间。一个好的数据集成系统能够很好地支持数据管道的各种及时性需求,而且在业务需求发生变更时,具有不同及时性需求的数据表之间可以方便地进行迁移。

Kafka作为一个基于流的数据平台,提供了可靠且可伸缩的数据存储,可以支持几近实时的数据管道和基于小时的批处理。生产者可以频繁地向Kafka写入数据,也可以按需写入:消费者可以在数据到达的第一时间读取它们,也可以每隔一段时间读取一次积压的数据。

Kafka在这里扮演了一个大型缓冲区的角色,降低了生产者和消费者之间的时间敏感度。实时的生产者和基于批处理的消费者可以同时存在,也可以任意组合。实现回压策略也因此变得更加容易,Kafka本身就使用了回压策略(必要时可以延后向生产者发送确认),消费速率完全取决于消费者自己。

1.2、可靠性

我们要避免单点故障,并能够自动从各种故障中快速恢复。数据通过数据管道到达业务系统,哪怕出现几秒钟的故障,也会造成灾难性的影响,对于那些要求毫秒级的及时性系统来说尤为如此。数据传递保证是可靠性的另一个重要因素。有些系统允许数据丢失,不过在大多数情况下,它们要求至少一次传递。也就是说,源系统的每一个事件都必须到达目的地,不过有时候需要进行重试,而重试可能造成重复传递。有些系统甚至要求仅一次传递——源系统的每一个事件都必须到达目的地,不允许丢失,也不允许重复。

1.3、高吞吐量和动态吞吐量

为了满足现代数据系统的要求,数据管道需要支持非常高的吞吐量。更重要的是,在某些情况下,数据管道还需要能够应对突发的吞吐量增长。

由于我们将Kafka作为生产者和消费者之间的缓冲区,消费者的吞吐量和生产者的吞吐量就不会耦合在一起了。如果生产者的吞吐量超过了消费者的吞吐量,可以把数据积压在Kafka里,等待消费者追赶上来。通过增加额外的消费者或生产者可以实现Kafka的伸缩,因此我们可以在数据管道的任何一边进行动态的伸缩,以便满足持续变化的需求。

因为Kafka是一个高吞吐量的分布式系统,一个适当规模的集群每秒钟可以处理数百兆的数据,所以根本无需担心数据管道无住满足伸缩性需求。另外Connect API不仅支持伸缩,而且擅长并行处理任务。

1.4、数据格式

数据管道需要协调各种数据格式和数据类型,这是数据管道的一个非常重要的因素。数据类型取决于不同的数据库和数据存储系统。你可能会通过Avro将XML或关系型数据加载到Kafka里,然后将它们转成JSON写入ElasticSearch,或者写入HDFS等等。Kafka与数据格式无关,生产者和消费者可以使用各种序列化器来表示任意格式的数据。

2、Kafka Connect

这个不同于普通API,Connect是Kafka的一部分,它位在Kafka和外部数据存储系统之间移动数据提供一种可靠且可伸缩的方式,它不是一个API调用,它主责移动数据。

Connect以worker进程集群的方式运行,然后使用REST API来管理和配置,并且这些进程都是长时间持续运行的作业。比如使用将一个Mysql的表数据导入到一个Kafka的主题上,然后再将他们加载到ElasticSearch里,然后对它们的内容进行索引。

流式处理基本概念

Kafka早期版本一般被认为是一个强大的消息总线,可以传递事件流,但没有处理和转换事件的能力。Kafka可靠的传递能力让它成为流式处理系统完美的数据来源,很多基于Kafka构建的流式处理系统都将Kafka作为唯一可靠的数据来隙,如Apache Storm、Apache SparkStreaming、Apache Flink、Apache Samza等。

从0 . 10 . 0版本开始,Kafka不仅为每一个流行的流式处理框架提供了可靠的数据来源,还提供了一个强大的流式处理类库,并将其作为客户端类库的一部分。这样开发人员就可以在应用程序里读取、处理和生成事件,而不需要再依赖外部的处理框架。

1、数据流

先来看看什么是数据流(也被称为“事件流”或“流数据”)。首先,数据流是无边界数据集的抽象表示。无边界意味着无限和持续增长。无边界数据集之所以是无限的,是因为随着时间的推移,新的记录会不断加入进来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值