

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 开发故障排除
<a name="troubleshooting-development"></a>

本节包含有关诊断和修复 Managed Service for Apache Flink 应用程序的开发问题的信息。

**Topics**
+ [系统回滚最佳实践](troubleshooting-system-rollback.md)
+ [Hudi 配置最佳实践](troubleshooting-hudi.md)
+ [Apache Flink Flame 图表](troubleshooting-update-flamegraphs.md)
+ [EFO 连接器 1.15.2 的凭证提供程序问题](troubleshooting-credential-provider.md)
+ [带有不支持的 Kinesis 连接器的应用程序](troubleshooting-unsupported-kinesis-connectors.md)
+ [编译错误：“无法解析项目的依赖项”](troubleshooting-compile.md)
+ [无效的选项：“kinesisanalyticsv2”](troubleshooting-cli-update.md)
+ [UpdateApplication 操作不会重新加载应用程序代码](troubleshooting-update.md)
+ [S3 StreamingFileSink FileNotFoundExceptions](troubleshooting-s3sink.md)
+ [FlinkKafkaConsumer 使用 savepoint 停止时出现问题](troubleshooting-FlinkKafkaConsumer.md)
+ [Flink 1.15 异步接收器死锁](troubleshooting-async-deadlock.md)
+ [Amazon Kinesis Data Streams 源在重新分片期间处理失序](troubleshooting-kinesis-data-streams-processing-out-of-order.md)
+ [实时向量嵌入蓝图常见问题解答和故障排除](troubleshooting-blueprints.md)

# 系统回滚最佳实践
<a name="troubleshooting-system-rollback"></a>

借助 Amazon Managed Service for Apache Flink 中的自动系统回滚和操作可见性功能，您可以识别和解决应用程序存在的问题。

## 系统回滚
<a name="troubleshooting-unsupported-kinesis-connectors-error"></a>

如果您的应用程序更新或扩展操作因客户错误（例如代码错误或权限问题）而失败，则在您已选择启用此功能时，Amazon Managed Service for Apache Flink 将自动尝试回滚到以前的运行版本。有关更多信息，请参阅 [为 Managed Service for Apache Flink 应用程序启用系统回滚](how-system-rollbacks.md)。如果此自动回滚失败，或者您尚未选择加入或选择退出，则您的应用程序将进入 `READY` 状态。若要更新应用程序，请完成以下步骤：   查看 Amazon Managed Service for Apache Flink 控制台或使用 `DescribeApplicationOperation` API 查看错误描述，了解操作失败的原因。   要查看完整的错误堆栈，请使用 [Cloudwatch 日志](https://docs.aws.amazon.com/managed-flink/latest/java/logging.html)。   常见问题包括权限不足、代码更改不兼容或基础设施配置错误。解决潜在问题。   使用 `UpdateApplicaton` API 重新部署您的新应用程序版本。   

## 手动回滚
<a name="troubleshooting-unsupported-kinesis-connectors-error"></a>

如果应用程序长时间处于停滞状态，或者应用程序已成功过渡到 `Running` 状态，但您看到下游问题（例如在已成功更新的 Flink 应用程序中处理错误），则可以使用 `RollbackApplication` API 手动回滚应用程序。

1. 调用 `RollbackApplication` - 这将恢复到之前的运行版本并还原之前的状态。

1. 使用 `DescribeApplicationOperation` API 监控回滚操作。

1. 如果回滚失败，请使用之前的系统回滚步骤。

## 操作可见性
<a name="troubleshooting-unsupported-kinesis-connectors-error"></a>

`ListApplicationOperations` API 显示您的应用程序上所有客户和系统操作的历史记录。

1. 从列表中获取失败操作的 *operationId*。

1. 调用 `DescribeApplicationOperation` 并查看状态和 *statusDescription*。

1. 如果操作失败，描述将指出需要调查的潜在错误。

**常见的错误代码错误：**使用回滚功能恢复到上一个工作版本。解决错误并重试更新。

**权限问题：**使用 `DescribeApplicationOperation` 查看所需的权限。更新应用程序权限并重试。

**适用于 Apache Flink 的亚马逊托管服务服务问题：**查看 AWS Health Dashboard 或提交支持案例。

# Hudi 配置最佳实践
<a name="troubleshooting-hudi"></a>

要在 Managed Service for Apache Flink 上运行 Hudi 连接器，我们建议进行以下配置更改。

禁用 `hoodie.embed.timeline.server`

Flink 上的 Hudi 连接器在 Flink 作业管理器（JM）上设置了一个嵌入式时间轴（TM）服务器，用于缓存元数据，从而在作业并行度较高时提高性能。我们建议您在 Managed Service for Apache Flink 上禁用此嵌入式服务器，因为我们禁用 JM 和 TM 之间的非 Flink 通信。

如果启用此服务器，Hudi 写入操作将首先尝试连接到 JM 上的嵌入式服务器，然后回退到从 Amazon S3 读取元数据。这意味着 Hudi 会导致连接超时，从而延迟 Hudi 的写入并对 Managed Service for Apache Flink 造成性能影响。

# Apache Flink Flame 图表
<a name="troubleshooting-update-flamegraphs"></a>

默认情况下，支持火焰图的 Managed Service for Apache Flink版本中的应用程序处于启用状态。如Fl [ink文档中所述，如果您保持图形处于打开状态，Fl](https://nightlies.apache.org/flink/flink-docs-release-1.15//docs/ops/debugging/flame_graphs/) ame Graphs可能会影响应用程序的性能。

 如果您想为应用程序禁用 Flame Graphs，请创建一个案例，请求为您的应用程序 ARN 禁用该图表。有关更多信息，请参阅 [AWS 支持中心](https://console.aws.amazon.com/support/home#/)。

# EFO 连接器 1.15.2 的凭证提供程序问题
<a name="troubleshooting-credential-provider"></a>

1.15.2 之前的 Kinesis Data Streams EFO 连接器版本存在一个[已知问题](https://issues.apache.org/jira/browse/FLINK-29205)，其中`FlinkKinesisConsumer`不符合配置。`Credential Provider`由于该问题，有效的配置被忽略，这会导致使用`AUTO`凭据提供程序。这可能会导致使用 EFO 连接器跨账户访问 Kinesis 时出现问题。

要解决此错误，请使用 EFO 连接器版本 1.15.3 或更高版本。

# 带有不支持的 Kinesis 连接器的应用程序
<a name="troubleshooting-unsupported-kinesis-connectors"></a>

如果应用程序使用绑定[到应用程序或存档 (ZIP) 的不支持的 Kinesis Connector 版本（1.15.2 之前的版本），则适用于 Apache Flink 1.15 或更高版本的 Apache Flink 托管服务将自动拒绝应用程序的启动或更新](https://docs.aws.amazon.com/managed-flink/latest/java/flink-1-15-2.html)。 JARs 

## 拒绝错误
<a name="troubleshooting-unsupported-kinesis-connectors-error"></a>

通过提交创建/更新应用程序调用时，您将看到以下错误：

```
An error occurred (InvalidArgumentException) when calling the CreateApplication operation: An unsupported Kinesis connector version has been detected in the application. Please update flink-connector-kinesis to any version equal to or newer than 1.15.2.
For more information refer to connector fix: https://issues.apache.org/jira/browse/FLINK-23528
```

## 补救步骤
<a name="troubleshooting-unsupported-kinesis-connectors-steps-to-remediate"></a>
+ 更新应用程序对的依赖关系`flink-connector-kinesis`。如果您使用 Maven 作为项目的构建工具，请按照以下步骤操作[更新 Maven 依赖关系](#troubleshooting-unsupported-kinesis-connectors-update-maven-dependency)。如果您使用的是 Gradle，请按照[更新 Gradle 依赖关系](#troubleshooting-unsupported-kinesis-connectors-update-gradle-dependency)。
+ 重新打包应用程序。
+ 上传到 Amazon S3 存储桶
+ 重新提交创建/更新申请请求，修改后的应用程序刚刚上传到 Amazon S3 存储桶。
+ 如果您继续看到相同的错误消息，请重新检查您的应用程序依赖关系。如果问题仍然存在，请创建支持请求。

### 更新 Maven 依赖关系
<a name="troubleshooting-unsupported-kinesis-connectors-update-maven-dependency"></a>

1. 打开项目的`pom.xml`。

1. 查找项目的依赖关系。它们看起来像：

   ```
   <project>
   
       ...
   
       <dependencies>
   
           ...
   
           <dependency>
               <groupId>org.apache.flink</groupId>
               <artifactId>flink-connector-kinesis</artifactId>
           </dependency>
   
           ...
   
       </dependencies>
   
       ...
   
   </project>
   ```

1. 更新`flink-connector-kinesis`到等于或高于 1.15.2 的版本。例如：

   ```
   <project>
   
       ...
   
       <dependencies>
   
           ...
   
           <dependency>
               <groupId>org.apache.flink</groupId>
               <artifactId>flink-connector-kinesis</artifactId>
               <version>1.15.2</version>
           </dependency>
   
           ...
   
       </dependencies>
   
       ...
   
   </project>
   ```

### 更新 Gradle 依赖关系
<a name="troubleshooting-unsupported-kinesis-connectors-update-gradle-dependency"></a>

1. 打开项目`build.gradle`（或`build.gradle.kts`针对 Kotlin 应用程序）。

1. 查找项目的依赖关系。它们看起来像：

   ```
   ...
   
   dependencies {
   
       ...
   
       implementation("org.apache.flink:flink-connector-kinesis")
   
       ...
   
   }
   
   ...
   ```

1. 更新`flink-connector-kinesis`到等于或高于 1.15.2 的版本。例如：

   ```
   ...
   
   dependencies {
   
       ...
   
       implementation("org.apache.flink:flink-connector-kinesis:1.15.2")
   
       ...
   
   }
   
   ...
   ```

# 编译错误：“无法解析项目的依赖项”
<a name="troubleshooting-compile"></a>

要编译 Managed Service for Apache Flink示例应用程序，您必须先下载并编译 Apache Flink Kinesis 连接器，然后将其添加到本地 Maven 存储库中。如果尚未将连接器添加到存储库中，则会显示类似下面的编译错误：

```
Could not resolve dependencies for project your project name: Failure to find org.apache.flink:flink-connector-kinesis_2.11:jar:1.8.2 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
```

要解决此错误，必须下载连接器的 Apache Flink 源代码（版本为 1.8.2 [https://flink.apache.org/downloads.html](https://flink.apache.org/downloads.html)）。有关如何下载、编译和安装 Apache Flink 源代码的说明，请参阅[将 Apache Flink Kinesis Streams 连接器与之前的 Apache Flink 版本一起使用](earlier.md#how-creating-apps-building-kinesis)。

# 无效的选项：“kinesisanalyticsv2”
<a name="troubleshooting-cli-update"></a>

要使用适用于 Managed Service for Apache Flink API 的 v2，你需要最新版本的 AWS Command Line Interface (AWS CLI)。

有关升级的信息 AWS CLI，请参阅[《*AWS Command Line Interface 用户指南*》 AWS Command Line Interface中的安装](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。

# UpdateApplication 操作不会重新加载应用程序代码
<a name="troubleshooting-update"></a>

如果未指定 S3 对象版本，则该[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)操作不会重新加载具有相同文件名的应用程序代码。要使用相同的文件名重新加载应用程序代码，请在 S3 存储桶上启用版本控制，并使用 `ObjectVersionUpdate` 参数指定新的对象版本。有关在 S3 存储桶中启用对象版本控制的更多信息，请参阅[启用或禁用版本控制](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/enable-versioning.html)。

# S3 StreamingFileSink FileNotFoundExceptions
<a name="troubleshooting-s3sink"></a>

如果缺少由其保存点引用的正在处理的部件文件，则从快照启动`FileNotFoundException`时，Managed Service for Apache Flink 应用程序可能会遇到正在进行的部分文件。出现这种故障模式时，Managed Service for Apache Flink 应用程序的操作员状态通常是不可恢复的，必须在不使用快照的情况下重新启动。`SKIP_RESTORE_FROM_SNAPSHOT`参见以下示例堆栈跟踪：

```
java.io.FileNotFoundException: No such file or directory: s3://amzn-s3-demo-bucket/pathj/INSERT/2023/4/19/7/_part-2-1234_tmp_12345678-1234-1234-1234-123456789012
        at org.apache.hadoop.fs.s3a.S3AFileSystem.s3GetFileStatus(S3AFileSystem.java:2231)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.innerGetFileStatus(S3AFileSystem.java:2149)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:2088)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.open(S3AFileSystem.java:699)
        at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:950)
        at org.apache.flink.fs.s3hadoop.HadoopS3AccessHelper.getObject(HadoopS3AccessHelper.java:98)
        at org.apache.flink.fs.s3.common.writer.S3RecoverableMultipartUploadFactory.recoverInProgressPart(S3RecoverableMultipartUploadFactory.java:97)
...
```

Flink `StreamingFileSink` 将记录写入[文件系统](https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/deployment/filesystems/overview/)支持的文件系统。鉴于传入的流可以不受限制，因此将数据组织成大小有限的部分文件，并在写入数据时添加新文件。零件生命周期和展期政策决定了零件文件的时间、大小和命名。

在检查点和保存指向（快照）期间，所有待处理文件都将被重命名并提交。但是，正在处理的部分文件不会提交，而是会重命名，其引用保留在检查点或保存点元数据中，以便在恢复任务时使用。这些正在处理的零件文件最终将变为 “待处理”，由随后的检查点或保存点重命名并提交。

以下是缺少正在处理的零件文件的根本原因和缓解措施：
+ 用于启动适用于 Apache Flink 的托管服务应用程序的陈旧快照 — 只有在应用程序停止或更新时拍摄的最新系统快照才能用于通过 Amazon S3 启动适用于 Amazon Flink 的托管服务应用程序。 StreamingFileSink为避免此类故障，请使用最新的系统快照。
  + 例如，当您在停止或更新期间选择使用创建的快照`CreateSnapshot`而不是系统触发的快照时，就会发生这种情况。旧快照的保存点保留了对正在进行的部分文件的 out-of-date引用，该文件已被后续检查点或保存点重命名并提交。
  + 当从非最新 Stop/Update 事件中选择系统触发的快照时，也会发生这种情况。例如，已禁用系统快照但已`RESTORE_FROM_LATEST_SNAPSHOT`配置的应用程序。通常，使用 Amazon S3 的 Apache Flink 应用程序的托管服务 StreamingFileSink 应始终启用和`RESTORE_FROM_LATEST_SNAPSHOT`配置系统快照。
+ 已移除正在处理的部分文件 — 由于正在处理的部分文件位于 S3 存储桶中，因此其他有权访问该存储桶的组件或参与者可以将其删除。
  + 当您停止应用程序的时间过长，并且您的应用程序的 savepoint 引用的正在处理的部分文件已被 [S3 存储桶 MultiPartUpload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)生命周期策略删除时，就会发生这种情况。为避免此类故障，请确保您的 S3 Bucket MPU 生命周期策略涵盖的期限足够长，足以满足您的用例。
  + 当正在处理的零件文件被手动删除或被系统的另一个组件删除时，也可能发生这种情况。为避免此类故障，请确保正在处理的零件文件不会被其他参与者或组件删除。
+ 在 savepoint 之后触发自动检查点的争用条件 — 这会影响 Managed Service for Apache Flink 1.13 及以下版本。Managed Service for Apache Flink 1.15 版本中已修复此问题。将您的应用程序迁移到最新版本的 Managed Service for Apache Flink 以防止问题再次发生。我们还建议从迁移 StreamingFileSink 到[FileSink](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/connectors/datastream/filesystem/#file-sink)。
  + 当应用程序停止或更新时，适用于 Managed Service for Apache Flink 会触发保存点并分两步停止应用程序。如果在这两个步骤之间触发了自动检查点，则该保存点将无法使用，因为其正在处理的部分文件将被重命名并可能被提交。

# FlinkKafkaConsumer 使用 savepoint 停止时出现问题
<a name="troubleshooting-FlinkKafkaConsumer"></a>

如果您启用了系统快照，则在使用旧版 FlinkKafkaConsumer 时，您的应用程序可能会陷入更新、停止或缩放的困境。没有针对此[问题的](https://issues.apache.org/jira/browse/FLINK-28758)已发布修复程序，因此我们建议您升级到新版本[KafkaSource](https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/kafka/#kafka-source)以缓解此问题。

如果您在`FlinkKafkaConsumer`启用快照的情况下使用的，则当 Flink 任务在处理 savepoint API 请求时停止时，`FlinkKafkaConsumer`可能会失败，并报告运行时系统错误。`ClosedException`在这种情况下，Flink 应用程序会卡住，表现为失败的检查点。

# Flink 1.15 异步接收器死锁
<a name="troubleshooting-async-deadlock"></a>

Apache Flink 实现 AWS AsyncSink 接口的连接器存在一个[已知问题](https://issues.apache.org/jira/browse/FLINK-32230)。这会影响使用带有以下连接器的 Flink 1.15 的应用程序：
+ 对于 Java 应用程序：
  + KinesisStreamsSink – `org.apache.flink:flink-connector-kinesis`
  + KinesisStreamsSink – `org.apache.flink:flink-connector-aws-kinesis-streams`
  + KinesisFirehoseSink – `org.apache.flink:flink-connector-aws-kinesis-firehose`
  + DynamoDbSink – `org.apache.flink:flink-connector-dynamodb`
+ Flink SQL/TableAPI/Python 应用程序：
  + kinesis – `org.apache.flink:flink-sql-connector-kinesis`
  + kinesis – `org.apache.flink:flink-sql-connector-aws-kinesis-streams`
  + firehose – `org.apache.flink:flink-sql-connector-aws-kinesis-firehose`
  + dynamodb – `org.apache.flink:flink-sql-connector-dynamodb`

受影响的应用程序将出现以下症状：
+ Flink 任务处于`RUNNING`状态，但未处理数据；
+ 没有任务重启；
+ 检查点正在超时。

该问题是由 AWS SDK中的一个[错误](https://github.com/aws/aws-sdk-java-v2/issues/4354)引起的，该错误导致它在使用异步HTTP客户端时不会向调用者显示某些错误。这会导致接收器无限期地等待 “飞行中请求” 在检查点刷新操作期间完成。

从版本 **2.20.** 144 开始，此问题已在 AWS SDK 中得到修复。

以下是有关如何更新受影响的连接器以在应用程序中使用新版本的 AWS SDK 的说明：

**Topics**
+ [更新 Java 应用程序](troubleshooting-async-deadlock-update-java-apps.md)
+ [更新 Python 应用程序](troubleshooting-async-deadlock-update-python-apps.md)

# 更新 Java 应用程序
<a name="troubleshooting-async-deadlock-update-java-apps"></a>

按照以下步骤更新 Java 应用程序：

## flink-connector-kinesis
<a name="troubleshooting-async-deadlock-update-java-apps-flink-connector-kinesis"></a>

如果应用程序使用 `flink-connector-kinesis`。

Kinesis 连接器使用阴影将一些依赖项（包括 AWS SDK）打包到连接器 jar 中。要更新 S AWS DK 版本，请按以下步骤替换这些阴影类：

------
#### [ Maven ]

1. 将 Kinesis 连接器和所需的 AWS SDK 模块添加为项目依赖项。

1. 配置`maven-shade-plugin`：

   1. 在复制 Kinesis 连接器 jar 的内容时，添加过滤器以排除阴影的 AWS SDK 类。

   1. 按照 Kinesis 连接器的预期，添加重新定位规则，将更新的 AWS SDK 类移到包中。

   **pom.xml** 

   ```
   <project>
       ...    
       <dependencies>
           ...
           <dependency>
               <groupId>org.apache.flink</groupId>
               <artifactId>flink-connector-kinesis</artifactId>
               <version>1.15.4</version>
           </dependency>
           
           <dependency>
               <groupId>software.amazon.awssdk</groupId>
               <artifactId>kinesis</artifactId>
               <version>2.20.144</version>
           </dependency>
           <dependency>
               <groupId>software.amazon.awssdk</groupId>
               <artifactId>netty-nio-client</artifactId>
               <version>2.20.144</version>
           </dependency>
           <dependency>
               <groupId>software.amazon.awssdk</groupId>
               <artifactId>sts</artifactId>
               <version>2.20.144</version>
           </dependency>
           ...
       </dependencies>
       ...
       <build>
           ...
           <plugins>
               ...
               <plugin>
                   <groupId>org.apache.maven.plugins</groupId>
                   <artifactId>maven-shade-plugin</artifactId>
                   <version>3.1.1</version>
                   <executions>
                       <execution>
                           <phase>package</phase>
                           <goals>
                               <goal>shade</goal>
                           </goals>
                           <configuration>
                               ...
                               <filters>
                                   ...
                                   <filter>
                                       <artifact>org.apache.flink:flink-connector-kinesis</artifact>
                                       <excludes>
                                           <exclude>org/apache/flink/kinesis/shaded/software/amazon/awssdk/**</exclude>
                                           <exclude>org/apache/flink/kinesis/shaded/org/reactivestreams/**</exclude>
                                           <exclude>org/apache/flink/kinesis/shaded/io/netty/**</exclude>
                                           <exclude>org/apache/flink/kinesis/shaded/com/typesafe/netty/**</exclude>
                                       </excludes>
                                   </filter>
                                   ...
                               </filters>
                               <relocations>
                                   ...
                                   <relocation>
                                       <pattern>software.amazon.awssdk</pattern>
                                       <shadedPattern>org.apache.flink.kinesis.shaded.software.amazon.awssdk</shadedPattern>
                                   </relocation>
                                   <relocation>
                                       <pattern>org.reactivestreams</pattern>
                                       <shadedPattern>org.apache.flink.kinesis.shaded.org.reactivestreams</shadedPattern>
                                   </relocation>
                                   <relocation>
                                       <pattern>io.netty</pattern>
                                       <shadedPattern>org.apache.flink.kinesis.shaded.io.netty</shadedPattern>
                                   </relocation>
                                   <relocation>
                                       <pattern>com.typesafe.netty</pattern>
                                       <shadedPattern>org.apache.flink.kinesis.shaded.com.typesafe.netty</shadedPattern>
                                   </relocation>
                                   ...
                               </relocations>
                              ...
                           </configuration>
                       </execution>
                   </executions>
               </plugin>
               ...
           </plugins>
           ... 
       </build>
   </project>
   ```

------
#### [ Gradle ]

1. 将 Kinesis 连接器和所需的 AWS SDK 模块添加为项目依赖项。

1. 调整 ShadowJar 配置：

   1. 复制 Kinesis 连接器 jar 的内容时，请排除阴影的 AWS SDK 类。

   1. 将更新后的 AWS SDK 类重新定位到 Kinesis 连接器预期的软件包中。

   **build.gradle**

   ```
   ...
   dependencies {
       ...
       flinkShadowJar("org.apache.flink:flink-connector-kinesis:1.15.4")
       
       flinkShadowJar("software.amazon.awssdk:kinesis:2.20.144")
       flinkShadowJar("software.amazon.awssdk:sts:2.20.144")
       flinkShadowJar("software.amazon.awssdk:netty-nio-client:2.20.144")
       ...
   }
   ...
   shadowJar {
       configurations = [project.configurations.flinkShadowJar]
   
       exclude("software/amazon/kinesis/shaded/software/amazon/awssdk/**/*")
       exclude("org/apache/flink/kinesis/shaded/org/reactivestreams/**/*.class")
       exclude("org/apache/flink/kinesis/shaded/io/netty/**/*.class")
       exclude("org/apache/flink/kinesis/shaded/com/typesafe/netty/**/*.class")
       
       relocate("software.amazon.awssdk", "org.apache.flink.kinesis.shaded.software.amazon.awssdk")
       relocate("org.reactivestreams", "org.apache.flink.kinesis.shaded.org.reactivestreams")
       relocate("io.netty", "org.apache.flink.kinesis.shaded.io.netty")
       relocate("com.typesafe.netty", "org.apache.flink.kinesis.shaded.com.typesafe.netty")
   }
   ...
   ```

------

## 其他受影响的连接器
<a name="troubleshooting-async-deadlock-update-java-apps-flink-another-connector"></a>

如果应用程序使用其他受影响的连接器：

要更新 AWS SDK 版本，应在项目构建配置中强制执行 SDK 版本。

------
#### [ Maven ]

将 AWS SDK 物料清单 (BOM) 添加到`pom.xml`文件的依赖项管理部分，以强制执行项目的 SDK 版本。

**pom.xml**

```
<project>
    ...    
    <dependencyManagement>
        <dependencies>
            ...
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>2.20.144</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            ...
        </dependencies>
    </dependencyManagement>
    ...
</project>
```

------
#### [ Gradle ]

添加对 AWS SDK 物料清单 (BOM) 的平台依赖，以强制执行项目的 SDK 版本。这需要 Gradle 5.0 或更高版本：

**build.gradle**

```
...
dependencies {
    ...
    flinkShadowJar(platform("software.amazon.awssdk:bom:2.20.144"))
    ...
}
...
```

------

# 更新 Python 应用程序
<a name="troubleshooting-async-deadlock-update-python-apps"></a>

Python 应用程序可以通过两种不同的方式使用连接器：将连接器和其他 Java 依赖项打包为单个 uber-jar 的一部分，或者直接使用连接器 jar。要修复受 Async Sink 死锁影响的应用程序，请执行以下操作：
+ 如果应用程序使用 uber jar，请按照中的说明进行操作[更新 Java 应用程序](troubleshooting-async-deadlock-update-java-apps.md)。
+ 要从源代码重建连接器 jar，请使用以下步骤：

**从源头构建连接器：**

先决条件，类似于 Flink [编译要求](https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/flinkdev/building/#build-flink)：
+ Java 11
+ Maven 3.2.5

## flink-sql-connector-kinesis
<a name="troubleshooting-async-deadlock-update-python-apps-flink-sql-connector-kinesis"></a>

1. 下载 Flink 1.15.4 源代码：

   ```
   wget https://archive.apache.org/dist/flink/flink-1.15.4/flink-1.15.4-src.tgz
   ```

1. 解压缩源代码：

   ```
   tar -xvf flink-1.15.4-src.tgz
   ```

1. 导航到 kinesis 连接器目录

   ```
   cd flink-1.15.4/flink-connectors/flink-connector-kinesis/
   ```

1. 编译并安装连接器 jar，指定所需的 AWS SDK 版本。要加快构建速度`-DskipTests`，请使用跳过测试执行和`-Dfast`跳过其他源代码检查：

   ```
   mvn clean install -DskipTests -Dfast -Daws.sdkv2.version=2.20.144
   ```

1. 导航到 kinesis 连接器目录

   ```
   cd ../flink-sql-connector-kinesis
   ```

1. 编译并安装 sql 连接器 jar：

   ```
   mvn clean install -DskipTests -Dfast
   ```

1. 生成的罐子将在以下网址发售：

   ```
   target/flink-sql-connector-kinesis-1.15.4.jar
   ```

## flink-sql-connector-aws-kinesis-streams
<a name="troubleshooting-async-deadlock-update-python-apps-flink-sql-connector-aws-kinesis-streams"></a>

1. 下载 Flink 1.15.4 源代码：

   ```
   wget https://archive.apache.org/dist/flink/flink-1.15.4/flink-1.15.4-src.tgz
   ```

1. 解压缩源代码：

   ```
   tar -xvf flink-1.15.4-src.tgz
   ```

1. 导航到 kinesis 连接器目录

   ```
   cd flink-1.15.4/flink-connectors/flink-connector-aws-kinesis-streams/
   ```

1. 编译并安装连接器 jar，指定所需的 AWS SDK 版本。要加快构建速度`-DskipTests`，请使用跳过测试执行和`-Dfast`跳过其他源代码检查：

   ```
   mvn clean install -DskipTests -Dfast -Daws.sdk.version=2.20.144
   ```

1. 导航到 kinesis 连接器目录

   ```
   cd ../flink-sql-connector-aws-kinesis-streams
   ```

1. 编译并安装 sql 连接器 jar：

   ```
   mvn clean install -DskipTests -Dfast
   ```

1. 生成的罐子将在以下网址发售：

   ```
   target/flink-sql-connector-aws-kinesis-streams-1.15.4.jar
   ```

## flink-sql-connector-aws-kinesis-firehose
<a name="troubleshooting-async-deadlock-update-python-apps-flink-sql-connector-kinesis-firehose"></a>

1. 下载 Flink 1.15.4 源代码：

   ```
   wget https://archive.apache.org/dist/flink/flink-1.15.4/flink-1.15.4-src.tgz
   ```

1. 解压缩源代码：

   ```
   tar -xvf flink-1.15.4-src.tgz
   ```

1. 导航到连接器目录

   ```
   cd flink-1.15.4/flink-connectors/flink-connector-aws-kinesis-firehose/
   ```

1. 编译并安装连接器 jar，指定所需的 AWS SDK 版本。要加快构建速度`-DskipTests`，请使用跳过测试执行和`-Dfast`跳过其他源代码检查：

   ```
   mvn clean install -DskipTests -Dfast -Daws.sdk.version=2.20.144
   ```

1. 导航到 sql 连接器目录

   ```
   cd ../flink-sql-connector-aws-kinesis-firehose
   ```

1. 编译并安装 sql 连接器 jar：

   ```
   mvn clean install -DskipTests -Dfast
   ```

1. 生成的罐子将在以下网址发售：

   ```
   target/flink-sql-connector-aws-kinesis-firehose-1.15.4.jar
   ```

## flink-sql-connector-dynamodb
<a name="troubleshooting-async-deadlock-update-python-apps-flink-sql-connector-dynamodb"></a>

1. 下载 Flink 1.15.4 源代码：

   ```
   wget https://archive.apache.org/dist/flink/flink-connector-aws-3.0.0/flink-connector-aws-3.0.0-src.tgz
   ```

1. 解压缩源代码：

   ```
   tar -xvf flink-connector-aws-3.0.0-src.tgz
   ```

1. 导航到连接器目录

   ```
   cd flink-connector-aws-3.0.0
   ```

1. 编译并安装连接器 jar，指定所需的 AWS SDK 版本。要加快构建速度`-DskipTests`，请使用跳过测试执行和`-Dfast`跳过其他源代码检查：

   ```
   mvn clean install -DskipTests -Dfast -Dflink.version=1.15.4 -Daws.sdk.version=2.20.144
   ```

1. 生成的罐子将在以下网址发售：

   ```
   flink-sql-connector-dynamodb/target/flink-sql-connector-dynamodb-3.0.0.jar
   ```

# Amazon Kinesis Data Streams 源在重新分片期间处理失序
<a name="troubleshooting-kinesis-data-streams-processing-out-of-order"></a>

当前的 FlinkKinesisConsumer 实现并未在 Kinesis 分片之间提供强有力的排序保证。这可能会导致在重新分片 Kinesis Stream 期间进行 out-of-order处理，对于遇到处理延迟的 Flink 应用程序尤其如此。在某些情况下，例如基于事件时间的窗口运算符，事件可能会因为由此产生的延迟而被丢弃。

![\[Diagram showing shards and shard consumers with time progression and trim horizon.\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/images/flink-ts.png)


这是开源 Flink 中的一个[已知问题](https://issues.apache.org/jira/browse/FLINK-6349)。在连接器修复可用之前，请确保您的 Flink 应用程序在重新分区期间不会落后于 Kinesis Data Streams。通过确保 Flink 应用程序能够容忍处理延迟，您可以最大限度地减少 out-of-order处理的影响和数据丢失的风险。

# 实时向量嵌入蓝图常见问题解答和故障排除
<a name="troubleshooting-blueprints"></a>

查看以下常见问题解答和故障排除部分，对实时向量嵌入蓝图问题进行故障排除。有关实时向量嵌入蓝图的更多信息，请参阅[实时向量嵌入蓝图](https://docs.aws.amazon.com/msk/latest/developerguide/ai-vector-embedding-integration-learn-more.html)。

[有关 Apache Flink 应用程序的一般托管服务疑难解答，请参阅 https://docs.aws.amazon.com/managed-flink/ latest/java/troubleshooting-runtime.html。](https://docs.aws.amazon.com/managed-flink/latest/java/troubleshooting-runtime.html)

**Topics**
+ [实时向量嵌入蓝图 - 常见问题解答](troubleshooting-blueprints-FAQ.md)
+ [实时向量嵌入蓝图 - 故障排除](troubleshooting-blueprints-TS.md)

# 实时向量嵌入蓝图 - 常见问题解答
<a name="troubleshooting-blueprints-FAQ"></a>

查看以下有关实时向量嵌入蓝图的常见问题解答。有关实时向量嵌入蓝图的更多信息，请参阅[实时向量嵌入蓝图](https://docs.aws.amazon.com/msk/latest/developerguide/ai-vector-embedding-integration-learn-more.html)。

**Topics**
+ [这个蓝图创造了哪些 AWS 资源？](#troubleshooting-blueprints-1)
+ [AWS CloudFormation 堆栈部署完成后我的操作是什么？](#troubleshooting-blueprints-2)
+ [源 Amazon MSK 主题中的数据结构应该是什么？](#troubleshooting-blueprints-3)
+ [我能否指定要嵌入的部分消息？](#troubleshooting-blueprints-4)
+ [我是否可以从多个 Amazon MSK 主题中读取数据？](#troubleshooting-blueprints-5)
+ [我能否使用正则表达式来配置 Amazon MSK 主题名称？](#troubleshooting-blueprints-6)
+ [可以从 Amazon MSK 主题中读取的消息的最大大小是多少？](#troubleshooting-blueprints-7)
+ [支持 OpenSearch 哪种类型？](#troubleshooting-blueprints-8)
+ [为什么我需要使用矢量搜索集合、向量索引，并在我的 OpenSearch 无服务器集合中添加向量字段？](#troubleshooting-blueprints-9)
+ [我应该将哪些方面设置为向量字段的维度？](#troubleshooting-blueprints-10)
+ [配置的 OpenSearch 索引中的输出是什么样子？](#troubleshooting-blueprints-11)
+ [我能否指定要添加到存储在 OpenSearch 索引中的文档的元数据字段？](#troubleshooting-blueprints-12)
+ [我应该指望 OpenSearch 索引中有重复的条目吗？](#troubleshooting-blueprints-13)
+ [我可以向多个 OpenSearch 索引发送数据吗？](#troubleshooting-blueprints-14)
+ [我能否在单个 AWS 账户中部署多个实时向量嵌入应用程序？](#troubleshooting-blueprints-15)
+ [多个实时向量嵌入应用程序能否使用相同的数据来源或接收器？](#troubleshooting-blueprints-16)
+ [该应用程序是否支持跨账户连接？](#troubleshooting-blueprints-17)
+ [该应用程序是否支持跨区域连接？](#troubleshooting-blueprints-18)
+ [我的 Amazon MSK 集群和 OpenSearch 集合能否位于不同的 VPCs 或子网中？](#troubleshooting-blueprints-19)
+ [该应用程序支持哪些嵌入模型？](#troubleshooting-blueprints-20)
+ [我能否根据自己的工作负载微调应用程序的性能？](#troubleshooting-blueprints-21)
+ [支持哪些 Amazon MSK 身份验证类型？](#troubleshooting-blueprints-22)
+ [什么是 `sink.os.bulkFlushIntervalMillis`，我该如何设置？](#troubleshooting-blueprints-23)
+ [当我部署 Managed Service for Apache Flink 应用程序时，它将从 Amazon MSK 主题的哪一点开始读取消息？](#troubleshooting-blueprints-24)
+ [如何使用 `source.msk.starting.offset`？](#troubleshooting-blueprints-25)
+ [支持哪些分块策略？](#troubleshooting-blueprints-26)
+ [如何读取向量数据存储中的记录？](#troubleshooting-blueprints-27)
+ [可在何处找到源代码的新更新？](#troubleshooting-blueprints-28)
+ [我能否更改 AWS CloudFormation 模板并更新适用于 Apache Flink 的托管服务应用程序？](#troubleshooting-blueprints-29)
+ [会代表我 AWS 监控和维护应用程序吗？](#troubleshooting-blueprints-30)
+ [此应用程序是否会将我的数据移出我 AWS 账户？](#troubleshooting-blueprints-31)

## 这个蓝图创造了哪些 AWS 资源？
<a name="troubleshooting-blueprints-1"></a>

要查找部署在您的账户中的资源，请导航到 AWS CloudFormation 控制台并确定以您为 Apache Flink 托管服务应用程序提供的名称开头的堆栈名称。选择**资源**选项卡，查看作为堆栈一部分创建的资源。以下是堆栈创建的关键资源：
+ 实时向量嵌入 Managed Service for Apache Flink 应用程序
+ 用于存放实时向量嵌入应用程序源代码的 Amazon S3 存储桶
+ CloudWatch 用于存储日志的日志组和日志流
+ 用于获取和创建资源的 Lambda 函数
+ 适用于 Lambdas、适用于 Apache Flink 应用程序的托管服务以及访问亚马逊 Bedrock 和亚马逊服务的 IAM 角色和策略 OpenSearch 
+ Amazon OpenSearch 服务的数据访问政策
+ 用于访问亚马逊 Bedrock 和亚马逊 OpenSearch 服务的 VPC 终端节点

## AWS CloudFormation 堆栈部署完成后我的操作是什么？
<a name="troubleshooting-blueprints-2"></a>

 AWS CloudFormation 堆栈部署完成后，访问适用于 Apache Flink 的托管服务控制台，找到您的蓝图 Apache Flink 托管服务应用程序。选择**配置**选项卡并确认所有运行时属性的设置是否正确。这些设置可能会溢出到下一页。如果您对这些设置放心，请选择**运行**。该应用程序将开始从您的主题中摄取消息。

要查看新版本，请参阅 [https://github.com/awslabs/real-time-vectorization-of-streaming-](https://github.com/awslabs/real-time-vectorization-of-streaming-data/releases) data/release。

## 源 Amazon MSK 主题中的数据结构应该是什么？
<a name="troubleshooting-blueprints-3"></a>

我们目前支持结构化和非结构化源数据。
+ 非结构化数据以 `source.msk.data.type` 中的 `STRING` 表示。从传入的消息中按原样读取数据。
+ 我们目前支持结构化的 JSON 数据（以 `source.msk.data.type` 中的 `JSON` 表示）。数据必须始终采用 JSON 格式。如果应用程序收到格式错误的 JSON，则应用程序将失败。
+ 使用 JSON 作为源数据类型时，请确保所有源主题中的每条消息都是有效的 JSON。如果您使用此设置订阅一个或多个不包含 JSON 对象的主题，则应用程序将失败。如果一个或多个主题混合了结构化和非结构化数据，我们建议您在 Managed Service for Apache Flink 应用程序中将源数据配置为非结构化数据。

## 我能否指定要嵌入的部分消息？
<a name="troubleshooting-blueprints-4"></a>
+ 对于非结构化输入数据（如果`source.msk.data.type`是）`STRING`，应用程序将始终嵌入整条消息并将整条消息存储在配置的 OpenSearch 索引中。
+ 对于结构化输入数据（其中 `source.msk.data.type` 为 `JSON`），您可以配置 `embed.input.config.json.fieldsToEmbed` 以指定应选择 JSON 对象中的哪个字段进行嵌入。这仅适用于顶级 JSON 字段，不适用于嵌套 JSONs 和包含 JSON 数组的消息。使用 .\$1 嵌入整个 JSON。

## 我是否可以从多个 Amazon MSK 主题中读取数据？
<a name="troubleshooting-blueprints-5"></a>

是，您可以使用此应用程序从多个 Amazon MSK 主题中读取数据。来自所有主题的数据均必须是相同的类型（STRING 或 JSON），否则可能会导致应用程序失败。来自所有主题的数据始终存储在单个 OpenSearch索引中。

## 我能否使用正则表达式来配置 Amazon MSK 主题名称？
<a name="troubleshooting-blueprints-6"></a>

`source.msk.topic.names` 不支持正则表达式列表。我们支持以逗号分隔的主题名称列表或包含所有主题的 `.*` 正则表达式。

## 可以从 Amazon MSK 主题中读取的消息的最大大小是多少？
<a name="troubleshooting-blueprints-7"></a>

可以处理的消息的最大大小受目前设置为 25,000,000 的 Amazon Bedrock InvokeModel 正文限制的限制。有关更多信息，请参阅 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html#API_runtime_InvokeModel_RequestBody)。

## 支持 OpenSearch 哪种类型？
<a name="troubleshooting-blueprints-8"></a>

我们同时支持 OpenSearch 域名和集合。如果您使用的是 OpenSearch集合，请确保使用矢量集合并创建用于此应用程序的向量索引。这将允许您使用 OpenSearch 矢量数据库功能来查询数据。要了解更多信息，请参阅 [Amazon S OpenSearch ervice 的矢量数据库功能说明](https://aws.amazon.com/blogs/big-data/amazon-opensearch-services-vector-database-capabilities-explained/)。

## 为什么我需要使用矢量搜索集合、向量索引，并在我的 OpenSearch 无服务器集合中添加向量字段？
<a name="troubleshooting-blueprints-9"></a>

 OpenSearchServerless 中的*向量搜索*集合类型提供了可扩展且性能高的相似度搜索功能。它简化了现代机器学习（ML）增强搜索体验和生成式人工智能（AI）应用程序的构建。有关更多信息，请参阅[使用向量搜索集合](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vector-search.html?icmpid=docs_console_unmapped)。

## 我应该将哪些方面设置为向量字段的维度？
<a name="troubleshooting-blueprints-10"></a>

根据要使用的嵌入模型设置向量字段的维度。请参阅下表，并确认相应文档中的这些值。


**向量字段维度**  

| Amazon Bedrock 向量嵌入模型名称 | 模型提供的输出维度支持 | 
| --- | --- | 
|  Amazon Titan 文本嵌入 V1  | 1,536 | 
|  Amazon Titan 文本嵌入 V2  | 1,024（默认）、384、256 | 
|  Amazon Titan Multimodal Embeddings G1  | 1,024（默认）、384、256 | 
|  Cohere Embed（英文版）  | 1024 | 
|  Cohere Embed（多语版）  | 1024 | 

## 配置的 OpenSearch 索引中的输出是什么样子？
<a name="troubleshooting-blueprints-11"></a>

 OpenSearch 索引中的每个文档都包含以下字段：
+ **original\$1data**：用于生成嵌入的数据。对于 STRING 类型，它是整条消息。对于 JSON 对象，它是用于嵌入的 JSON 对象。它可以是消息中的整个 JSON，也可以是 JSON 中的指定字段。例如，如果选择从传入的消息中嵌入名称，则输出将如下所示：

  ```
  "original_data": "{\"name\":\"John Doe\"}"
  ```
+ **embedded\$1data**：由 Amazon Bedrock 生成的向量浮动嵌入数组
+ **日期**：存储文档的 UTC 时间戳 OpenSearch

## 我能否指定要添加到存储在 OpenSearch 索引中的文档的元数据字段？
<a name="troubleshooting-blueprints-12"></a>

不，目前，我们不支持向存储在 OpenSearch 索引中的最终文档中添加其他字段。

## 我应该指望 OpenSearch 索引中有重复的条目吗？
<a name="troubleshooting-blueprints-13"></a>

根据您配置应用程序的方式，您可能会在索引中看到重复的消息。一种常见的原因是应用程序重新启动。默认情况下，应用程序配置为从源主题中最早的消息开始读取。当您更改配置时，应用程序会重新启动并再次处理主题中的所有消息。为避免重新处理，请参阅有关如何使用 source.msk.starting.offset 并正确设置应用程序的起始偏移量的文档。

## 我可以向多个 OpenSearch 索引发送数据吗？
<a name="troubleshooting-blueprints-14"></a>

不是，该应用程序支持将数据存储到单个 OpenSearch 索引中。要将向量化输出设置为多个索引，必须部署单独的 Managed Service for Apache Flink 应用程序。

## 我能否在单个 AWS 账户中部署多个实时向量嵌入应用程序？
<a name="troubleshooting-blueprints-15"></a>

可以，如果每个应用程序都有唯一的名称，则可以在单个 AWS 账户 中部署多个实时向量嵌入 Managed Service for Apache Flink 应用程序。

## 多个实时向量嵌入应用程序能否使用相同的数据来源或接收器？
<a name="troubleshooting-blueprints-16"></a>

可以，您可以创建多个实时向量嵌入 Managed Service for Apache Flink 应用程序，这些应用程序从同一主题读取数据或将数据存储在同一个索引中。

## 该应用程序是否支持跨账户连接？
<a name="troubleshooting-blueprints-17"></a>

不，要使应用程序成功运行，Amazon MSK 集群和集 OpenSearch合必须与您尝试设置 Apache Flink 托管服务应用程序的 AWS 账户 位置相同。

## 该应用程序是否支持跨区域连接？
<a name="troubleshooting-blueprints-18"></a>

不可以，该应用程序仅允许您在Apache Flink托管服务应用程序的同一区域部署带有 Amazon MSK 集群和集 OpenSearch 合的托管服务 Flink 应用程序。

## 我的 Amazon MSK 集群和 OpenSearch 集合能否位于不同的 VPCs 或子网中？
<a name="troubleshooting-blueprints-19"></a>

是的，我们支持 Amazon MSK 集群 VPCs 和不同子网中的集 OpenSearch 合，前提是它们位于同一子网中。 AWS 账户请参阅（一般 MSF 故障排除），以确保您的设置正确。

## 该应用程序支持哪些嵌入模型？
<a name="troubleshooting-blueprints-20"></a>

目前，该应用程序支持 Bedrock 支持的所有模型。这些方法包括：
+ Amazon Titan Embeddings G1 - Text
+  Amazon Titan 文本嵌入 V2
+  Amazon Titan Multimodal Embeddings G1 
+  Cohere Embed（英文版） 
+  Cohere Embed（多语版） 

## 我能否根据自己的工作负载微调应用程序的性能？
<a name="troubleshooting-blueprints-21"></a>

可以。应用程序的吞吐量取决于许多因素，所有这些因素都可以由客户控制：

1. **AWS MSF KPUs**：应用程序采用默认并行度系数 2 和每 KPU 1 的并行度进行部署，并行度已开启自动缩放。但是，建议您根据工作负载配置 Managed Service for Apache Flink 应用程序的扩展。有关更多信息，请参阅[审核 Managed Service for Apache Flink 应用程序资源](https://docs.aws.amazon.com/managed-flink/latest/java/how-resources.html)。

1. **Amazon Bedrock**：根据所选的 Amazon Bedrock 按需模式，可能适用不同的配额。在 Bedrock 中查看服务配额，以了解该服务能够处理的工作负载。有关更多信息，请参阅 [Amazon Bedrock 的配额](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html)。

1. **Amazon S OpenSearch ervic** e：此外，在某些情况下，您可能会注意到 OpenSearch 这是您的管道中的瓶颈。有关扩展的信息，请参见 OpenSearch [缩放 Amazon OpenSearch 服务域](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/sizing-domains.html)的大小。

## 支持哪些 Amazon MSK 身份验证类型？
<a name="troubleshooting-blueprints-22"></a>

我们仅支持 IAM MSK 身份验证类型。

## 什么是 `sink.os.bulkFlushIntervalMillis`，我该如何设置？
<a name="troubleshooting-blueprints-23"></a>

向 Amazon Serv OpenSearch ice 发送数据时，批量刷新间隔是批量请求的运行间隔，无论操作的数量或请求的大小如何。默认值设置为 1 毫秒。

虽然设置刷新间隔有助于确保及时为数据编制索引，但如果将该值设置得过低，也会导致开销增加。在选择刷新间隔时，请考虑您的使用案例以及及时编制索引的重要性。

## 当我部署 Managed Service for Apache Flink 应用程序时，它将从 Amazon MSK 主题的哪一点开始读取消息？
<a name="troubleshooting-blueprints-24"></a>

应用程序将开始读取 Amazon MSK 主题中的消息，偏移量由应用程序运行时配置中设置的 `source.msk.starting.offset` 配置指定。如果未明确设置 `source.msk.starting.offset`，则应用程序的默认行为是从主题中最早的可用消息开始读取。

## 如何使用 `source.msk.starting.offset`？
<a name="troubleshooting-blueprints-25"></a>

根据所需的行为，将 `ource.msk.starting.offset` 显式设置为以下值之一：


+  最早：默认设置，即从分区中最早的偏移量读取。这是合适的选项，尤其是在以下情况下：
  +  您已经新创建 Amazon MSK 主题和使用者应用程序。
  +  您需要重播数据，这样才能构建或重建状态。在实现事件来源模式或初始化需要完整数据历史记录视图的新服务时，这一点很重要。
+ 最新：Managed Service for Apache Flink 应用程序将从分区末尾读取消息。如果您只关心生成新消息，并且不需要处理历史数据，我们建议您使用此选项。在此设置中，使用者将忽略现有消息，只读取上游创建者发布的新消息。
+ 已提交：Managed Service for Apache Flink 应用程序将开始使用来自使用组已提交偏移量的消息。如果提交的偏移量不存在，则将使用最早的重置策略。

## 支持哪些分块策略？
<a name="troubleshooting-blueprints-26"></a>

我们正在使用 [langchain](https://js.langchain.com/v0.1/docs/get_started/introduction/) 库对输入进行分块。只有当输入的长度大于所选的 `maxSegmentSizeInChars` 时，才会应用分块。我们支持以下五种分块类型：
+ `SPLIT_BY_CHARACTER`: 将尽可能多的字符放入每个区块中，其中每个区块的长度不大于。 maxSegmentSize InChars不关心空格，因此它可以截断单词。
+ `SPLIT_BY_WORD`: 将查找作为分块依据的空格字符。任何单词都不会被截断。
+ `SPLIT_BY_SENTENCE`: 使用带有英语语句模型的 Apache OpenNLP 库来检测语句边界。
+ `SPLIT_BY_LINE`: 将查找作为分块依据的换行字符。
+ `SPLIT_BY_PARAGRAPH`: 将查找作为分块依据的连续换行字符。

拆分策略会根据前面的顺序回退，其中较大的分块策略（例如 `SPLIT_BY_PARAGRAPH`）回退到 `SPLIT_BY_CHARACTER`。例如，在使用 `SPLIT_BY_LINE` 时，如果一行太长，则该行将按语句进行子分块，其中每个分块将尽可能多地放入语句。如果有任何语句太长，那么它将在单词层面上进行分块。如果一个单词太长，那么它将按字符拆分。

## 如何读取向量数据存储中的记录？
<a name="troubleshooting-blueprints-27"></a>

1. 当 `source.msk.data.type` 为 `STRING` 时
   + **original\$1data**：Amazon MSK 消息中的完整原始字符串。
   + **embedded\$1data**：如果嵌入向量不为空（已应用分块），则从 `chunk_data` 中创建该向量；如果未应用分块，则从 `original_data` 中创建该向量。
   + **chunk\$1data：**仅在对原始数据进行分块时才会出现。包含用于在 `embedded_data` 中创建嵌入的原始消息块。

1. 当 `source.msk.data.type` 为 `JSON` 时
   + **original\$1data**：应用 JSON 密钥筛选*后*来自 Amazon MSK 消息的完整原始 JSON。
   + **embedded\$1data**：如果嵌入向量不为空（已应用分块），则从 `chunk_data` 中创建该向量；如果未应用分块，则从 `original_data` 中创建该向量。
   + **chunk\$1key**：仅在对原始数据进行分块时才会出现。包含 `original_data` 中区块所属的 JSON 键。例如，在 `original_data` 的示例中，它可能看起来类似于嵌套键的 `jsonKey1.nestedJsonKeyA` 或*元数据*。
   + **chunk\$1data：**仅在对原始数据进行分块时才会出现。包含用于在 `embedded_data` 中创建嵌入的原始消息块。

是，您可以使用此应用程序从多个 Amazon MSK 主题中读取数据。来自所有主题的数据均必须是相同的类型（STRING 或 JSON），否则可能会导致应用程序失败。来自所有主题的数据始终存储在单个 OpenSearch索引中。

## 可在何处找到源代码的新更新？
<a name="troubleshooting-blueprints-28"></a>

前往 [https://github.com/awslabs/real-time-vectorization-of-streaming-data/release 查看新版本](https://github.com/awslabs/real-time-vectorization-of-streaming-data/releases)。

## 我能否更改 AWS CloudFormation 模板并更新适用于 Apache Flink 的托管服务应用程序？
<a name="troubleshooting-blueprints-29"></a>

不，更改 AWS CloudFormation 模板不会更新适用于 Apache Flink 的托管服务应用程序。中的任何新变化都 AWS CloudFormation 意味着需要部署新的堆栈。

## 会代表我 AWS 监控和维护应用程序吗？
<a name="troubleshooting-blueprints-30"></a>

不， AWS 不会代表您监控、扩展、更新或修补此应用程序。

## 此应用程序是否会将我的数据移出我 AWS 账户？
<a name="troubleshooting-blueprints-31"></a>

Apache Flink 托管服务应用程序读取和存储的所有数据都保留在您的 AWS 账户 账户中，永远不会离开您的帐户。

# 实时向量嵌入蓝图 - 故障排除
<a name="troubleshooting-blueprints-TS"></a>

查看以下有关实时向量嵌入蓝图的故障排除主题。有关实时向量嵌入蓝图的更多信息，请参阅[实时向量嵌入蓝图](https://docs.aws.amazon.com/msk/latest/developerguide/ai-vector-embedding-integration-learn-more.html)。

**Topics**
+ [我的 CloudFormation 堆栈部署失败或已回滚。我可以采取哪些行动来修复此问题？](#troubleshooting-blueprints-deployment)
+ [我不想让自己的应用程序从 Amazon MSK 主题的开头开始读取消息。我应该怎么办？](#troubleshooting-blueprints-beginning)
+ [如何知道 Managed Service for Apache Flink 应用程序是否存在问题，以及如何对其进行调试？](#troubleshooting-blueprints-debug)
+ [我应该为自己的 Managed Service for Apache Flink 应用程序监控哪些关键指标？](#troubleshooting-blueprints-metrics)

## 我的 CloudFormation 堆栈部署失败或已回滚。我可以采取哪些行动来修复此问题？
<a name="troubleshooting-blueprints-deployment"></a>
+ 转到您的 CFN 堆栈并找到堆栈失败的原因。这可能与权限缺失、 AWS 资源名称冲突等原因有关。修复部署失败的根本原因。有关更多信息，请参阅[ CloudWatch 疑难解答指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#basic-ts-guide)。
+  [可选]每个 VPC 中的每个服务只能有一个 VPC 端点。如果您部署了多个实时矢量嵌入蓝图来写入同一 VPC 中的 Amazon Serv OpenSearch ice 集合，则它们可能会共享 VPC 终端节点。它们可能已经存在于您的 VPC 账户中，或者第一个实时矢量嵌入蓝图堆栈将为 Amazon Bedrock 和 Amazon Serv OpenSearch ice 创建 VPC 终端节点，供您账户中部署的所有其他堆栈使用。如果堆栈出现故障，请检查该堆栈是否为 Amazon Bedrock 和 Amazon Serv OpenSearch ice 创建了 VPC 终端节点，如果这些终端节点未在您的账户中的其他任何地方使用，则将其删除。有关删除 VPC 终端节点的步骤，请参阅有关如何安全删除应用程序的文档。
+ 您的账户中可能还有其他使用该 VPC 端点的服务或应用程序。删除该端点可能会导致其他服务的网络中断。删除这些端点时务必小心。

## 我不想让自己的应用程序从 Amazon MSK 主题的开头开始读取消息。我应该怎么办？
<a name="troubleshooting-blueprints-beginning"></a>

根据所需的行为，必须将 `source.msk.starting.offset` 显式设置为以下值之一：
+ **最早偏移量**：分区中最早的偏移量。
+ **最新偏移量**：使用者将从分区末端读取消息。
+ **提交的偏移量**：从使用者在分区内处理的最后一条消息中读取。

## 如何知道 Managed Service for Apache Flink 应用程序是否存在问题，以及如何对其进行调试？
<a name="troubleshooting-blueprints-debug"></a>

使用 [Managed Service for Apache Flink 故障排除指南](https://docs.aws.amazon.com/managed-flink/latest/java/troubleshooting-runtime.html)，调试与应用程序有关的 Managed Service for Apache Flink 问题。

## 我应该为自己的 Managed Service for Apache Flink 应用程序监控哪些关键指标？
<a name="troubleshooting-blueprints-metrics"></a>
+ 常规 Managed Service for Apache Flink 应用程序的所有可用指标都可以帮助您监控应用程序。有关更多信息，请参阅 [Managed Service for Apache Flink 中的指标和维度](https://docs.aws.amazon.com/managed-flink/latest/java/metrics-dimensions.html)。
+ 要监控亚马逊 Bedrock 指标，请参阅[亚马逊 Bedrock 的亚马逊 CloudWatch 指标](https://docs.aws.amazon.com/bedrock/latest/userguide/monitoring.html#runtime-cloudwatch-metrics)。
+ 我们添加两个用于监控生成嵌入的性能的新指标。在中的`EmbeddingGeneration`操作名称下找到它们 CloudWatch。这两个指标是：
  + **BedrockTitanEmbeddingTokenCount**：向 Amazon Bedrock 发出的单次请求中存在的代币数量。
  + **BedrockEmbeddingGenerationLatencyMs**：报告发送和接收来自 Amazon Bedrock 的生成嵌入的响应所花费的时间（以毫秒为单位）。
+ 对于 Amazon Serv OpenSearch ice 无服务器集合，您可以使用诸如`IngestionDataRate``IngestionDocumentErrors`、之类的指标。有关更多信息，请参阅[使用 Amazon CloudWatch 监控 OpenSearch 无服务器](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/monitoring-cloudwatch.html)。
+ 有关 OpenSearch 预配置的指标，请参阅[使用 Amazon CloudWatch 监控 OpenSearch 集群指标](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/managedomains-cloudwatchmetrics.html)。