更新Kafka事件日志

时间:2015-03-09 19:27:40

标签: pipeline apache-kafka amazon-redshift data-partitioning

我使用Kafka作为管道来存储分析数据,然后将其刷新到S3并最终到达Redshift。我正在考虑在Kafka中存储数据的最佳架构,以便可以轻松刷新到数据仓库。

问题是我从三个单独的页面事件中获取数据:

  1. 请求页面时。
  2. 加载页面时
  3. 卸载页面时
  4. 这些事件在不同的时间点火(通常都在几秒钟内相互发射,但相隔几分钟/小时)。

    我想最终在我的数据仓库中存储关于网页视图的单个事件。例如,单个日志条目如下:

    pageid=abcd-123456-abcde, site='yahoo.com' created='2015-03-09 15:15:15' loaded='2015-03-09 15:15:17' unloaded='2015-03-09 15:23:09'
    

    我应该如何对Kafka进行分区以便这种情况发生?我正在努力在Kafka中找到一个分区方案,它不需要像Redis这样的数据存储来合并CREATE(初始页面视图)和UPDATE(后续加载/卸载事件)时临时存储数据。

1 个答案:

答案 0 :(得分:1)

假设:

  • 您有多个交错会话
  • 您有某种会话ID来识别和关联单独的事件
  • 您可以自由实施消费者逻辑
  • 合并事件的绝对排序并不重要

然后是否可以使用具有相同数量的分区的单独主题来处理这三种事件并让消费者在刷新到S3期间将它们合并为单个事件?

只要你有多个总分区,就必须确保为不同的事件类型使用相同的分区键(例如modhash sessionid),它们最终会在同一个(每个主题对应的)分区中。然后可以使用简单的使用者合并它们,该消费者可以一次从一个分区读取三个主题。 Kafka保证在分区内订购,但不在分区之间订购。

虽然代理在页面请求和页面重新加载之间发生故障的边缘情况发出了大警告。