简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

技术概述

提供者

本节介绍此解决方案中使用的技术。

NetApp StorageGRID

NetApp StorageGRID 是一款高性能,经济高效的对象存储平台。通过使用分层存储,存储在代理的本地存储或 SAN 存储中的 Confluent Kafka 上的大部分数据将卸载到远程对象存储。此配置可通过减少重新平衡,扩展或缩减集群或更换故障代理所需的时间和成本,显著改善运营。对象存储在管理对象存储层上的数据方面发挥着重要作用,因此选择合适的对象存储非常重要。

StorageGRID 采用基于节点的分布式网格架构,提供智能的策略驱动型全局数据管理。它通过其无处不在的全局对象命名空间以及复杂的数据管理功能,简化了对数 PB 的非结构化数据和数十亿个对象的管理。单次调用对象访问可扩展到各个站点,并简化高可用性架构,同时确保无论站点或基础架构是否中断,都能持续访问对象。

多租户支持在同一网格中安全地处理多个非结构化云和企业数据应用程序,从而提高 NetApp StorageGRID 的 ROI 并增加其用例。您可以使用元数据驱动型对象生命周期策略创建多个服务级别,以优化多个地理位置的持久性,保护,性能和位置。用户可以调整数据管理策略并监控和应用流量限制,以便在不断变化的 IT 环境中需求发生变化时无中断地与数据环境重新对齐。

使用 Grid Manager 进行简单管理

StorageGRID 网格管理器是一个基于浏览器的图形界面,可用于在一个管理平台中跨全球分布位置配置,管理和监控 StorageGRID 系统。

错误:缺少图形映像

您可以使用 StorageGRID 网格管理器界面执行以下任务:

  • 管理全局分布的 PB 级对象存储库,例如图像,视频和记录。

  • 监控网格节点和服务以确保对象可用性。

  • 使用信息生命周期管理( ILM )规则管理对象数据随时间的放置。这些规则用于控制在载入对象数据后该数据会发生什么情况,如何防止其丢失,对象数据的存储位置以及数据的存储时间。

  • 监控系统内的事务,性能和操作。

信息生命周期管理策略

StorageGRID 具有灵活的数据管理策略,其中包括保留对象的副本以及使用 2+1 和 4+2 等 EC (纠删编码)方案来存储对象,具体取决于特定的性能和数据保护要求。随着工作负载和要求随时间的变化, ILM 策略也往往会随时间的变化而变化。修改 ILM 策略是一项核心功能,可使 StorageGRID 客户快速轻松地适应不断变化的环境。请检查 "ILM 策略" 和 在 StorageGRID 中设置。

性能

StorageGRID 可通过添加更多存储节点来扩展性能,这些节点可以是 VM ,裸机或专门构建的设备,如 "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

Apache Kafka 是一种使用 Java 和 Scala 编写的流处理的软件总线框架实施。它旨在提供一个统一的高吞吐量,低延迟平台来处理实时数据馈送。Kafka 可以连接到外部系统,以便通过 Kafka Connect 导出和导入数据,并提供 Kafka 流,这是一个 Java 流处理库。Kafka 使用基于 TCP 的二进制协议,该协议针对效率进行了优化,并依赖于 " 消息集 " 抽象,该抽象概念可将消息自然分组在一起,从而降低网络往返开销。这样可以实现更大的顺序磁盘操作,更大的网络数据包和连续的内存块,从而使 Kafka 能够将突发的随机消息写入流转变为线性写入。下图显示了 Apache Kafka 的基本数据流。

错误:缺少图形映像

Kafka 存储来自任意数量的进程的关键价值消息,这些进程称为 " 生产者 " 。可以将数据分区为不同主题中的不同分区。在分区中,消息严格按其偏移量(消息在分区中的位置)排序,并编制索引并随时间戳一起存储。其他称为使用者的进程可以从分区读取消息。对于流处理, Kafka 提供了流 API ,可用于写入使用 Kafka 数据的 Java 应用程序,并将结果写入 Kafka 。Apache Kafka 还可与外部流处理系统配合使用,例如 Apache Apex , Apache Flink , Apache Spark , Apache Storm 和 Apache NiFi 。

Kafka 在一个或多个服务器(称为代理)组成的集群上运行,所有主题的分区分布在各个集群节点上。此外,分区会复制到多个代理。这种架构使 Kafka 能够以容错方式提供大量消息流,并使其能够取代一些传统消息传送系统,例如 Java 消息服务( Java Message Service , JMS ),高级消息队列协议( Advanced Message Queuing Protocol , AMQP )等。自 0.11.0.0 版本以来, Kafka 提供了事务写入功能,可使用流 API 精确处理一次流。

Kafka 支持两种类型的主题:常规和压缩。可以为常规主题配置保留时间或空间限制。如果存在早于指定保留时间的记录,或者超出分区的绑定空间,则允许 Kafka 删除旧数据以释放存储空间。默认情况下,主题的保留时间为 7 天,但也可以无限期地存储数据。对于压缩主题,记录不会根据时间或空间限制过期。相反, Kafka 会将后续消息视为对具有相同密钥的旧消息的更新,并保证不会删除每个密钥的最新消息。用户可以通过使用特定密钥的空值编写所谓的 tombstone 消息来完全删除消息。

Kafka 中有五个主要 API :

  • * 生成程序 API-* 允许应用程序发布记录流。

  • * 使用者 API-* 允许应用程序订阅主题并处理记录流。

  • * 连接器 API" 。 * 执行可重复使用的生产者和使用者 API ,以便将这些主题链接到现有应用程序。

  • * 流 API 。 * 此 API 将输入流转换为输出并生成结果。

  • * 管理 API-* 用于管理 Kafka 主题,代理和其他 Kafka 对象。

消费者和生产者 API 基于 Kafka 消息传送协议构建,并在 Java 中为 Kafka 消费者和生产者客户端提供了参考实施。底层消息传送协议是一种二进制协议,开发人员可以使用该协议以任何编程语言编写自己的使用者或生产者客户端。这样便可解除 Kafka 对 Java 虚拟机( JVM )生态系统的锁定。可用的非 Java 客户端列表会保存在 Apache Kafka wiki 中。

Apache Kafka 用例

Apache Kafka 在消息传送,网站活动跟踪,指标,日志聚合,流处理, 事件源和提交日志记录。

  • Kafka 提高了吞吐量,内置分区,复制和容错功能,使其成为大规模消息处理应用程序的良好解决方案。

  • Kafka 可以在跟踪管道中重建用户的活动(页面视图,搜索),并将其作为一组实时发布订阅源。

  • Kafka 经常用于运行监控数据。其中包括汇总分布式应用程序的统计信息,以生成集中式运营数据源。

  • 许多人使用 Kafka 代替日志聚合解决方案。日志聚合通常从服务器中收集物理日志文件,并将其置于中央位置(例如文件服务器或 HDFS )进行处理。Kafka 可对文件详细信息进行抽象,并将日志或事件数据更清晰地抽象为一个消息流。这样可以降低延迟处理,并更轻松地支持多个数据源和分布式数据使用。

  • Kafka 的许多用户会在由多个阶段组成的处理管道中处理数据,在这些阶段中,原始输入数据会从 Kafka 主题中使用,然后进行聚合,丰富或转换为新主题,以供进一步使用或进行后续处理。例如,用于推荐新闻文章的处理管道可能会从 rss 源中搜寻文章内容并将其发布到 " 文章 " 主题。进一步处理可能会使此内容规范化或进行重复数据删除,并将经过清理的文章内容发布到新主题中,最终处理阶段可能会尝试向用户推荐此内容。此类处理管道会根据各个主题创建实时数据流图形。

  • 事件源化是一种应用程序设计模式,其状态更改将记录为按时间顺序排列的记录序列。Kafka 支持存储的非常大的日志数据,因此它是以这种模式构建的应用程序的理想后端。

  • Kafka 可以用作分布式系统的一种外部提交日志。此日志有助于在节点之间复制数据,并充当故障节点恢复数据的重新同步机制。Kafka 中的日志缩减功能有助于支持此用例。

两者结合

Confluent Platform 是一款企业就绪平台,为 Kafka 提供了高级功能,旨在帮助加快应用程序开发和连接速度,通过流处理实现转型,大规模简化企业运营并满足严格的架构要求。Confluent 由 Apache Kafka 的原始创建者构建,通过企业级功能扩展了 Kafka 的优势,同时消除了 Kafka 的管理或监控负担。如今,《财富》 100 强企业中有 80% 以上的企业都采用数据流技术,其中大多数企业都采用了流畅技术。

为什么选择 Confluent ?

通过将历史数据和实时数据集成到一个统一的中央真相来源中, Confluent 可以轻松构建一个全新的现代化事件驱动型应用程序类别,获得通用数据管道,并充分扩展性,性能和可靠性,释放出强大的新用例。

Confluent 的用途是什么?

借助整合平台,您可以专注于如何从数据中获得业务价值,而不是担心底层机制,例如如何在不同系统之间传输或集成数据。具体而言, Confluent Platform 可简化将数据源连接到 Kafka 的过程,构建流式应用程序,以及保护,监控和管理 Kafka 基础架构。如今, Consfluent Platform 已广泛用于各行各业的各种用例,从金融服务,全渠道零售和自动驾驶汽车到欺诈检测, 微服务和物联网。

下图显示了 Confluent Kafka 平台的组件。

错误:缺少图形映像

Confluent 事件流技术概述

Confluent Platform 的核心是 "Apache Kafka"一种最受欢迎的开源分布式流式平台。Kafka 的主要功能如下:

  • 发布并订阅记录流。

  • 以容错方式存储记录流。

  • 处理记录流。

即装即用的 Confluent 平台还包括架构注册表, REST 代理,总共 100 多个预构建的 Kafka 连接器和 ksqlDB 。

Confluent 平台企业功能概述

  • * 流畅控制中心 * 。一种基于 GUI 的系统,用于管理和监控 Kafka 。您可以通过它轻松管理 Kafka Connect ,以及创建,编辑和管理与其他系统的连接。

  • * Kubernetes 的 Confluent 。 * Kubernetes 的 Confluent 是 Kubernetes 的操作员。Kubernetes 操作员通过为特定平台应用程序提供独特的功能和要求,扩展了 Kubernetes 的业务流程功能。对于 Confluent Platform ,这包括大幅简化 Kubernetes 上 Kafka 的部署流程,并自动执行典型的基础架构生命周期任务。

  • * 连接 Kafka 的流畅连接器。 * 连接器使用 Kafka Connect API 将 Kafka 连接到数据库,密钥值存储,搜索索引和文件系统等其他系统。Confluent Hub 提供可下载的连接器,用于最常用的数据源和数据池,包括这些连接器经过全面测试且受支持的版本以及 Confluent 平台。有关更多详细信息,请参见 "此处"

  • * 自平衡集群。 * 提供自动化负载平衡,故障检测和自我修复功能。它支持根据需要添加或停用代理,无需手动调整。

  • * 流畅集群链接。 * 直接将集群连接在一起,并通过链路网桥将主题从一个集群镜像到另一个集群。集群链接可简化多数据中心,多集群和混合云部署的设置。

  • * 流畅自动数据平衡器。 * 监控集群中的代理数量,分区大小,分区数量和导数。它允许您在集群中移动数据以创建均匀的工作负载,同时限制重新平衡流量,以便在重新平衡的同时最大限度地减少对生产工作负载的影响。

  • * 流畅复制器。 * 使在多个数据中心维护多个 Kafka 集群变得比以往任何时候都更轻松。

  • * 分层存储。 * 提供了使用您喜欢的云提供商存储大量 Kafka 数据的选项,从而减轻了运营负担并降低了成本。借助分层存储,您只能在需要更多计算资源时,才可以将数据保存在经济高效的对象存储和扩展代理上。

  • * 流畅的 jms 客户端。 * 流畅平台包括适用于 Kafka 的与 jms 兼容的客户端。此 Kafka 客户端使用 Kafka 代理作为后端,实施了 Jms 1.1 标准 API 。如果旧版应用程序使用的是 jms ,并且您希望将现有的 jms 消息代理替换为 Kafka ,则此功能非常有用。

  • * 流畅的 MQT 代理。 * 提供了一种从 MQT 设备和网关直接向 Kafka 发布数据的方法,而无需在中间使用 MQT 代理。

  • * 流畅安全插件。 * 流畅安全插件用于为各种流畅平台工具和产品添加安全功能。目前,可以为 Confluent REST 代理提供一个插件,用于对传入请求进行身份验证,并将经过身份验证的主体传播到 Kafka 请求。这样, Confluent REST 代理客户端便可利用 Kafka 代理的多租户安全功能。