apache-nifi - 在 Apache NiFi 中使用 AvroSchemaRegistry
问题描述
我有 5 种不同的CSVReader
控制器服务。它们的配置是相同的,除了schema text
(因为不同的标题)和 1 CSVRecordSetWriter
。
我想只留下一个CSVReader
并schema text
动态设置。我读过AvroSchemaRegistry
但我不清楚如何使用它。
我应该创建 5 个AvroSchemaRegistry
具有 2 个属性的不同控制器:name
和value
?Fe 我想提出以下架构:
{
"type": "record",
"name": "campaigns",
"namespace": "common",
"fields": [
{"name": "campaign_name", "type": "string"},
{"name": "campaign_id", "type": "long"},
{"name": "date", "type" : {"type": "int", "logicalType" : "date"}}
]
}
我应该创建AvroSchemaRegistry
:
name
= 广告系列;value
=上面的完整代码。
对于另一个模式,我应该创建另一个AvroSchemaResgitry
具有另一个属性的控制器name
并且value
?
之后,如何配置CSVReader
和CSVRecordSetWriter
使用这些模式?最后,我应该如何处理流文件?添加其他属性?什么样的?
解决方案
像这样配置您的流程(根据您的要求进行更改),
UpdateAttribute
配置以派生/硬编码流文件特定模式-
ValidateRecord
配置以使用通用 csv 阅读器并动态传递模式 -
CSVReader
控制器服务使用动态传递的模式并设置模式访问策略 -
如果您希望使用 NiFi 支持的模式注册表,则将所有模式放在注册表中,schema.name
并access strategy
为记录读取器/写入器设置属性以从注册表访问模式,但首先您需要在控制器服务中添加/配置模式注册表提供程序。
更新:
示例 SchemaRegistry 控制器服务配置HortonworksSchemaRegistry
(ConfluentSchemaRegistry 和 AvroSchemaRegistry 具有或多或少相同的属性)。重要的是执行查找操作时注册表 API 期望的参数,因此我们只需要从 Reader/Writer 控制器服务Schema Name
属性传递相同的值,请参考this了解一下。
架构注册表 URL:http ://example.com:7788/api/v1
推荐阅读
- python-3.x - “数据框到谷歌电子表格”类型错误:“数据框”对象是可变的,因此它们不能被散列
- java - JDBC 模板更新方法内部行为
- javascript - 在角度项目中编辑单个表单数据字段
- python - Tkinter 类函数在尝试使用入口小部件时导致错误
- javascript - 路由端点未路由,出现引用错误
- node.js - 在 EJS 中渲染多个项目
- xml - 使用 xpath wso2 删除外部标签
- python - 在 on_ready() 中查找公会 ID - Discord.py
- mysql - 如何使用 Ruby mysql2 插入 NULL?
- linux - rm: 无法删除 'test/deployment/sandbox-v2/tmp/dns': 权限被拒绝