ConsumeKafka Processor
描述
使用 Apache Kafka Consumer API 消费消息。Lynxus 的配套处理器用于发送消息
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Kafka Connection Service | | 控制器服务 API:KafkaConnectionServicecn.org.acal.lynxus-lynxus-kafka-service-api-nar-2.11.8 | 提供与 Kafka Broker 的连接以发布 Kafka 记录 |
| Group ID | | Kafka group.id 属性对应的 Kafka Consumer Group Identifier | |
| Topic Format | names |
| 指定提供的主题是逗号分隔的名称列表还是单个正则表达式 |
| Topics | | 处理器从中消费 Kafka 记录的 Kafka 主题的名称或模式。 如果以逗号分隔,则可以提供多个。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| 自动偏移重置 | latest |
| 当没有找到与 Kafka auto.offset.reset 属性对应的先前消费者偏移量时,应用自动偏移量配置 |
| Commit Offsets | true |
| 指定此处理器在接收消息后是否应将偏移量提交到 Kafka。通常,此值应设置为 true,以便接收的消息不会被重复。但在某些场景中,我们可能希望避免提交偏移量,以便数据可以被处理并稍后由 PublishKafka 确认,从而提供精确一次语义。 |
| Max Uncommitted Size | | 在将 FlowFile 传输到输出关系之前,从 Kafka 消费记录的总大小上限。 指定时,会在达到 [Max Uncommitted Time] 之前,根据每条 Kafka 记录 序列化后的键和值的大小进行评估。 | |
| Max Uncommitted Time | 100 millis | 在将 FlowFile 传输到输出关系之前,从 Kafka 消费记录所花费的最长时间。 更长的时间可能产生更大的 FlowFile,并增加单条记录的处理延迟。 | |
| Header Name Pattern | | 应用于 Kafka 记录标头名称的正则表达式模式,用于选择要写入 FlowFile 属性的标头值 | |
| Header Format | string |
| 指定当写入 FlowFile 属性或记录字段时 Kafka 记录标头值如何表示 |
| Header Encoding | UTF-8 | 读取 Kafka Record Header 值和写入 FlowFile 属性时应用的字符编码 | |
| Processing Strategy | FLOW_FILE |
| 处理 Kafka 记录并将序列化输出写入 FlowFiles 的策略 |
| Header Name Prefix | | 写入 Kafka 记录标头值时应用于 FlowFile 属性名称的前缀。这有助于避免与保留的 FlowFile 属性名称(如 'uuid')冲突。例如,如果设置为 'kafka.header.',名为 'uuid' 的 Kafka 标头将被写为 'kafka.header.uuid'。 | |
| Record Reader | | 控制器服务 API:RecordReaderFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 用于传入 Kafka 消息的Record Reader |
| Record Writer | | 控制器服务 API:RecordSetWriterFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 用于序列化传出FlowFile的Record Writer |
| Output Strategy | USE_VALUE |
| 用于将 Kafka 记录输出到 FlowFile 记录中的格式。 |
| Key Attribute Encoding | utf-8 |
| 包含 Kafka 记录密钥的已配置 FlowFile 属性值的编码。 |
| Key Format | byte-array |
| 指定如何在输出 FlowFile 中表示 Kafka Record Key |
| Key Record Reader | | 控制器服务 API:RecordReaderFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 用于将 Kafka 记录键解析为记录的Record Reader |
| Message Demarcator | | 由于 KafkaConsumer 以批处理方式接收消息,此处理器可以选择输出包含给定主题和分区的所有 Kafka 消息的单个批次的 FlowFile,此属性允许您提供一个字符串(解释为 UTF-8)用于分隔多个 Kafka 消息。这是一个可选属性,如果未提供,则收到的每条 Kafka 消息将产生一个单独的 FlowFile。要输入特殊字符(如'换行'),请使用 CTRL+Enter 或 Shift+Enter,具体取决于操作系统。 | |
| Separate By Key | false |
| 启用此属性后,如果两个 Kafka 消息具有相同的键,则仅将两个消息添加到同一个 FlowFile 中。 |
关系 (Relationships)
| 名称 | 描述 | 自动终止 |
|---|---|---|
success | 包含一个或多个序列化 Kafka 记录的 FlowFiles | 否 |
写入的 FlowFile 属性
| 名称 | 描述 |
|---|---|
record.count | 收到的记录数 |
mime.type | 由配置的Record Writer提供的 MIME 类型 |
kafka.count | 一批记录的FlowFile中的记录数 |
kafka.key | 如果存在且为单条消息时的消息键。键的编码方式取决于'键属性编码'属性的值 |
kafka.offset | 记录在分区中的偏移量或一批记录中偏移量的最小值 |
kafka.timestamp | 从主题消费的消息的时间戳或一批消息中时间戳的最小值。此时间戳的值取决于 'log.message.timestamp.type' kafka 代理配置(LOG_APPEND_TIME、CREATE_TIME、NO_TIMESTAMP_TYPE) |
kafka.partition | 一条记录或一批记录的主题分区 |
kafka.topic | 一条记录或一批记录的主题 |
kafka.tombstone | 如果消费的消息是逻辑删除消息,则设置为 true |
kafka.max.offset | 批量记录中Kafka偏移量的最大值 |
状态管理
该组件不存储状态。
受限 (Restricted)
该组件不受限。
输入要求
该组件不允许有传入连接。
另请参阅
详细说明
ConsumeKafka
输出策略
该 Processor 提供多种输出策略(通过 Processor 属性 'Output Strategy' 配置),用于把 Kafka 记录转换为 FlowFile。
- 'Use Content as Value'(默认)输出的 FlowFile 记录只包含 Kafka 记录的值。
- 'Use Wrapper' 输出的 FlowFile 记录包含 Kafka 记录的键、值和 header,以及 Kafka 记录中的额外元数据。
- 'Inject Metadata' 输出的 FlowFile 记录包含 Kafka 记录的值,其中添加了一个子记录字段,用于保存元数据、 header 和键信息。
选择 "Use Wrapper" 时使用的记录 schema 如下(Avro 格式):
{
"type": "record",
"name": "lynxusRecord",
"namespace": "cn.org.acal.lynxus",
"fields": [{
"name": "key",
"type": [{
< Schema 由 Key Record Reader 决定,或根据 "Key Format" 属性为 "string" 或 "bytes"(详见下文) >
}, "null"]
},
{
"name": "value",
"type": [
{
< Schema 由 Record Reader 决定 >
},
"null"
]
},
{
"name": "headers",
"type": [
{ "type": "map", "values": "string", "default": {}},
"null"]
},
{
"name": "metadata",
"type": [
{
"type": "record",
"name": "metadataType",
"fields": [
{ "name": "topic", "type": ["string", "null"] },
{ "name": "partition", "type": ["int", "null"] },
{ "name": "offset", "type": ["int", "null"] },
{ "name": "timestamp", "type": ["long", "null"] }
]
},
"null"
]
}
]
}
选择 "Inject Metadata" 时使用的记录 schema 如下(Avro 格式):
{
"type": "record",
"name": "lynxusRecord",
"namespace": "cn.org.acal.lynxus",
"fields": [
< 由 Record Reader 为 Kafka 消息确定的字段 >,
{
"name": "kafkaMetadata",
"type": [
{
"type": "record",
"name": "metadataType",
"fields": [
{ "name": "topic", "type": ["string", "null"] },
{ "name": "partition", "type": ["int", "null"] },
{ "name": "offset", "type": ["int", "null"] },
{ "name": "timestamp", "type": ["long", "null"] },
{
"name": "headers",
"type": [ { "type": "map", "values": "string", "default": {}}, "null"]
},
{
"name": "key",
"type": [{
< Schema 由 Key Record Reader 决定,或根据 "Key Format" 属性为 "string" 或 "bytes"(详见下文) >
}, "null"]
}
]
},
"null"
]
}
]
}
如果 Output Strategy 属性设为 'Use Wrapper' 或 'Inject Metadata',会激活一个额外的 Processor 配置属性('Key Format')。该属性用于指定 Kafka 记录的键应如何写入 FlowFile。'Key Format' 的可选值如下:
- 'Byte Array' 以字节数组形式提供 Kafka 记录的键,与 Kafka 记录中接收到的完全一致。
- 'String' 使用 UTF-8 字符编码把 Kafka 记录键的字节转换为字符串。(无法把键字节解析为 UTF-8 时,记录会被路由到 'parse.failure' Relationship。)
- 'Record' 使用关联的 'Key Record Reader' Controller Service,把 Kafka 记录键的字节转换为反序列化的 Lynxus 记录。如果 Key Format 属性设为 'Record',会出现名为 'Key Record Reader' 的额外 Processor 配置属性。该属性用于指定把 Kafka 记录的键解析为 Record 时使用的 Record Reader。
选择 "Use Wrapper" 策略时,JsonRecordSetWriter 输出的 FlowFile 内容示例:
[
{
"key": {
"name": "Acme",
"number": "AC1234"
},
"value": {
"address": "1234 First Street",
"zip": "12345",
"account": {
"name": "Acme",
"number": "AC1234"
}
},
"headers": {
"attributeA": "valueA",
"attributeB": "valueB"
},
"metadata": {
"topic": "accounts",
"partition": 0,
"offset": 0,
"timestamp": 0
}
}
]
选择 "Inject Metadata" 策略时,JsonRecordSetWriter 输出的 FlowFile 内容示例:
[
{
"address": "1234 First Street",
"zip": "12345",
"account": {
"name": "Acme",
"number": "AC1234"
},
"kafkaMetadata": {
"topic": "accounts",
"partition": 0,
"offset": 0,
"timestamp": 0,
"headers": {
"attributeA": "valueA",
"attributeB": "valueB"
},
"key": {
"name": "Acme",
"number": "AC1234"
}
}
}
]