串流摄取
以前,将数据从 Amazon Kinesis 等串流服务加载到 Amazon Redshift 涉及多个步骤。这包括将串流连接到 Amazon Kinesis Data Firehose,以及等待 Kinesis Data Firehose 在 Amazon S3 中存储数据,以不同长度的缓冲区间隔使用各种大小的批处理。然后 Kinesis Data Firehose 会启动 COPY 命令,以将数据从 Amazon S3 加载到 Redshift 中的表。
串流摄取不再在 Amazon S3 中暂存数据,而是直接以低延迟、高速度的方式将串流数据从 Amazon Kinesis Data Streams 和 Amazon Managed Streaming for Apache Kafka 摄取到 Amazon Redshift 具体化视图中。因此,它减少了访问数据所需的时间并降低了存储成本。您可以为 Amazon Redshift 集群或 Amazon Redshift Serverless 配置串流摄取并使用 SQL 语句创建具体化视图,如在 Amazon Redshift 中创建具体化视图中所述。然后借助具体化视图刷新,每秒可以摄取数百兆字节的数据。从而快速访问快速刷新的外部数据。
数据流
Amazon Redshift 预置集群是串流使用者。具体化视图是从串流中读取的数据的着陆区,读取的数据将在到达时进行处理。例如,可以通过熟悉的 SQL 来使用 JSON 值并映射到具体化视图的数据列。刷新具体化视图时,Amazon Redshift 计算节点会将每个 Kinesis 数据分片或 Kafka 分区分配给一个计算切片。每个切片都会使用所分配分片中的数据,直到视图与 Kinesis 流的 SEQUENCE_NUMBER
或 Kafka 主题的上一个 Offset
相等为止。后续的具体化视图刷新会从上次刷新的最新 SEQUENCE_NUMBER
读取数据,直到与串流数据或主题数据相等为止。
串流摄取使用案例
Amazon Redshift 串流摄取的使用案例涉及处理会持续生成(流式传输)且必须在生成后的短时间内(低延迟)处理的数据。这称为近实时分析。数据源多种多样,包括 IoT 设备、系统遥测数据,或热点网站或应用程序的点击流数据。
串流摄取注意事项
以下是设置串流摄取环境时有关性能和计费的重要注意事项和最佳实践。
自动刷新使用情况 – 具体化视图的自动刷新查询被视为任何其他用户工作负载。自动刷新会在数据串流到达时从串流加载数据。
-
串流摄取和 Amazon Redshift Serverless – 适用于预置集群上的 Amazon Redshift 串流摄取的相同设置和配置说明也适用于 Amazon Redshift Serverless 上的串流摄取。重要的是将 Amazon Redshift Serverless 配置为必要的 RPU 级别,以便支持具有自动刷新功能的串流摄取和其他工作负载。有关更多信息,请参阅 Amazon Redshift Serverless 的账单。
-
与 Amazon MSK 集群位于不同可用区的 Amazon Redshift 节点 – 当您配置串流摄取时,如果为 Amazon MSK 启用了机架感知功能,则 Amazon Redshift 会尝试连接到同一可用区中的 Amazon MSK 集群。如果您的所有节点都与 Amazon Redshift 集群位于不同的可用区,则会产生跨可用区的数据传输费用。为避免这种情况,请在与 Amazon Redshift 集群相同的可用区中至少保留一个 Amazon MSK 代理集群节点。
-
刷新起始位置 – 创建具体化视图后,其初始刷新从 Kinesis 串流的
TRIM_HORIZON
或从 Amazon MSK 主题的偏移 0 开始。 -
数据格式 – 支持的数据格式仅限于可以从
VARBYTE
转换的那些格式。有关更多信息,请参阅 VARBYTE 类型 和 VARBYTE 运算符: 流式传输到多个具体化视图 – 在 Amazon Redshift 中,我们建议在大多数情况下将每个串流的数据放置在单个具体化视图中。但也可以摄取串流并将数据放入多个具体化视图中。例如,在一个使用案例中,您摄取了一个包含运动数据的串流,但您将每项运动的数据整理到一个单独的具体化视图中。
请注意,当您将数据摄入并刷新多个具体化视图时,可能会产生更高的传出成本,特别是从串流提供程序读取数据时。此外,读取多个具体化视图使用的资源更多,从而会影响其他工作负载。另请注意串流提供程序的带宽、吞吐量和性能限制。有关数据流定价的更多信息,请参阅 Kinesis Data Streams 定价和 Amazon Managed Streaming for Apache Kafka 定价。
限制
功能或操作 | 描述 |
---|---|
Kafka 主题长度限制 | 不能使用名称超过 128 个字符(不包括引号)的 Kafka 主题。有关更多信息,请参阅名称和标识符。 |
具体化视图的增量刷新和联接 | 具体化视图必须以递增方式维护。Kinesis 或 Amazon MSK 无法完全重新计算,因为在默认情况下,它们不会保留过去 24 小时或 7 天的串流或主题历史记录。您可以在 Kinesis 或 Amazon MSK 中设置更长的数据留存期。但是,这会导致需要更多的维护和成本。此外,在 Kinesis 流或 Amazon MSK 主题上创建的具体化视图目前不支持联接。创建串流或主题的具体化视图后,您可以创建另一个具体化视图,以用于将串流具体化视图联接到其他具体化视图、表或视图。 有关更多信息,请参阅 REFRESH MATERIALIZED VIEW。 |
记录解析 | Amazon Redshift 串流摄取不支持解析 Kinesis Producer Library 聚合的记录(KPL 关键概念 - 聚合)。聚合的记录摄取后将存储为二进制协议缓冲区数据。(有关更多信息,请参阅协议缓冲 |
解压缩 |
|
最大记录大小 | Amazon Redshift 可以从 Kinesis 或 Amazon MSK 摄取的任何记录字段的最大大小略小于 1MB。以下几点详细说明了该行为:
|
错误记录 | 在每种情况下,如果由于数据的大小超过最大大小而无法将记录摄取到 Amazon Redshift,则会跳过该记录。在这种情况下,具体化视图刷新仍然会成功,并且每条错误记录的一段会写入到 SYS_STREAM_SCAN_ERRORS 系统表中。系统不会跳过由业务逻辑导致的错误,例如计算错误或类型转换产生的错误。在向具体化视图定义添加逻辑之前,请仔细测试逻辑,以避免出现这些错误。 |