Kafka Indexing Service
Kafka索引服务可以在Overlord上配置,通过管理Kafka索引任务的创建和生命周期来促进Kafka的消费。这些索引任务使用Kafka自己的分区和偏移机制读取事件,因此能够提供完全一次摄取的保证。他们还能够从Kafka读取非近期事件,并且不受使用Tranquility对其他摄取机制施加的窗口期限的影响。主管监督索引任务的状态,以协调切换,管理故障并确保维护可伸缩性和复制要求。
Kafka索引服务使用了Kafka 0.10.x中引入的Java consumer。由于此版本中存在协议更改,因此Kafka 0.10.x消费者可能与较旧的brokers不兼容。在使用此功能之前,请确保您的Kafka brokers是0.10.x或更高版本。如果您使用的是旧版Kafka brokers,请参阅Kafka升级指南。
Submitting a Supervisor Spec
Kafka索引服务要求druid-kafka-indexing-service
在Overlord和MiddleManagers上加载扩展。
通过HTTP POST提交Supervisor Specd来启动一个dataSource的规范:
http://<OVERLORD_IP>:<OVERLORD_PORT>/druid/indexer/v1/supervisor
例如:
curl -X POST -H 'Content-Type: application/json' -d @supervisor-spec.json http://localhost:8090/druid/indexer/v1/supervisor
示例Supervisor Spec如下所示:
{
"type": "kafka",
"dataSchema": {
"dataSource": "metrics-kafka",
"parser": {
"type": "string",
"parseSpec": {
"format": "json",
"timestampSpec": {
"column": "timestamp",
"format": "auto"
},
"dimensionsSpec": {
"dimensions": [],
"dimensionExclusions": [
"timestamp",
"value"
]
}
}
},
"metricsSpec": [
{
"name": "count",
"type": "count"
},
{
"name": "value_sum",
"fieldName": "value",
"type": "doubleSum"
},
{
"name": "value_min",
"fieldName": "value",
"type": "doubleMin"
},
{
"name": "value_max",
"fieldName": "value",
"type": "doubleMax"
}
],
"granularitySpec": {
"type": "uniform",
"segmentGranularity": "HOUR",
"queryGranularity": "NONE"
}
},
"tuningConfig": {
"type": "kafka",
"maxRowsPerSegment": 5000000
},
"ioConfig": {
"topic": "metrics",
"consumerProperties": {
"bootstrap.servers": "localhost:9092"
},
"taskCount": 1,
"replicas": 1,
"taskDuration": "PT1H"
}
}
Supervisor Configuration
字段 | 描述 | 是否必须 |
type | Supervisor 类型,这里应该为Kafka。 | 是 |
dataSchema | 摄取过程中Kafka索引任务将使用的Schema,请参阅Ingestion Spec DataSchema。 | 是 |
ioConfig | 用于配置管理程序和索引任务的KafkaSupervisorIOConfig,请参见下文。 | 是 |
tuningConfig | 用于配置管理程序和索引任务的KafkaSupervisorTuningConfig,请参见下文。 | 否 |
KafkaSupervisorTuningConfig
tuningConfig是可选的,如果未指定tuningConfig,则将使用默认参数。
字段 | 类型 | 描述 | 是否必须 |
type | String | 索引任务类型,应该始终是 | 是 |
maxRowsInMemory | Integer | 持久化之前要聚合的行数。此数字是后聚合行,因此它不等于输入事件的数量,而是等于这些事件导致的聚合行数。这用于管理所需的JVM堆大小。索引的最大堆内存使用量为: | 否(默认==000000) |
maxBytesInMemory | Long | 持久化之前在堆内存中聚合的字节数。这是基于对内存使用情况的粗略估计,而不是实际使用情况。通常这是在内部计算的,用户不需要设置它。索引的最大堆内存使用量是: | 否(默认==大JVM内存的六分之一) |
maxRowsPerSegment | Integer | 要聚合成段的行数;这个数字是聚合后的行。切换将在 | 否(默认==000000) |
maxTotalRows | Long | 在所有段中聚合的行数; 这个数字是后聚合行。切换将在 | 否(默认==nlimited) |
intermediatePersistPeriod | ISO8601 Period | 决定中间体持续发生率的时期。 | 否(默认== PT10M) |
maxPendingPersists | Integer | 可挂起但未启动的最大持久性数量。如果一个新的中间持久化会超过这个限制,那么在当前运行的持久化完成之前,摄入将被阻塞。索引规模的最大堆内存使用量 | 否(默认== 0,表示一个persist可以与摄取同时运行,并且没有一个可以排队) |
indexSpec | Object | 调整数据的索引方式,有关详细信息,请参阅下面的“IndexSpec”。 | |
reportParseExceptions | Boolean | 弃用。如果为true,则在抛出过程中遇到的异常将被抛出并将停止摄取; 如果为false,将跳过不可解析的行和字段。设置 | 否(默认== false) |
handoffConditionTimeout | Long | 等待段切换的毫秒数。它必须> = 0,其中0表示永远等待。 | 否(默认== 0) |
resetOffsetAutomatically | Boolean | 是否重置消费者偏移量,如果它尝试获取的下一个偏移量小于该特定分区的最早可用偏移量。根据 | 否(默认== false) |
workerThreads | Integer | Supervisor将用于异步操作的线程数。 | 否(默认== min(10,taskCount)) |
chatThreads | Integer | 将用于与索引任务通信的线程数。 | 否(默认== min(10,taskCount * replicas)) |
chatRetries | Integer | 在考虑任务无响应之前,将重试HTTP请求索引任务的次数。 | 否(默认== 8) |
httpTimeout | ISO8601 Period | 从索引任务等待HTTP响应的时间 | 否(默认== PT10S) |
shutdownTimeout | ISO8601 Period | 在退出之前,等待Supervisor尝试优雅地关闭任务需要多长时间。 | 否(默认== PT80S) |
offsetFetchPeriod | ISO8601 Period | 主管查询Kafka和索引任务以获取当前偏移量和计算延迟的频率。 | 否(默认== PT30S,分钟== PT5S) |
segmentWriteOutMediumFactory | Object | 分段写入介质,用于创建分段。请参阅下面的详细信息。 | 否(默认情况下未指定,使用的值 |
intermediateHandoffPeriod | ISO8601 Period | 任务应该多长时间分配一次。切换将在 | 否(默认== P2147483647D |
logParseExceptions | Boolean | 如果为true,则在发生解析异常时记录错误消息,其中包含有关发生错误的行的信息。 | 否(默认== false) |
maxParseExceptions | Integer | 在任务停止摄取和失败之前可能发生的最大解析异常数。如果 | 否(默认无限制) |
maxSavedParseExceptions | Integer | 当发生解析异常时,Druid可以跟踪最近的解析异常。“maxSavedParseExceptions”限制将保存多少个异常实例。这些保存的异常将在任务完成报告中任务完成后可用。如果 | 否(默认== 0) |
IndexSpec
字段 | 类型 | 描述 | 是否必须 |
bitmap | Object | 位图索引的压缩格式。应该是一个JSON对象; 请参阅下文的“Bitmap types”。 | 否(默认为 Concise) |
dimensionCompression | String | 维列的压缩格式。选择 | 否(默认== |
metricCompression | String | 公制列的压缩格式。选择 | 否(默认== |
longEncoding | String | 类型为long的度量和维度列的编码格式。选择 | 否(默认== |
Bitmap types
Concise bitmaps:
字段 | 类型 | 描述 | 是否必须 |
type | String | 必须为 | 是 |
Roaring bitmaps:
字段 | 类型 | 描述 | 是否必须 |
type | String | 必须为 | 是 |
compressRunOnSerialization | Boolean | 使用行程编码,估计其空间效率更高。 | 否(默认==true) |
SegmentWriteOutMediumFactory
字段 | 类型 | 描述 | 是否必须 |
type | String | 有关说明和可用选项,请参阅其他Peon配置:SegmentWriteOutMediumFactory。 | 是 |
KafkaSupervisorIOConfig
字段 | 类型 | 描述 | 是否必须 |
topic | String | Kafka topic可供阅读。这必须是特定topic,因为不支持topic模式。 | 是 |
consumerProperties | Map | 要传递给Kafka consumer的属性的映射。这必须包含一个属性 | 是 |
pollTimeout | Long | 等待kafka consumer轮询记录的时间长度,以毫秒为单位 | 否(默认== 100) |
replicas | Integer | 副本的数量,其中1表示一组任务(无复制)。副本任务将始终分配给不同的工作人员,以提供针对流程故障的弹性。 | 否(默认== 1) |
taskCount | Integer | 副本集的最大读取任务数。这意味着最大读取任务数为 | 否(默认== 1) |
taskDuration | ISO8601 Period | 任务停止读取并开始发布其段之前的时间长度 | 否(默认== PT1H) |
startDelay | ISO8601 Period | 在Supervisor开始管理任务之前等待的时间。 | 否(默认== PT5S) |
period | ISO8601 Period | Supervisor执行其管理逻辑的频率。请注意,管理程序也将运行以响应某些事件(例如任务成功,失败和达到 | 否(默认== PT30S) |
useEarliestOffset | Boolean | 如果Supervisor第一次管理dataSource,它将从Kafka获得一组起始偏移量。此标志确定它是否检索Kafka中的最早或最新偏移量。在正常情况下,后续任务将从前一个段结束的位置开始,因此该标志仅在首次运行时使用。 | 否(默认== false) |
completionTimeout | ISO8601 Period | 在将发布任务声明为失败并终止之前等待的时间长度。如果设置得太低,您的任务可能永远不会发布。任务的发布时间大致在 | 否(默认== PT30M) |
lateMessageRejectionPeriod | ISO8601 Period | 配置任务以拒绝时间戳早于创建任务之前的时间段的消息;例如,如果将此设置为 | 否(默认==none) |
earlyMessageRejectionPeriod | ISO8601 Period | 配置任务以在任务到达taskDuration后拒绝时间戳晚于此时间段的消息; 例如,如果设置为 | 否(默认==none) |