
# FlinkServer作业对接HTTP服务
#### 操作场景
本章节提供了如何使用FlinkServer写FlinkSQL对接HTTP服务。支持对接HTTP维表，通过HTTP维表Connector实现流数据与HTTP服务数据的实时关联查询。
本章节仅适用于MRS 3.6.0-LTS及之后的版本。
#### 前提条件
- 集群中已安装HDFS、Yarn、Flink服务。
- 已部署和MRS集群环境网络相通的HTTP服务。
- 参考[创建FlinkServer权限角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24049.html)创建一个具有FlinkServer管理员权限的用户用于访问Flink WebUI，如：**flinkuser**。
 
#### HTTP服务作为维表
1. 使用**flinkuser**登录Manager界面，选择"集群 \> 服务 \> Flink"，在"Flink Web UI"右侧，单击链接，访问Flink的WebUI。
2. 参考[集群连接模式创建Flink SQL作业](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24024.html)，新建Flink SQL流作业，参考如下内容在作业开发界面进行作业开发，配置完成后启动作业。
   
   需勾选"基础参数"中的"开启CheckPoint"，"时间间隔（ms）"可设置为"60000"，"模式"可使用默认值。
   ```
   CREATE TABLE Customers (
     id STRING,
     id2 STRING,
     msg STRING,
     uuid STRING,
     details ROW < isActive BOOLEAN,
     nestedDetails ROW < balance STRING > >
   ) WITH (
     'connector' = 'http-lookup',
     'format' = 'json',
     'url' = 'http://http服务IP:http服务端口',
     'asyncPolling' = 'true'
   );
   CREATE TABLE Orders (
     id STRING,
     id2 STRING,
     proc_time AS PROCTIME()
   ) WITH (
     'connector' = 'datagen',
     'rows-per-second' = '1',
     'fields.id.kind' = 'sequence',
     'fields.id.start' = '1',
     'fields.id.end' = '120'
   );
   CREATE TABLE result_table(
     id STRING,
     id2 STRING,
     msg STRING,
     uuid STRING,
     isActive BOOLEAN,
     balance STRING
   ) WITH ('connector' = 'print');
   insert into
     result_table
   SELECT
     o.id,
     o.id2,
     c.msg,
     c.uuid,
     c.isActive,
     c.balance
   FROM
     Orders AS o
     JOIN Customers FOR SYSTEM_TIME AS OF o.proc_time AS c ON o.id = c.id
     AND o.id2 = c.id2;
   ```
   
   
 
#### 相关表参数配置说明
表1创建HTTP维表时可选配置参数 
| 参数名称                                     | 参数默认值           | 是否必须配置 | 参数描述                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| connector                                | -               | 是      | http服务做维表，值写为"http-lookup"。                                                                                                                                                                                                                                                                                                                                               |
| format                                   | -               | 是      | http服务返回的消息格式，例如：json。                                                                                                                                                                                                                                                                                                                                                    |
| url                                      | -               | 是      | http服务URL，例如：http://127.0.0.1:8080/client。                                                                                                                                                                                                                                                                                                                                |
| asyncPolling                             | false           | 否      | 是否使用异步轮询机制，该机制基于Flink的Async I/O实现。 - true：启用异步轮询机制。  - false（默认）：不启用异步轮询机制。                                                             |
| lookup-method                            | GET             | 否      | 查找HTTP服务时使用的HTTP请求方法，支持GET、POST和PUT方法。 默认使用GET方法请求HTTP服务。                                                                                                                                                                                                                                                                                |
| lookup.cache                             | NONE            | 否      | 维表的缓存策略，目前支持NONE和PARTIAL。 - NONE（默认）：不缓存，每次查找都请求HTTP服务，适用于数据实时性要求高的场景。  - PARTIAL：查找HTTP服务时缓存，适用于维度数据变化不频繁且查询量大的场景。使用PARTIAL缓存时，需配合配置缓存相关参数。   |
| lookup.partial-cache.max-rows            | (none) Integer  | 否      | 维表缓存的最大行数，若超过该值，则最早的行记录将会过期。使用该配置时，"lookup.cache"需要设置为"PARTIAL"。                                                                                                                                                                                                                                                                                                          |
| lookup.partial-cache.expire-after-write  | (none) Duration | 否      | 在记录写入缓存后该记录的最大保留时间。使用该配置时，"lookup.cache"需要设置为"PARTIAL"。                                                                                                                                                                                                                                                                                                                   |
| lookup.partial-cache.expire-after-access | (none) Duration | 否      | 缓存中的记录最长保留时间。使用该配置时，"lookup.cache"需要设置为"PARTIAL"。                                                                                                                                                                                                                                                                                                                         |
| lookup.partial-cache.cache-missing-key   | true            | 否      | 在HTTP服务中未关联到数据时，是否缓存空记录，默认为true。使用该配置时，"lookup.cache"需要设置为"PARTIAL"。                                                                                                                                                                                                                                                                                                      |
| lookup.max-retries                       | 3               | 否      | 查找HTTP服务失败后的最大重试次数。当HTTP请求失败时，将按该次数进行重试，全部重试失败后抛出异常。默认值为3次，适用于网络不稳定的场景。                                                                                                                                                                                                                                                                                                   |
   
