编辑: 枪械砖家 2018-10-23

2 /

5 对于一个实时游戏,我们必须要做到对存储在服务器内存中的数据进行快速处理,这样可以 帮助实时地发出预警等各类动作.我们的系统架设拥有多台服务器,内存中的数据包括了每一个 在线玩家近

30 次访问的各类记录,包括道具、交易信息等等,并且这些数据跨服务器存储. 我们的服务器拥有两个角色:首先是接受用户发起的动作,例如交易请求,其次是实时地处 理用户发起的交易并根据交易信息发起必要的预警动作.为了保证快速、实时地处理数据,我们 需要在每一台机器的内存中保留历史交易信息,这意味着我们必须在服务器之间传递数据,即使 接收用户请求的这台机器没有该用户的交易信息.为了保证角色的松耦合,我们使用 Kafka 在服务器之间传递信息 (数据). Kafka 特性 Kafka 的几个特性非常满足我们的需求:可扩展性、数据分区、低延迟、处理大量不同消费 者的能力.这个案例我们可以配置在 Kafka 中为登陆和交易配置同一个主题.由于 Kafka 支持在单一主题内的排序,而不是跨主题的排序,所以我们为了保证用户在交易前使用实际的 IP 地址登陆系统,我们采用了同一个主题来存储登陆信息和交易信息. 当用户登陆或者发起交易动作后,负责接收的服务器立即发事件给 Kafka.这里我们采用用户 id 作为消息的主键,具体事件作为值.这保证了同一个用户的所有的交易信息和登陆信息被发送到 Kafka 分区.每一个事件处理服务被当作一个 Kafka 消费者来运行,所有的消费者被配置到了同一个消费者群组,这样每一台服务器从一些 Kafka 分区读取数据,一个分区的所有数据被送到同一个事件处理服务器 (可以与接收服务器不同).当事件处理服务器从 Kafka 读取了用户交易信息,它可以把该信息加 入到保存在本地内存中的历史信息列表里面,这样可以保证事件处理服务器在本地内存中调用用 户的历史信息并做出预警,而不需要额外的网络或磁盘开销.

3 /

5 如果想及时了 解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop 为了多线程处理,我们为每一个事件处理服务器或者每一个核创建了一个分区.Kafka 已经在拥有

1 万个分区的集群里测试过. 切换回 Kafka 上面的例子听起来有点绕口:首先从游戏服务器发送信息到 Kafka,然后另一台游戏服务器 的消费者从主题中读取该信息并处理它.然而,这样的设计解耦了两个角色并且允许我们管理每 一个角色的各种功能.此外,这种方式不会增加负载到 Kafka.测试结果显示,即使

3 个结点组成的集群也可以处理每秒接近百万级的任务,平均每个任务从注册到消费耗时

3 毫秒. 上面例子当发现一个事件可疑后,发送一个预警标志到一个新的 Kafka 主题,同样的有一个消费者服务会读取它,并将数据存入 Hadoop 集群用于进一步的数据分析. 因为 Kafka 不会追踪消息的处理过程及消费者队列,所以它在消耗极小的前提下可以同时处 理数千个消费者.Kafka 甚至可以处理批量级别的消费者,例如每小时唤醒一次一批睡眠的消费者来处理所有的信息. Kafka 让数据存入 Hadoop 集群变得非常简单.当拥有多个数据来源和多个数据目的地时,

4 /

5 为每一个来源和目的地配对地编写一个单独的数据通道会导致混乱发生.K........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题