技术概述
本节介绍此解决方案所使用的技术。
NetAppStorageGRID
NetApp StorageGRID是一个高性能、经济高效的对象存储平台。通过使用分层存储,Confluent Kafka 上存储在本地存储或代理的 SAN 存储中的大部分数据都被卸载到远程对象存储。此配置可减少重新平衡、扩展或收缩集群或更换故障代理的时间和成本,从而显著改善操作。对象存储在管理驻留在对象存储层的数据方面发挥着重要作用,因此选择正确的对象存储非常重要。
StorageGRID使用分布式、基于节点的网格架构提供智能、策略驱动的全局数据管理。它通过其无处不在的全局对象命名空间与复杂的数据管理功能相结合,简化了 PB 级非结构化数据和数十亿个对象的管理。单次调用对象访问可跨站点扩展,并简化高可用性架构,同时确保持续的对象访问,无论站点或基础设施是否中断。
多租户允许在同一网格内安全地为多个非结构化云和企业数据应用程序提供服务,从而提高NetApp StorageGRID的投资回报率和用例。您可以使用元数据驱动的对象生命周期策略创建多个服务级别,从而优化跨多个地区的耐用性、保护性、性能和位置性。用户可以调整数据管理策略并监控和应用流量限制,以便在不断变化的 IT 环境中随着需求的变化而无中断地重新调整数据格局。
使用网格管理器进行简单管理
StorageGRID Grid Manager 是一个基于浏览器的图形界面,允许您在单一玻璃窗格中配置、管理和监控全球分布位置的StorageGRID系统。
您可以使用StorageGRID Grid Manager 界面执行以下任务:
-
管理全球分布的 PB 级对象存储库,例如图像、视频和记录。
-
监控网格节点和服务以确保对象可用性。
-
使用信息生命周期管理 (ILM) 规则来管理对象数据随时间推移的放置。这些规则控制着对象数据被摄取后会发生什么、如何防止数据丢失、对象数据存储在何处以及存储多长时间。
-
监控系统内的交易、性能和操作。
信息生命周期管理政策
StorageGRID具有灵活的数据管理策略,包括保留对象的副本以及使用 EC(擦除编码)方案(例如 2+1 和 4+2 等)来存储对象,具体取决于特定的性能和数据保护要求。由于工作负载和需求随时间而变化,ILM 策略通常也必须随时间而变化。修改 ILM 策略是一项核心功能,允许StorageGRID客户快速轻松地适应不断变化的环境。
性能
StorageGRID通过添加更多存储节点来扩展性能,这些存储节点可以是虚拟机、裸机或专用设备,例如"SG5712、SG5760、SG6060 或 SGF6024"。在我们的测试中,我们使用 SGF6024 设备以最小尺寸的三节点网格超越了 Apache Kafka 的关键性能要求。当客户使用额外的代理扩展他们的 Kafka 集群时,他们可以添加更多的存储节点来提高性能和容量。
负载均衡器和端点配置
StorageGRID中的管理节点提供网格管理器 UI(用户界面)和 REST API 端点来查看、配置和管理您的StorageGRID系统,以及审计日志来跟踪系统活动。为了为 Confluent Kafka 分层存储提供高可用性 S3 端点,我们实现了StorageGRID负载均衡器,它作为管理节点和网关节点上的服务运行。此外,负载均衡器还管理本地流量并与 GSLB(全局服务器负载均衡)对话以帮助进行灾难恢复。
为了进一步增强端点配置, StorageGRID提供了内置于管理节点的流量分类策略,让您监控工作负载流量,并对您的工作负载应用各种服务质量 (QoS) 限制。流量分类策略应用于网关节点和管理节点的StorageGRID负载均衡器服务上的端点。这些策略可以帮助流量整形和监控。
StorageGRID中的流量分类
StorageGRID具有内置 QoS 功能。流量分类策略可以帮助监控来自客户端应用程序的不同类型的 S3 流量。然后,您可以创建并应用策略来根据输入/输出带宽、读/写并发请求数或读/写请求率限制此流量。
阿帕奇卡夫卡
Apache Kafka 是一个用 Java 和 Scala 编写的使用流处理的软件总线的框架实现。其目的是提供一个统一、高吞吐量、低延迟的平台来处理实时数据馈送。 Kafka可以通过Kafka Connect连接外部系统进行数据导出和导入,并提供Java流处理库Kafka Streams。 Kafka 使用基于 TCP 的二进制协议,该协议针对效率进行了优化,并依赖于“消息集”抽象,该抽象自然地将消息组合在一起,以减少网络往返的开销。这使得更大的顺序磁盘操作、更大的网络数据包和连续的内存块成为可能,从而使 Kafka 能够将突发的随机消息写入流转换为线性写入。下图描述了Apache Kafka的基本数据流。
Kafka 存储来自任意数量的进程(称为生产者)的键值消息。数据可以划分到不同主题内的不同分区中。在分区内,消息严格按照其偏移量(消息在分区内的位置)排序,并与时间戳一起索引和存储。其他称为消费者的进程可以从分区读取消息。对于流处理,Kafka 提供了 Streams API,允许编写 Java 应用程序使用来自 Kafka 的数据并将结果写回 Kafka。 Apache Kafka 还可以与外部流处理系统(如 Apache Apex、Apache Flink、Apache Spark、Apache Storm 和 Apache NiFi)协同工作。
Kafka 在一个或多个服务器(称为代理)的集群上运行,所有主题的分区分布在集群节点上。此外,分区被复制到多个代理。这种架构允许 Kafka 以容错方式传递大量消息流,并允许它取代一些传统的消息传递系统,如 Java 消息服务 (JMS)、高级消息队列协议 (AMQP) 等。自 0.11.0.0 版本以来,Kafka 提供事务写入功能,可使用 Streams API 提供一次流处理。
Kafka 支持两种类型的主题:常规主题和压缩主题。常规主题可以配置保留时间或空间界限。如果有记录超过指定的保留时间或超出了分区的空间限制,则允许 Kafka 删除旧数据以释放存储空间。默认情况下,主题的保留时间配置为 7 天,但也可以无限期地存储数据。对于压缩主题,记录不会根据时间或空间界限而过期。相反,Kafka 将后续消息视为具有相同密钥的旧消息的更新,并保证永远不会删除每个密钥的最新消息。用户可以通过写入具有特定键的空值的所谓墓碑消息来彻底删除消息。
Kafka 中有五个主要 API:
-
生产者 API。允许应用程序发布记录流。
-
*消费者 API。*允许应用程序订阅主题并处理记录流。
-
连接器 API。执行可重用的生产者和消费者 API,将主题链接到现有应用程序。
-
流 API。该 API 将输入流转换为输出并产生结果。
-
*管理 API。*用于管理 Kafka 主题、代理和其他 Kafka 对象。
消费者和生产者 API 建立在 Kafka 消息传递协议之上,并为 Java 中的 Kafka 消费者和生产者客户端提供参考实现。底层消息传递协议是一种二进制协议,开发人员可以使用任何编程语言编写自己的消费者或生产者客户端。这使得 Kafka 从 Java 虚拟机 (JVM) 生态系统中解放出来。 Apache Kafka wiki 中维护了可用的非 Java 客户端列表。
Apache Kafka 用例
Apache Kafka 最受欢迎的用途是消息传递、网站活动跟踪、指标、日志聚合、流处理、事件源和提交日志记录。
-
Kafka 提高了吞吐量、内置分区、复制和容错能力,使其成为大规模消息处理应用程序的良好解决方案。
-
Kafka 可以将跟踪管道中的用户活动(页面浏览量、搜索量)重建为一组实时发布-订阅源。
-
Kafka 经常用于运营监控数据。这涉及汇总来自分布式应用程序的统计数据以生成集中的操作数据。
-
许多人使用 Kafka 来替代日志聚合解决方案。日志聚合通常从服务器上收集物理日志文件并将它们放在一个中心位置(例如,文件服务器或 HDFS)进行处理。 Kafka 抽象文件细节并将日志或事件数据以消息流的形式提供更清晰的抽象。这允许更低延迟的处理并且更容易支持多个数据源和分布式数据消费。
-
许多 Kafka 用户在由多个阶段组成的处理管道中处理数据,其中从 Kafka 主题中使用原始输入数据,然后聚合、丰富或以其他方式转换为新主题以供进一步使用或后续处理。例如,用于推荐新闻文章的处理管道可能会从 RSS 提要中抓取文章内容并将其发布到“文章”主题。进一步的处理可能会规范化或重复化该内容,并将清理后的文章内容发布到新主题,最后的处理阶段可能会尝试将该内容推荐给用户。这样的处理管道根据各个主题创建实时数据流图。
-
事件溯源是一种应用程序设计风格,其中状态变化被记录为按时间顺序排列的记录序列。 Kafka 对非常大的存储日志数据的支持使其成为以这种风格构建的应用程序的优秀后端。
-
Kafka 可以作为分布式系统的一种外部提交日志。日志有助于在节点之间复制数据,并充当故障节点恢复其数据的重新同步机制。 Kafka 中的日志压缩功能有助于支持这种用例。
汇合
Confluent 平台是一个企业级平台,它为 Kafka 提供了先进的功能,旨在帮助加速应用程序开发和连接、通过流处理实现转换、简化企业大规模运营并满足严格的架构要求。 Confluent 由 Apache Kafka 的原始创建者构建,它通过企业级功能扩展了 Kafka 的优势,同时消除了 Kafka 管理或监控的负担。如今,财富 100 强企业中有超过 80% 都采用数据流技术,其中大多数都使用 Confluent。
为什么选择 Confluent?
通过将历史数据和实时数据集成到单一的中央事实来源,Confluent 可以轻松构建全新类别的现代事件驱动应用程序,获得通用数据管道,并解锁具有完全可扩展性、性能和可靠性的强大新用例。
Confluent 的用途是什么?
Confluent 平台让您专注于如何从数据中获取商业价值,而不必担心底层机制,例如如何在不同的系统之间传输或集成数据。具体来说,Confluent Platform 简化了数据源与 Kafka 的连接、流应用程序的构建以及 Kafka 基础设施的保护、监控和管理。如今,Confluent 平台已广泛应用于众多行业,从金融服务、全渠道零售、自动驾驶汽车到欺诈检测、微服务和物联网。
下图显示了 Confluent Kafka 平台组件。
Confluent 事件流技术概述
Confluent 平台的核心是 "阿帕奇卡夫卡",最受欢迎的开源分布式流媒体平台。 Kafka 的主要功能如下:
-
发布和订阅记录流。
-
以容错的方式存储记录流。
-
处理记录流。
开箱即用的 Confluent Platform 还包括 Schema Registry、REST Proxy、总共 100 多个预构建的 Kafka 连接器和 ksqlDB。
Confluent 平台企业功能概述
-
*汇合控制中心。*用于管理和监控 Kafka 的基于 GUI 的系统。它允许您轻松管理 Kafka Connect 以及创建、编辑和管理与其他系统的连接。
-
适用于 Kubernetes 的 Confluent。 Confluent for Kubernetes 是一个 Kubernetes 操作员。 Kubernetes 操作员通过为特定平台应用程序提供独特的功能和要求来扩展 Kubernetes 的编排功能。对于 Confluent 平台,这包括大大简化 Kafka 在 Kubernetes 上的部署过程,并自动执行典型的基础设施生命周期任务。
-
*汇合连接器至 Kafka。*连接器使用 Kafka Connect API 将 Kafka 连接到其他系统,例如数据库、键值存储、搜索索引和文件系统。 Confluent Hub 具有适用于最流行的数据源和接收器的可下载连接器,包括使用 Confluent Platform 对这些连接器进行全面测试和支持的版本。更多详情请见 "此处"。
-
*自平衡集群。*提供自动负载平衡、故障检测和自我修复。它支持根据需要添加或停用代理,无需手动调整。
-
*汇合簇连接。*直接将集群连接在一起,并通过链接桥将主题从一个集群镜像到另一个集群。集群链接简化了多数据中心、多集群和混合云部署的设置。
-
*汇合自动数据平衡器。*监控集群中的代理数量、分区大小、分区数量以及集群内的领导者数量。它允许您转移数据以在整个集群中创建均匀的工作负载,同时限制重新平衡流量以最大限度地减少重新平衡时对生产工作负载的影响。
-
*汇合复制器。*使得在多个数据中心维护多个 Kafka 集群变得比以往更加简单。
-
*分层存储。*提供使用您最喜欢的云提供商存储大量 Kafka 数据的选项,从而减少运营负担和成本。通过分层存储,您可以将数据保存在经济高效的对象存储中,并且仅在需要更多计算资源时才扩展代理。
-
Confluent JMS 客户端。 Confluent Platform 包含一个与 JMS 兼容的 Kafka 客户端。该 Kafka 客户端实现了 JMS 1.1 标准 API,使用 Kafka 代理作为后端。如果您有使用 JMS 的遗留应用程序并且想要用 Kafka 替换现有的 JMS 消息代理,这将非常有用。
-
*Confluent MQTT 代理。*提供一种从 MQTT 设备和网关直接向 Kafka 发布数据的方法,无需中间的 MQTT 代理。
-
Confluent 安全插件。 Confluent 安全插件用于为各种 Confluent 平台工具和产品添加安全功能。目前,有一个可用于 Confluent REST 代理的插件,可帮助验证传入的请求并将经过验证的主体传播到对 Kafka 的请求。这使得 Confluent REST 代理客户端能够利用 Kafka 代理的多租户安全功能。