首页 > 解决方案 > 到 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 条消息)。

谢谢您的帮助。

祝大家新年快乐!

标签: apache-nifi

解决方案


您在问题末尾建议的流程是正确的,基本上您希望将许多消息批处理到一个流程文件中。

根据您使用的 NiFi 版本,较新的版本具有 Syslog5424Reader:

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-record-serialization-services-nar/1.8.0/org.apache.nifi.syslog.Syslog5424Reader/index。 html

这可能比 GrokReader 更容易使用,单击附加详细信息链接以查看它生成的架构。

此外,您可以尝试使用 ListenTCPRecord 和 ListenUDPRecord 来代替 ListenSyslog。因此,您可以使用带有 Syslog5424Reader 和 AvroWriter 的 ListenTCPRecord/ListenUDPRecord,然后继续执行您建议的流程。您将不得不做一些测试,看看是只使用 ListenSyslog 还是使用记录变体更好。

调整 ListenSyslog/ListenTCP/ListenUDP 时要考虑的其他事项:

https://bryanbende.com/development/2016/05/09/optimizing-performance-of-apache-nifis-network-listening-processors


推荐阅读