我正在研究在我们的设置中做一些“实时”日志处理的能力,我有一个关于如何继续的问题。
因此,当前的设置(或我们打算这样做)如下所示:
服务器a通过rsyslog将日志文件生成到每个客户的一个文件夹中。
服务器b通过rsyslog将日志文件生成到每个客户的一个文件夹中。
服务器a和b在每个客户的文件夹中最多生成15个日志文件(每个客户1个),结构如下所示:
/var/log/CUSTOMER/logfile.log
在服务器c上,我们有一个正在运行的flume接收器,它侦听来自服务器a和服务器b的rsyslog tcp消息。目前对于测试,我们只有一个FlumeFlume为一个客户,但我认为我们将需要一个FlumeFlume每个客户。
然后,这个FlumeFlume将这些日志线转发给spark应用程序,该应用程序应按客户聚合结果。
现在我的问题是:如何确保spark(流媒体)将按客户聚合结果?假设每个客户都有自己的FlumeFlume,那么如何确保spark分别聚合每个Flume水流,而不是将2个或更多Flume水流混合在一起?
还是Kafka更适合这种情况?
任何见解都将不胜感激。
1条答案
按热度按时间z8dt9xmd1#
您可以使用带有客户id的kafka作为分区密钥。所以Kafka的基本思想是,一条信息可以同时具有关键性和价值性。现在kafka保证同一个密钥的所有消息都到同一个分区(spark streaming理解kafka中分区的概念,让您有单独的节点来处理每个分区),如果需要,可以使用flume的kafka sink将消息写入kafka。