操作和扩展托管的Apache Kafka与Flink集群

发布于:2025-02-10 ⋅ 阅读:(40) ⋅ 点赞:(0)

操作和扩展托管的Apache Kafka与Flink集群

关键字: [Amazon Web Services re:Invent 2024, 亚马逊云科技, Data Streaming, Apache Kafka, Apache Flink, Managed Services, High Availability]

导读

企业使用Kafka和Apache Flink来处理越来越多的关键任务用例、实时分析、应用程序消息传递和机器学习。随着使用规模的扩大,管理Kafka和Flink集群的重要性、规模和成本也随之增加。了解亚马逊云科技客户如何通过Amazon MSK和Amazon Managed Service for Apache Flink,以更低的单位成本和更简单的运营方式,实现与其不断增长的集群相同或更高的可用性和持久性。

演讲精华

以下是小编为您整理的本次演讲的精华。

在不断演进的数据驱动型企业领域中,追求实时洞见已成为当务之急。来自银行、零售到网站可靠性工程等各行各业的客户都认识到流数据及其促进及时业务决策的能力的巨大价值。这种认识推动了两种强大技术的采用:Apache Kafka和Apache Flink。

Kafka是一个分布式流平台,擅长以极低的延迟捕获大量数据,而Flink是一个分布式处理引擎,专门处理这些数据以生成实时洞见。尽管两者诞生相隔数年,但在流数据领域,它们已成为难分难解的孪生兄弟,共享着众多共同特征。

首先,Kafka和Flink支持各种用例,从数据捕获和转换到加载数据到数据湖、构建微服务应用程序,以及支持事件驱动架构。它们的通用性延伸到实时分析,如欺诈检测和异常检测,使它们成为广泛应用的不可或缺的工具。

其次,这两种技术都为容错和处理保证提供了强大的功能,包括完全一次语义。这些功能使开发人员能够轻松自信地实现复杂的用例。此外,Kafka和Flink拥有广泛的集成,允许与企业内各种系统无缝连接。亚马逊云科技特别提供了开箱即用的托管服务集成,其中一些已回馈给开源社区。

另一个共同特征是它们的横向扩展架构,使Kafka和Flink能够随着数据处理需求的增加而无缝扩展,消除了扩展瓶颈的顾虑。最后,这些技术背后有强大而活跃的社区支持,确保了持续创新,并通过定期升级提供最新功能。

然而,当客户深入探索流数据领域时,他们遇到了一些阻碍他们充分利用Kafka和Flink潜力的挑战。设置这些技术是一项复杂的工作,扩展它们也存在重大障碍。实现开箱即用的高可用性并非易事,而在大规模维护这些系统的运营和基础设施成本可能会变得高昂。

为应对这些挑战,客户转向亚马逊云科技托管服务Kafka(Amazon MSK)和亚马逊云科技托管服务Apache Flink。这些服务旨在解决大规模运营Kafka和Flink的复杂性,让客户将基础设施管理和非差异化的繁重工作外包给亚马逊云科技团队。这使客户能够专注于构建应用程序和运行集群,而不是纠缠于基础设施管理的复杂性。

来自各行各业和不同规模的客户都采用了这些托管服务,认识到了它们的变革潜力。例如,Orchard利用Amazon MSK将同步数据库所需时间从数小时缩短到几分钟。NextThink则利用MSK流式传输万亿事件,并以小团队扩展到大规模吞吐量。在体育领域,国家冰球联盟(NHL)采用Flink托管服务来计算和预测球员之间的中圈争夺,通过确定掷球时谁获胜的概率来增强观赏体验。

当客户试图了解采用托管服务背后的驱动力时,一个基本问题浮现:“为什么?”答案在于大规模运行Kafka和Flink的固有复杂性。

为说明运营Kafka的挑战,Sime Matale(亚马逊云科技托管Kafka和Flink服务的负责人)深入探讨了管理Kafka集群的复杂性。他解释说,典型的Kafka集群由代理组成,每个代理包括一个计算层(负责服务请求、身份验证、授权和维护语义)和一个存储层(负责数据持久性和布局)。

在内部环境中,计算和存储是紧密耦合的,存储位于计算节点本身。这种耦合意味着计算和存储的故障模式是交织在一起的,当计算节点发生故障时,需要重建存储。然而,在亚马逊云科技云中,使用像弹性块存储(EBS)这样的网络附加存储,解耦了这些故障域,当代理发生故障时,存储保持不变,从而实现更快的恢复时间。

尽管云带来了好处,但Kafka运营的某些方面保持不变。例如,扩展计算和存储仍然是必需的,因为添加节点会同时增加计算和存储能力。此外,Kafka的复制机制引入了另一层复杂性。

Matale用一个典型的Kafka集群设置来说明这种复杂性,该集群有三个代理和分布在其中的分区。在这种情况下,生产者将数据写入一个代理上的领导分区,然后复制到不同代理上的副本,通常位于不同的可用区以实现高可用性。当代理发生故障时,Kafka会检测到故障并从副本中选举一个新的领导者,确保数据连续性。然而,这个过程需要仔细规划和配置,以容纳在故障情况下剩余代理上增加的负载。

此外,Kafka缺乏对应用程序流量和系统流量(如复制和消费者赶上)的明确分离。这种耦合可能会在恢复或重新平衡过程中影响主要生产和消费操作,需要分配缓冲区来处理这种情况,而不会影响应用程序性能。

因此,配置Kafka集群成为一个多维度的挑战,不仅需要考虑入站和出站流量,还需要考虑复制、故障恢复和消费者赶上的后台流量。确定适当的实例和卷规格涉及复杂的计算和基准测试,进一步增加了复杂性。

为解决这些挑战,亚马逊云科技推出了Amazon MSK的Express Brokers,这是一种在亚马逊云科技上运行Kafka的全新方法,专注于高性能和弹性。Express Brokers通过为每个代理提供无限存储容量并将计算与存储分离,消除了存储管理的需求。客户只需为他们保留的数据量付费,而不是为预配置的容量或副本付费,与标准Apache Kafka部署相比,可节省高达80%的存储成本。

使用Express Brokers,配置也大大简化了,因为每个实例大小直接对应一个特定的写入和读取吞吐量能力,无需复杂的计算。此外,Express Brokers每个代理的吞吐量比标准代理高出三倍,使客户能够用更少的代理运行大得多的集群。

使用Express Brokers进行扩展是一个游戏规则改变者,提供了垂直和水平扩展选项。垂直扩展只需单击即可实现,更改实例类型而不影响应用程序或数据持久性。而水平扩展通常需要数小时才能完成分区重新平衡,但使用Express Brokers只需几分钟,即使对于处理每秒数百兆字节吞吐量的适当调整的集群也是如此。

Express Brokers旨在运行关键任务应用程序,将最佳实践编码到产品中,对应用程序和系统流量进行资源分离,并从故障中实现比标准Kafka快90%的恢复时间。此外,Express Brokers保持了与Kafka应用程序的100%兼容性、低延迟特性,并支持所有MSK功能,包括MSK Connect、MSK Replicator和mTLS、SASL/SCRAM等安全功能。

为获得额外的弹性,MSK Replicator支持单击跨集群复制,用于灾难恢复场景,而多VPC连接性则简化了跨不同亚马逊云科技账户和应用程序的集成。

转而讨论Apache Flink,Ali Alimi(亚马逊云科技高级流架构师)阐明了大规模运营Flink集群的复杂性。他首先强调了Flink的开发人员API,可满足各种技能水平和用例复杂性。Flink SQL是最易访问的选择,使没有编程知识的数据分析师能够像传统数据库一样试验和交互流数据。Table API为开发人员提供了更多灵活性,在保留SQL表达能力的同时,访问编程语言原语。对于生产环境中的复杂应用程序,DataStream API被广泛使用,让开发人员控制实时性、窗口和复杂聚合。最后,Process Function API允许开发人员编写自己的操作符,通过访问Flink的状态和计时器机制提供了最高级别的灵活性。

Alimi强调构建支持所有这些API的平台的重要性,以适应各种工作负载和复杂性,而不是将开发人员限制在单一API上。

了解Flink的架构,Alimi解释说Flink由两种类型的进程组成:Task Manager,负责对数据流进行计算,以及Job Manager,负责协调Task Manager。Flink提供多种部署模式,其中应用程序模式是构建和部署Flink作业的推荐方式。该模式确保了不同作业之间的隔离和专用性,每个作业都获得专用的Job Manager和集群,从而最小化了故障对其他作业的影响。

在部署中,通常会配置一个Job Manager和多个Task Manager。Job Manager将任务调度到Task Manager提供的插槽中,插槽的数量决定了作业的并行级别。由于Flink是一个分布式和有状态的系统,Task Manager需要存储来存储和记录先前操作的结果。但是,为了确保在发生故障时的持久性和高可用性,Flink采用了周期性检查点机制,将本地存储的快照发送到持久存储系统,如Amazon S3。

适当规划Flink部署涉及选择容量提供程序(如Kubernetes或Yarn)、启用周期性检查点到持久存储、设置备份保留策略、监控以进行扩缩容决策,以及构建自动扩缩容能力。

扩缩Flink作业是一项复杂的工作,因为需要重新配置集群以匹配所需的并行级别。开发人员将Flink应用程序构建为一系列任务,每个任务都被划分为并行运行的任务实例,并行实例的数量决定了并行级别。为了处理更多数据,增加并行度并运行更多任务实例似乎是一个合理的解决方案。但是,这需要通过调整不同节点类型和大小上的任务插槽数量来重新配置Flink集群,这个过程涉及基准测试以确定最佳配置。

在Flink中实现高可用性涉及运行备份Job Manager以进行故障转移协调。Flink提供了一种高可用性机制,其中部署了多个Job Manager,但在任何给定时间只有一个可以是活动状态(领导者)。当领导者发生故障时,一个投票系统(通常使用Zookeeper或Kubernetes集群实现)会从池中确定哪个Job Manager成为新的领导者。

为了减轻操作Flink集群的复杂性,亚马逊云科技推出了Apache Flink的托管服务,之前称为Amazon Kinesis Data Analytics。这种无服务器服务允许开发人员快速部署Flink作业,而亚马逊云科技负责供应、规划、扩缩容、安全补丁和升级。开发人员打包他们的应用程序并发起API调用来创建和启动应用程序,而Apache Flink的托管服务则提供必要的基础设施,根据定义的并行度确定适当的任务数量,并在亚马逊云科技上运行作业。该服务还提供与其他亚马逊云科技服务(如Amazon MSK和Amazon Kinesis Data Streams)的集成,以及对开源连接器的支持。

使用Apache Flink的托管服务进行扩缩容就像指定所需的并行度一样简单。该服务将并行度与Kinesis处理单元(KPU)相匹配,每个KPU提供一个CPU、4GB内存和50GB块存储。对于I/O密集型作业,客户可以增加每个KPU的并行度,从而配置更少的KPU,同时保持相同的并行度。在自管理环境中,扩缩容过程可能需要长达25分钟用于新部署,15分钟用于故障恢复,而在托管服务中,这个过程缩短到大约5分钟,最大限度地减少了流作业的停机时间。

Apache Flink的托管服务还简化了配置管理,提供了配置的版本控制。支持就地Apache Flink版本升级,如果新配置导致作业失败,将自动回滚到上一个良好配置版本。兼容性检查确保新的Flink版本与先前作业的保存点(快照)兼容,客户可以使用旧版本的保存点启动新作业并使用最新的Flink版本。

Alimi强调了需要一个端到端的流数据平台,该平台能够以经济高效、有弹性和安全的方式在亚马逊云科技账户和VPC之间大规模运行Kafka、Flink和相关服务。亚马逊云科技的托管服务旨在提供这种全面的解决方案,使客户能够专注于构建流应用程序和推动创新,而不必处理无差别的繁重工作。

总之,在亚马逊云科技 re:Invent 2024上的“运营和扩缩托管Apache Kafka和Flink集群”会议强调了实时洞察的日益重要性,以及Apache Kafka和Apache Flink在实现流数据应用程序方面发挥的关键作用。虽然这些技术具有巨大的潜力,但在大规模运营时面临着诸多挑战,从复杂的设置和扩缩容到实现高可用性和管理成本。

亚马逊云科技的托管服务Amazon MSK和Amazon托管流式传输Apache Flink解决了这些挑战,将基础设施管理和无差别的繁重工作卸载到亚马逊云科技团队。通过MSK的Express Broker功能(将计算与存储分离,简化了供应和扩缩容)以及无服务器的Apache Flink托管服务(自动化部署、规划和扩缩容),客户可以专注于构建应用程序和推动创新。

该会议全面概述了在大规模运营Kafka和Flink集群时所涉及的复杂性,强调了供应、实现高可用性和扩缩容的复杂性。通过利用亚马逊云科技的托管服务,各行业的客户都可以利用流数据的强大功能,同时受益于亚马逊云科技云的可扩展性、弹性和经济高效性。

下面是一些演讲现场的精彩瞬间:

Kafka的重新平衡和恢复过程如果配置不当,可能会影响主要的生产和消费操作,因此需要仔细规划以应对追赶场景。

30ccb8009a657c259ec7856595af2ba3.png

解释在亚马逊云科技上配置Kafka集群的逐步过程,需要考虑实例类型、配额、CPU、内存、峰值吞吐量、存储和网络要求等因素。

b81141bb95d4cf1f14ddbd7f07da4371.png

一个警示故事,强调在Apache Kafka中平衡配置设置的重要性,以确保最佳性能和可用性。

1aa853e102ecb77aaaea05282e10c396.png

强调主动存储管理和监控的重要性,以维护高可用的Kafka系统,避免出现如卷吞吐量不足导致集群不稳定和性能下降等问题。

e2631c69be1094cbd666fd0edfda5470.png

强调遵循最佳实践的重要性,例如垂直扩展Kafka集群时最后重启控制器节点,以确保稳定性,避免出现消费者超时和写入延迟高等问题。

602fa709e5227618a5f632fb9f58ffb7.png

演讲者鼓励观众扫描二维码或拍照访问资源,了解演讲中讨论的最佳实践。

4e8896ec1f6415cd22d8141d47d65bb0.png

总结

第1段: 本次演示涵盖了大规模运行和扩展托管的Apache Kafka和Flink集群。它强调了自行运行这些系统的挑战,以及亚马逊云科技托管服务如何简化这一过程,让您专注于构建应用程序,而不是从事无差别的繁重工作。

第2段: 尽管Apache Kafka和Flink相隔多年诞生,但由于它们具有支持多种用例、容错能力、处理保证、广泛集成、可扩展架构和强大社区支持等共同特点,已成为流数据处理不可分割的孪生兄弟。然而,大规模运行这些系统存在复杂设置、扩展困难和高维护成本等挑战。

第3段: 亚马逊云科技为Apache Kafka和Apache Flink提供的托管服务旨在通过将基础设施管理外包给亚马逊云科技来解决这些挑战。各行业的客户都在使用这些服务来简化其流数据管道、减少运营开销并实现高效扩展。

第4段: 对于Apache Kafka,演示深入探讨了规划、供应和运行高可用性集群的复杂性。它涵盖了计算存储耦合、复制因子、持久性配置、监控指标和扩展策略(如滚动重启和分区重新平衡)等主题。最近推出的MSK Express Brokers通过消除存储管理、提供无限存储容量、简化供应、提高吞吐量和实现快速扩展来简化这些过程。

第5段: 对于Apache Flink,演示涵盖了SQL、Table API和DataStream API等API的开发者体验。它解释了Flink的结构,包括Task Manager、Job Manager以及并行度的重要性。还讨论了容量提供者、检查点和监控等规划注意事项。强调了扩展Flink作业是一个复杂的过程,涉及更改并行度、重新配置集群和使用保存点重新部署。亚马逊云科技为Apache Flink提供的托管服务通过提供无服务器部署、自动扩展、配置管理和具有回滚功能的版本升级来简化这一过程。

亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者。提供200多类广泛而深入的云服务,服务全球245个国家和地区的数百万客户。做为全球生成式AI前行者,亚马逊云科技正在携手广泛的客户和合作伙伴,缔造可见的商业价值 – 汇集全球40余款大模型,亚马逊云科技为10万家全球企业提供AI及机器学习服务,守护3/4中国企业出海。