每小时或每天有一个 kafka 主题是典型的吗?

Is it typical to have a kafka topic per hour or per day?

我正在将页面访问和搜索查询(某种点击流分析)记录到 kafka。我打算定期对它们进行批处理,比如每小时或每天,然后将聚合结果写入 elasticsearch。

如果不写到kafka,而是写到文件系统,很容易配置logger写到文件名中带时间戳的文件,自动按照hour/day分隔日志间隔。

但是对于 kafka,我在 google 上搜索了足够多的时间,但还没有找到任何根据 hour/day 创建新主题的示例。如果不为每个 hour/day 创建一个新主题,我只能想象通过 logstash/flume.

将日志从 kafka 移动到文件系统或 hdfs

直接在kafka上做批处理(per hour/day)很少见吗?

Kafka由LinkedIn开发,在LinkedIn中的作用是日志聚合中心。所以Kafka非常适合处理这类问题。

我认为每个事件(事件就像页面访问或查询)都应该在您的网络服务器中标记时间戳,而不是在日志发送到 Kafka 时标记。更具体地说,当页面访问事件发生时,它实际上向您的网络服务器发出请求,然后您的网络服务器处理该请求并return响应。同时,你的网络服务器应该记录这个带有时间戳的事件,这个时间戳是事件唯一正确的时间点。关于如何记录事件?您可以创建一个 log_producer 将日志消息发送到特定主题到您的 Kafka,而不仅仅是将其记录在本地文件中。

关于每小时批量处理日志,可以创建24个分区,将日志"HOUR"作为分区键,那么如果是批量处理,只需要拉取分区H的日志就可以了您要处理的时间是 H 。因为你只需要处理最新的H小时的log,旧的H'log已经被older process work处理保存了。