时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Babatunde Fashola网络
小提示:您能找到这篇{Twitter把Kafka当作存储系统使用}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的Twitter把Kafka当作存储系统使用内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
< ">当开发者通过API消费Twitter的公共数据时,他们需要获得可靠性、速度和稳定性方面的保证。因此,在不久前,我们推出了Account Activity Replay API帮助开发者们提升他们系统的稳定性。这个API是一个数据恢复工具,开发者可以用它来检索最早发生在5天前的事件,恢复由于各种原因(包括在实时传递时突然发生的服务器中断)没有被传递的事件。 < ">除了构建API来提升开发者体验,我们还做了一些优化: < ">提高Twitter内部工程师的生产力。 < ">保持系统的可维护性。具体来说,就是尽量减少开发人员、站点可靠性工程师和其他与系统交互的人员的上下文切换。 < ">基于这些原因,在构建这个API所依赖的回放系统时,我们利用了Account Activity API现有的实时系统设计。这有助于我们重用现有的工作,并最小化上下文切换负担和培训工作。 < ">实时系统采用了发布和订阅架构。为了保持架构的一致性,构建一个可以读取数据的存储层,我们想到了传统的流式技术——Kafka。 1 背景 < ">两个数据中心产生实时事件,事件被写入到跨数据中心的主题上,建设好的网站实现数据冗余。 < ">但并不是所有的事件都需要被传递,所以会有一个内部应用程序负责对事件进行筛选。这个应用程序消费来自这些主题的事件,根据保存在键值存储中的一组规则来检查每一个事件,并决定是否应该通过我们的公共API将消息传递给特定的开发者。事件是通过Webhook传递的,每个Webhook URL都有一个开发人员负责维护,并有唯一的ID标识。 图1:数据生成管道 2 存储和分区 < ">通常,在构建一个需要存储层的回放系统时,人们可能会使用基于Hadoop和HDFS的架构。但我们选择了Kafka,主要基于以下两个原因: < ">已有的实时系统采用了发布和订阅架构; < ">回放系统存储的事件量不是PB级的,我们存储的数据不会超过几天。此外,执行Hadoop的MapReduce作业比在Kafka上消费数据成本更高、速度更慢,达不到开发者的期望。 < ">要利用实时管道来构建回放管道,首先要确保事件被存储在Kafka中。我们把Kafka主题叫作delivery_log,每个数据中心都有一个这样的主题。然后,这些主题被交叉复制,实现数据冗余,以便支持来自数据中心之外的重放请求。老人鞋品牌央视广告的事件在被传递之前经过去重操作。 < ">在这个Kafka主题上,我们使用默认的分区机制创建了多个分区,分区与WebhookId的散列值(事件记录的键)一一对应。我们考虑过使用静态分区,但最终决定不使用它,因为如果其中一个开发人员生成的事件多于其他开发人员,那么这个分区包含的数据将多于其他分区,造成了分区的不均衡。相反,我们选择固定数量的分区,然后使用默认分区策略来分布数据,这样就降低了分区不均衡的风险,并且不需要读取Kafka主题的所有分区。重放服务基于请求的WebhookId来确定要读取哪个分区,并为该分区启动一个新的Kafka消费者。主题的分区数量不会发生变化,因为这会影响键的散列和事件的分布。 < ">我们使用了固态磁盘,根据每个时间段读取的事件数量来分配空间。我们选择这种磁盘而不是传统的硬盘驱动器,以此来获得更快的处理速度,并减少与查找和访问操作相关的开销。因为我们需要访问低频数据,无法获得页面缓存优化的好处,所以最好是使用固态磁盘。 < ">为了最小化存储空间,我们使用了snappy压缩算法。我们知道大部分处理工作都在消费端,之所以选择snappy,是因为它在解压时比其他Kafka所支持的压缩算法(如gzip和lz4)更快。 < ">< color: rgb(75, 172, 198);">3 < ">< color: rgb(75, 172, 198);">请求和处理 < ">在我们设计的这个系统中,通过API调用来发送重放请求。我们从请求消息体中获取WebhookId和要重放的事件的日期范围。这些请求被持久化到MySQL中,相当于进入了队列,直到它们被重放服务读取。请求中的日期范围用于确定要读取的分区的偏移量。消费者对象的offsetForTimes函数用于获取偏移量。 图2:重放系统接收请求,并将请求发送给配置服务(数据访问层),然后被持久化到数据库中。 < ">重放如何修补 公关危机服务处理每个重放请求,它们通过MySQL相互协调,处理数据库中的下一个需要重放的记录。重放进程定期轮询MySQL,获取需要被处理的挂起作业。一个请求会在各种状态之间转换。等待被处理的请求处于开放状态(OPEN STATE),刚退出队列的请求处于启动状态(STARTED STATE),正在被处理的请求处于进行中状态(ONGOING STATE),已处理完成的请求将转换到已完成状态(COMPLETED STATE)。一个重放进程只会选择一个尚未启动的请求(即处于打开状态的请求)。 < ">每隔一段时间,当一个工作进程将一个请求退出队列后,它会在MySQL表中写入时间戳,表示正在处理当前的重放作业。如果重放进程在处理请求时死掉了,相应的作业将被重新启动。因此,除了将处于打开状态的请求退出队列之外,重放操作还将读取处于已开始或正在进行中的、在预定义的分钟数内没有心跳的作业。 图3:数据传递层:重放服务通过轮询MySQL来读取作业,消费来自Kafka的消息,并通过Webhook服务传递事件。 < ">在读取事件时会进行去重操作,然后事件被发布到消费者端的Webhook URL上。去重是通过维护被读取事件的散列值缓存来实现的。如果遇到具有相同散列值的事件,就不传递这个事件。 < ">总的来说,我们的解决方案与传统的将Kafka作为实时、流式系统的用法不一样。我们成功地将Kafka作为存储系统,构建了一个API,在进行事件恢复时提升了用户体验和数据访问能力。我们利用已有的实时系统设计让系统的维护变得更加容易。此外,客户数据的恢复速度达到了我们的预期。 原文链接 https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/kafka-as-a-storage-system“确认传播”专注于品牌策划、效果营销和危机管理的数字整合营销传播公司,我们深度诠释客户的品牌理念、文化及背景,多维深度传播客户的文化底蕴和核心价值观,提升客户品牌的知名度、关注度与美誉度。 |
上一篇:谷歌广告推广时需要注意点击率和转化率
下一篇:托管MoPub发布者的App-ads.txt文件采用率超过80%
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“Twitter把Kafka当作存储系统使用”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通Twitter把Kafka当作存储系统使用的相关事宜。
关键词:Twitter把Kafka当作存储系统