apache-nifi - 到 Kafka 的 Syslog:NIFI 中最高效的工作流程?
问题描述
我实际上在法国的一家大公司工作,我们的目标是通过 NIFI 在 kafka 中摄取我们所有服务器(近 1400 台服务器)的 syslog 日志(格式 rfc5424)。我们选择 NIFI 是因为我们希望根据找到的应用名称将日志路由到它们的相关主题。
所以我们会有很多小流文件。
实际上,我们遇到了性能限制:我们不能摄取超过 5k msg/s 并且我们希望摄取超过 50k msg/s。当然,如果可能的话,我们希望尽可能地处理。
我们有:listenSyslog(批量大小 1 + 启用解析)=> RouteOnAttribute(查找从 appname 获取目标主题)=> PublishKafka。
你能给我一些建议吗?
我正在考虑这个工作流程:ListenSyslog (batchsize 1000 + parsing disabled) => PartitionRecord (grokreader to get appname and convert to avro, grouping on appname) => RouteRecord (with lookup Embedded, for routing empty appname or topic not found) => PublishKafkaRecord(我知道它将具有多个记录的流文件拆分为每条记录 1 条消息)。
谢谢您的帮助。
祝大家新年快乐!
解决方案
您在问题末尾建议的流程是正确的,基本上您希望将许多消息批处理到一个流程文件中。
根据您使用的 NiFi 版本,较新的版本具有 Syslog5424Reader:
这可能比 GrokReader 更容易使用,单击附加详细信息链接以查看它生成的架构。
此外,您可以尝试使用 ListenTCPRecord 和 ListenUDPRecord 来代替 ListenSyslog。因此,您可以使用带有 Syslog5424Reader 和 AvroWriter 的 ListenTCPRecord/ListenUDPRecord,然后继续执行您建议的流程。您将不得不做一些测试,看看是只使用 ListenSyslog 还是使用记录变体更好。
调整 ListenSyslog/ListenTCP/ListenUDP 时要考虑的其他事项:
推荐阅读
- java - 应用程序在发布后无法运行“此应用程序未针对此设备进行优化”但在模拟器中运行良好
- r - 有什么方法可以将两个不同的函数组合成 R 中的一个函数?
- ios - 如何在 Alamofire 中上传文件并在参数中传递数据 - swift 5
- javascript - 将 Sails JS 响应声明为类
- python - 折叠 spyder 中的代码块 - 有时有效,但有时无效
- python - python更新中的SQLite3,其中有多个可能的匹配项
- c# - WindowsForms 应用程序 - keyEvent 不起作用,问题出在哪里?
- postscript - index 方法在 postscript 中的作用是什么?
- angular - GET查询中的角度发送对象数组(多维数组)
- appkit - 如何以编程方式使用`NSControl.ControlSize.mini`制作`NSPopUpButton`?