我实际上是在法国的一家大公司工作,我们的目标是通过NIFI摄取kafka中所有服务器(近1400台服务器)的syslog日志(格式为rfc5424)。之所以选择NIFI,是因为我们希望根据找到的应用程序名称将日志路由到其关联的主题。
因此,我们将有很多小的流文件。
实际上,我们遇到了性能限制:我们不能摄取超过5k msg / s,而我们想要摄取超过50k msg / s。当然,如果可能的话,我们要尽可能地处理。
我们有:listenSyslog(批处理大小1 +启用解析)=> RouteOnAttribute(进行查找以从应用程序名称中获取目标主题)=> PublishKafka。
能给我一些建议吗?
我正在考虑此工作流程:ListenSyslog(批处理大小1000 +禁用解析)=> PartitionRecord(用于读取appname并将其转换为avro的grokreader,按appname分组)=> RouteRecord(嵌入查找,用于路由空的appname或主题找不到)=> PublishKafkaRecord(我知道它会将具有多个记录的流文件拆分为每条记录1条消息)。
感谢您的帮助。
祝大家新年快乐!
答案 0 :(得分:2)
您在问题末尾建议的流程是正确的,基本上,您希望将许多消息一起打包到一个流程文件中。
根据您使用的NiFi版本,较新的版本具有Syslog5424Reader:
这可能比GrokReader易于使用,单击其他详细信息链接以查看其生成的模式。
此外,还有ListenTCPRecord和ListenUDPRecord可以用来代替ListenSyslog进行试验。因此,您可以使用Syslog5424Reader和AvroWriter进行ListenTCPRecord / ListenUDPRecord,然后按照建议的流程进行操作。您将必须进行一些测试,以查看仅使用ListenSyslog还是使用记录变体会更好。
调整ListenSyslog / ListenTCP / ListenUDP时要考虑的其他事项:
答案 1 :(得分:1)
要快速参考,请将您的规格与此吞吐量参考进行比较:
如果以此为基础,您的能力似乎足够,我建议按以下方式分析问题,并一一消除可能的可疑对象: