【发布时间】:2017-07-20 04:09:08
【问题描述】:
我正在将页面访问和搜索查询(某种点击流分析)记录到 kafka。我打算定期对它们进行批处理,比如每小时或每天,然后将汇总结果写入 elasticsearch。
如果不是写入kafka,而是写入文件系统,很容易配置logger写入文件名中带有时间戳的文件,自动按照小时/天间隔分隔日志。
但是使用 kafka,我在 Google 上搜索了足够多的时间,但还没有找到任何每小时/每天创建一个新主题的示例。如果不每小时/每天创建一个新主题,我只能想象通过 logstash/flume 将日志从 kafka 移动到文件系统或 hdfs。
直接在kafka上做批处理(每小时/天)很少见吗?
【问题讨论】:
-
我不确定我是否理解您为什么需要每小时/每天一个新主题。为什么不将所有日志发送到单个主题并进行批处理?每次处理后,主题分区上的已提交偏移量会向前移动,因此您不会重新处理相同的日志。
-
如果所有数据都写入同一个主题,因为它们可能以不同的顺序到达,这意味着数据中的
CreatedTime可能没有排序。很难确定每天的界限(尽管在我的情况下可能会有轻微的不准确)。如果有写入不同的主题,我可以轻松检查特定主题的最后修改时间是否明显早于当前时间(假设我的批处理在每天上午 00:10 运行)。 -
您可以通过键对主题进行逻辑分区(在这种情况下,键可以是一天中的小时)。 Kafka 将确保具有相同 key 的所有消息都进入同一个分区,因此被单个消费者线程消费。
-
@Rahul 这真是个好主意。我可以有任意数量的分区,只要它大于一,然后以分区数取模。谢谢
标签: apache-kafka batch-processing