由于历史原因,我们采购的神策所用的 Kafka 是老版本 0.8.2, 其所有的项目均在同一 topic 中,所以在构建我们的实时数据管道的过程中,我们需要对原有神策 Kafka 做如下两点改造:

  1. 将属于我们的项目的数据单独过滤出来,通过原始的 kafka-mirror-maker 只能做到 topic 级别的复制
  2. 镜像到我们自建的 Kafka 数据管道时,尽可能保证事件有序,尤其是对同一用户的行为事件

第一个问题,在新版 Kafka, 如 1.0 之后的版本中,我们可以实现 kafka-mirror-maker 的接口进行加载定制,无需对原有 Kafka 源码进行变动。但是在 0.8.2 这个老版本还是做不到,故需要对源码中有关 kafka-mirror-maker 进行改造。第二个问题,Kafka 只能保证分区内有序,无法做到全局有序的,但是我们如果能将神策行为事件中的用户 ID 提取作为 key, 属于同一用户的行为事件自然就在同一 partition 中了。

改动过的源码见 MirrorMaker, 相关的 Makefile 及 Dockerfile 也一并提供了。