druid query lookup-3

This commit is contained in:
liujianhuan 2020-07-14 14:00:37 +08:00
parent 406d91bc86
commit 5c00a0abb0
2 changed files with 299 additions and 1 deletions

View File

@ -1 +1,2 @@
## 配置
## 配置
#### Coordinator

View File

@ -99,24 +99,321 @@ http://<COORDINATOR_IP>:<PORT>/druid/coordinator/v1/lookups/config/{tier}/{id}
### 配置Lookups的API
#### 批量更新Lookup
Lookups可以通过发送一个POST请求到 `/druid/coordinator/v1/lookups/config` 进行批量更新, 数据格式为:
```json
{
"<tierName>": {
"<lookupName>": {
"version": "<version>",
"lookupExtractorFactory": {
"type": "<someExtractorFactoryType>",
"<someExtractorField>": "<someExtractorValue>"
}
}
}
}
```
请注意,"version"是用户指定的任意字符串当更新现有Lookup时用户需要指定一个字典级别更高的版本。
例如,配置可能看起来像:
```json
{
"__default": {
"country_code": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"77483": "United States"
}
}
},
"site_id": {
"version": "v0",
"lookupExtractorFactory": {
"type": "cachedNamespace",
"extractionNamespace": {
"type": "jdbc",
"connectorConfig": {
"createTables": true,
"connectURI": "jdbc:mysql:\/\/localhost:3306\/druid",
"user": "druid",
"password": "diurd"
},
"table": "lookupTable",
"keyColumn": "country_id",
"valueColumn": "country_name",
"tsColumn": "timeColumn"
},
"firstCacheTimeout": 120000,
"injective": true
}
},
"site_id_customer1": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"847632": "Internal Use Only"
}
}
},
"site_id_customer2": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"AHF77": "Home"
}
}
}
},
"realtime_customer1": {
"country_code": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"77483": "United States"
}
}
},
"site_id_customer1": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"847632": "Internal Use Only"
}
}
}
},
"realtime_customer2": {
"country_code": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"77483": "United States"
}
}
},
"site_id_customer2": {
"version": "v0",
"lookupExtractorFactory": {
"type": "map",
"map": {
"AHF77": "Home"
}
}
}
}
}
```
map中所有的条目都将会更新没有条目被删除。
#### 更新Lookup
通过发送一个 `POST` 请求到 `/druid/coordinator/v1/lookups/config/{tier}/{id}`,可以根据特定的 `lookupExtractorFactory` 来更新Lookup。
例如一个POST `/druid/coordinator/v1/lookups/config/realtime_customer1/site_id_customer1` 可能包含以下信息:
```json
{
"version": "v1",
"lookupExtractorFactory": {
"type": "map",
"map": {
"847632": "Internal Use Only"
}
}
}
```
该操作会使用上边定义的配置来更新 `realtime_customer1``site_id_customer1` Lookup
#### 获取所有Lookups
`/druid/coordinator/v1/lookups/config/all``GET` 请求会返回所有tier的已知Lookups
#### 获取Lookup
`/druid/coordinator/v1/lookups/config/{tier}/{id}``GET` 请求会返回一个特定的Lookup
针对前边的例子,`GET` 请求 `/druid/coordinator/v1/lookups/config/realtime_customer2/site_id_customer2` 会返回:
```json
{
"version": "v1",
"lookupExtractorFactory": {
"type": "map",
"map": {
"AHF77": "Home"
}
}
}
```
#### 删除Lookup
`/druid/coordinator/v1/lookups/config/{tier}/{id}``DELETE` 请求会删除掉集群中的Lookup如果该Lookup是该tier的最有一个则tier也被删除
#### 删除tier
`/druid/coordinator/v1/lookups/config/{tier}``DELETE` 请求会删除掉集群中的指定tier
#### 列出所有tier名称
`/druid/coordinator/v1/lookups/config``GET`请求将返回动态配置中所有已知的tier名称列表 在请求中加上 `discover=true`参数(即 `/druid/coordinator/v1/lookups/config?discover=true`可以查找集群中除动态配置中已知tier之外当前活动的tier列表
#### 列出所有Lookup名称
`/druid/coordinator/v1/lookups/config/{tier}``GET` 请求将返回该tier的所有已知Lookup的名称。
这些接口可用于获取已配置的Lookup的传播状态以使用Historical之类的查找来处理进程。
### Lookup状态的API
#### 列出所有Lookups的加载状态
`GET /druid/coordinator/v1/lookups/status`,参数 `detailed` 是一个可选的查询参数
#### 列出一个tier中的Lookups的加载状态
`GET /druid/coordinator/v1/lookups/status/{tier}`,参数 `detailed` 是一个可选的查询参数
#### 列出单个Lookup的加载状态
`GET /druid/coordinator/v1/lookups/status/{tier}/{lookup}`,参数 `detailed` 是一个可选的查询参数
#### 列出所有进程的Lookup状态
`GET /druid/coordinator/v1/lookups/nodeStatus`, 参数 `discover`为可选的查询参数用来发现tiers或者已列出tier的Lookup
#### 列出某个tier中进程的Lookup状态
`GET /druid/coordinator/v1/lookups/nodeStatus/{tier}`
#### 列出单一进程中Lookup的状态
`GET /druid/coordinator/v1/lookups/nodeStatus/{tier}/{host:port}`
### 内部API
在Peon、Router、Broker和Historical进程中都可以消费到Lookup配置。 `/druid/listen/v1/lookups` 是一个内部API这些进程都使用该API进行 list/load/drop 它们的Lookups。它们遵循与集群范围动态配置相同的返回值约定。以下接口可用于调试目的但不能用于其他目的。
#### 获取Lookups
在一个进程上对 `/druid/listen/v1/lookups``GET` 请求将返回当前进程上活跃的lookup的一个json map。
```json
{
"site_id_customer2": {
"version": "v1",
"lookupExtractorFactory": {
"type": "map",
"map": {
"AHF77": "Home"
}
}
}
}
```
#### 获取Lookup
在一个进程上对 `/druid/listen/v1/lookups/some_lookup_name``GET` 请求将返回由 `some_lookup_name` 标识的LookupExtractorFactory。
```json
{
"version": "v1",
"lookupExtractorFactory": {
"type": "map",
"map": {
"AHF77": "Home"
}
}
}
```
### 配置
可以查看Coordinator配置中的 [Lookups动态配置](../Configuration/configuration.md#coordinator)
使用以下属性来配置Broker/Router/Historical/Peon来宣告它自身作为一个lookup tier的部分。
| 属性 | 描述 | 默认值 |
|-|-|-|
| `druid.lookup.lookupTier` | 该进程上lookups的tier。 独立于其他tier | `__default` |
| `druid.lookup.lookupTierIsDatasource` | 对于索引服务任务之类的某些操作数据源是在任务的运行时属性中传递的。此选项从与任务的数据源相同的值中获取tier名称。建议只将其用作索引服务的Peon可选项如果有的话。如果为true`druid.lookup.lookupTier`必须指定。 | `false`|
在Coordinator上使用以下属性来配置动态配置管理器的行为
| 属性 | 描述 | 默认值 |
|-|-|-|
| `druid.manager.lookups.hostTimeout` | 每台主机处理请求的超时时间,毫秒单位 | `2000`(2s) |
| `druid.manager.lookups.allHostTimeout` | 在所有进程上完成Lookup管理的超时时间毫秒单位 | `900000`(15mins) |
| `druid.manager.lookups.period` | 管理周期中可以暂停多久 | `120000`(2mins) |
| `druid.manager.lookups.threadPoolSize` | 可以并行的管理的服务进程数量 | `10` |
### 重启时保存配置
可以在重新启动时保存配置这样进程就不必等待Coordinator操作来重新填充其Lookup。为此将设置以下属性
| 属性 | 描述 | 默认值 |
|-|-|-|
| `druid.lookup.snapshotWorkingDir` | 用于存储当前Lookup配置的快照的工作路径将此属性留空将禁用快照/引导实用程序 | null |
| `druid.lookup.enableLookupSyncOnStartup` | 启动时使用Coordinator启用Lookup同步进程。可查询进程将从Coordinator获取并加载Lookup而不是等待Coordinator加载Lookup。如果集群中没有配置Lookup用户可以选择禁用此选项。 | true |
| `druid.lookup.numLookupLoadingThreads` | 启动时并行加载Lookup的线程数。启动完成后此线程池将被销毁。它不会在JVM的生命周期内保留 | 可用的处理器/2 |
| `druid.lookup.coordinatorFetchRetries` | 在启动时同步期间重试从Coordinator获取Lookup bean列表的次数。| 3 |
| `druid.lookup.lookupStartRetries` | 在启动时同步期间或运行时重试启动每个Lookup的次数。| 3 |
| `druid.lookup.coordinatorRetryDelay` | 启动时同步期间从Coordinator获取Lookups列表的重试之间延迟的时间毫秒。 | 60000 |
### Lookup反射
如果lookup类型实现了 `LookupIntrospectHandler`接口Broker提供了一个Lookup反射的API。
`/druid/v1/lookups/introspect/{lookupId}` 发送一个 `GET` 请求将返回完整值的map例如`GET /druid/v1/lookups/introspect/nato-phoneti`:
```json
{
"A": "Alfa",
"B": "Bravo",
"C": "Charlie",
...
"Y": "Yankee",
"Z": "Zulu",
"-": "Dash"
}
```
key的列表可以通过 `GET /druid/v1/lookups/introspect/{lookupId}/keys` 来获取到,例如:`GET /druid/v1/lookups/introspect/nato-phonetic/keys`
```json
[
"A",
"B",
"C",
...
"Y",
"Z",
"-"
]
```
values的列表可以通过 `GET /druid/v1/lookups/introspect/{lookupId}/values` 来获取到。例如: `GET /druid/v1/lookups/introspect/nato-phonetic/values`
```json
[
"Alfa",
"Bravo",
"Charlie",
...
"Yankee",
"Zulu",
"Dash"
]
```