我正在记录Kafka的页面访问和搜索查询(某种点击流分析)。我打算定期对它们进行批处理,比如说每小时或每天,然后将聚合结果写入elasticsearch。
如果它不是写入kafka,而是写入文件系统,那么很容易将记录器配置为写入文件名中带有时间戳的文件,该文件会根据小时/天的间隔自动分隔日志。
但对于Kafka,我在谷歌上搜索了足够多的时间,还没有找到任何每小时/天创建一个新主题的例子。如果不每天每小时创建一个新主题,我只能想象通过logstash/flume将日志从kafka移动到文件系统或hdfs。
很少直接在Kafka上进行批处理(每小时/天)?
1条答案
按热度按时间qmb5sa221#
kafka是由linkedin开发的,它在linkedin中的角色是日志聚合中心。因此Kafka非常适合处理这类问题。
我认为每个事件(事件就像页面访问或查询)都应该在web服务器上标记时间戳,而不是日志发送到kafka时的时间戳。更具体地说,当页面访问事件发生时,它实际上向web服务器发出请求,然后web服务器处理该请求并返回响应。同时,您的web服务器应该使用时间戳记录此事件,并且此时间戳是事件的唯一正确时间点。关于如何记录事件?您可以创建一个日志生成器,将特定主题的日志消息发送到您的kafka,而不只是将其记录在本地文件中。
关于每小时批处理一次日志,可以创建24个分区,并将日志“hour”作为分区键,如果进行批处理,只要拉取分区h的日志就可以了。因为您只需要处理最新的h小时日志,所以旧的h小时日志已经被旧的流程工作处理并保存。