Kafka案例
假设我们正在开发一个多人在线网络游戏。游戏中,玩家需要在虚拟世界中进行合作或者展开竞争。玩家之间也常常存在各种交易,包括钱、道具等。因此游戏开发人员必须保证玩家没有作弊,规则如下:如果玩家交易额显著高于正常水平或者玩家登录的IP地址与之前20次登录的不一样,那么交易将被标记可疑。除了实时标记交易以外,我们还希望可以将这些数据导入到Apache Hadoop以方便数据科学家训练、测试他们的算法与模型。 为了提高实时的事件标记的效率,我们尽可能利用游戏服务器的内存。游戏系统包含了多台游戏服务器,因此在设计中,我们会在内存中保存每一个用户最近的20次登录记录以及最新的20次交易明细(数据是分布式存储的)。 游戏服务器主要扮演两个不同的角色:接收并传播用户行为,实时处理交易信息并对可疑事件进行标记。为了高效的扮演第二个角色,我们需要将任何一个用户的交易历史保存在一台服务器的内存中。这就意味着我们不得不在服务器之间传输消息,毕竟接收用户行为数据的服务器未必包含了该用户的交易历史。为了保持角色之间的松偶和,我们利用Kafka在不同服务器之间传输消息。 Kafka的特性使得它可以很好的满足我们的需求:可扩展、数据分区、低延迟以及处理大量异构消费者的能力。在该案例中,我们为登录与交易处理定义了一个主题。之所以使用同一个主题主要是因为我们希望在处理交易事件前已经获得用户登录信息了